查壳,发现是upx壳。
我们可以直接使用脱壳机,这里使用ESP定律手动脱壳。
打开IDA,发现根本分析不了:
把程序拖入x32dbg,点击选项->首选项:
至少选择这两个断点,否则不知道停在哪个地方。
第一行就是pushad。
按F7,进入到下一行,然后发现ESP已经变了。
右击ESP的数字,点击在转储中跟随,
右击第一行,选择断点,“硬件,存取”,双字。
然后按F9继续运行。
已经到了popad的位置。
继续调试或者根据经验可以发现,00401280就是OEP。
点击插件->Scylla,先在OEP填入00401280,然后点击转储。
注意:对于这题的UPX壳可以填入jmp后的地址,但一般来说是填入jmp语句的地址,也即是0040E4……这个地址,否则很容易出现主函数入口识别错误。同时,我们也可以先进入jmp的地址看看,看看jmp后的地方有没有开始系统调用,有的话说明这里就是主函数入口了,否则很可能壳没有脱干净,得继续执行。确认脱壳脱干净了,再重新填入jmp语句的地址。
然后选择文件存放位置,
会生成一个这样的文件。
然后在Scylla点击其他->选项,
至少填上和选上这些。
然后先点击IAT自动搜索,再点击获取导入:
然后点击修复转储,选择
这个文件。
然后看到生成了这个文件:
把最后这个SCY拖入IDA分析:
已经能正常分析了,找到main函数,剩下的就是一眼题。
参考:https://blog.csdn.net/weixin_46287316/article/details/109669066