小弟最近继续学习脱壳,终于遇到了传说调试检查问题了:
目标程序是个游戏(Game.exe),通过PEid查壳,显示的是Microsoft Visual C++ 6.0,鬼才相信!一定是伪装了,论坛的大大们也能实现这种效果。用OllyDgb载入,果真提示程序被压缩,选择“不继续分析”,停到了这里:
007D2000 > 55 PUSH EBP
007D2001 8BEC MOV EBP,ESP
007D2003 6A FF PUSH -1
007D2005 68 98664100 PUSH Game.00416698
007D200A 68 3C3D4100 PUSH Game.00413D3C
007D200F 64:A1 00000000 MOV EAX,DWORD PTR FS:[0]
007D2015 50 PUSH EAX
007D2016 64:8925 0000000>MOV DWORD PTR FS:[0],ESP
007D201D 83EC 68 SUB ESP,68
007D2020 53 PUSH EBX
007D2021 56 PUSH ESI
007D2022 57 PUSH EDI
第一句是 PUSH EBP,和我前一阵子学习UPX等的PUSHAD不一样,记得好像ASProtect的第一句是这个。不管它,硬着头皮上吧,F8一步步跟入。。。。
....
007D2005 68 98664100 PUSH Game.00416698;F8,没啥异常007D200A 68 3C3D4100 PUSH Game.00413D3C;F8,没啥异常
....
一路无话,来到了这里,有个RETN,跳转到另外的地址了。。
007D20A3 8B85 5E1F4000 MOV EAX,DWORD PTR SS:[EBP+401F5E]
007D20A9 0385 5A1F4000 ADD EAX,DWORD PTR SS:[EBP+401F5A]
007D20AF 50 PUSH EAX ; Game.007CC001
007D20B0 C3 RETN ; 在这里我按F8就跳了
007D20B1 ^ EB F0 JMP SHORT Game.007D20A3
007D20B3 55 PUSH EBP
来到了这里:
007CC001 60 PUSHAD
看到 PUSHAD 我内心一阵狂喜,以为继续找到 POPAD 就可以找到 OEP 了。。。
007CC002 E8 03000000 CALL Game.007CC00A ;这句不能F8,所以F7进入
007CC00A 5D POP EBP ; Game.007CC007
007CC00B 45 INC EBP
007CC00C 55 PUSH EBP
007CC00D C3 RETN; 跳到了下面这里
。。。
007CC008 /EB 04 JMP SHORT Game.007CC00E;跳转已实现
007CC00A |5D POP EBP
007CC00B |45 INC EBP
007CC00C |55 PUSH EBP
007CC00D |C3 RETN
007CC00E \E8 01000000 CALL Game.007CC014;来到这,F7步入
007CC013 EB 5D JMP SHORT Game.007CC072
。。。
007CC014 5D POP EBP ; Game.007CC013 来到了这里
007CC015 BB EDFFFFFF MOV EBX,-13
007CC01A 03DD ADD EBX,EBP
。。。
007CC04E 50 PUSH EAX
007CC04F FF95 490F0000 CALL DWORD PTR SS:[EBP+F49]
007CC055 8985 4D050000 MOV DWORD PTR SS:[EBP+54D],EAX
007CC05B 8D5D 6B LEA EBX,DWORD PTR SS:[EBP+6B]
007CC05E 53 PUSH EBX
007CC05F 57 PUSH EDI
007CC060 FF95 490F0000 CALL DWORD PTR SS:[EBP+F49] ; kernel32.GetProcAddress 大家注意了吗?这里的代码调用了许多次 kernel32.dll里的 API,是否意味着已经解压缩完毕呢?
007CC066 8985 51050000 MOV DWORD PTR SS:[EBP+551],EAX
007CC06C 8D45 77 LEA EAX,DWORD PTR SS:[EBP+77]
。。。。
期间调用了一些socket api,,
再后来,OllyDbg提示,程序已退出
,我的OD也用了隐藏补丁,为什么还是能够检查出来呢?如果直接运行 Game.exe就没问题,请大家帮忙想想办法。。是不是我的方法不对
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)