babyLoginPlus——bugku
解题思路
该题主要是参照其他大佬writeup的思路,即找到输入,下断点,根据最后所得到的比较等式来一步步调试得到的。
VM
该函数应该是使用vm函数的地方
因此在这个地方下了断点之后,一步步开始调试,看看程序的执行流程
首先,程序的执行到这个地方,会不断重复执行,然后根据调用的函数来获取输入、进行比较、执行输出。
在前几次的执行中,包含了获取输入的函数,得到我们的输入。
比较过程
获取输入后,程序开始执行比较,其中我也不太清楚部分操作的流程,可能是获取数据或者解析数据什么的,因此省略了。
获取input[i]的字符更新为input[i]-9。
sub dex,ecx
获取操作数 0x26。
将input[i]与上一个函数获取的0x26异或,即input[i] = input[i] ^ 0x26。
xor edx,ecx
获取程序之前生成的Welcome字符串的第i个字符。
将获取Welcome字符串的字符和之前变化后的input[i]进行异或。
xor edx,ecx
执行add [eax], esi, 将上一步异或得到的的字符加上6。
add [eax], esi
获取最后结果比较所需的数组。
进行结果比较。
cmp edi,ecx
解题脚本
1 | result = [0x32, 0x26, 0x18, 0x21, 0x41, 0x23, 0x2A, 0x57, 0x44, 0x29, 0x35, 0x12, 0x20, 0x17, 0x45, 0x1C, |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 hahbiubiubiu!