前两天kiss突然要我帮他爆个文件,文件是“PGP自解压压缩文档”!他说他把密码给忘记了。
传过来后首先当然是请出peid查壳咯,发现是UPX 0.89.6 - 1.02 / 1.05 - 1.24 -> Markus & Laszlo [Overlay]的壳!一看是UPX的壳,想应该容易搞定,立刻用OD载入
根据经验 ctrl+F 再输入popad回车再运行到所选,F8单步两下就到OEP了!!!再dump出来!搞定。。
还以为这么轻松,马上运行脱壳出来的文件,居然有自效应
---------------------------
解密错误
---------------------------
检测到文件更改,可能受到病毒感染!
---------------------------
确定
---------------------------
闷了。。。后来想到之前看过的一篇文章过自效应的,于是马上又继续用OD载入!首先载入未脱壳的文件,到达OEP后不脱出来,直接下断点,执行命令BP CreateFileA回车,然后F9运行!被断下来后按下alt+F9回到程序领空!接着放下这边,再开一个OD载入脱壳后的文件,直接下BP CreateFileA断点,再F9运行,然后一样alt+F9返回程序领空!
这个时候是停在了
0040EB5F 8BF0 mov esi, eax ;停在这里的
0040EB61 3BF7 cmp esi, edi
0040EB63 75 14 jnz short 0040EB79
0040EB65 FF15 64114100 call dword ptr [411164] ; ntdll.RtlGetLastWin32Error |
到了这里后就要开始比较了,一个一个的单步!我搞的时候是首先用脱壳后的文件单步,到了跳转或者返回的地方就停下来,再用未脱壳的单步到同样的地方,再比较!
在比较过程中发现了两处不同的地方!第一处是:
未脱壳文件 |
0040120E /75 3D jnz short 0040124D ;这里跳转已经实现
00401210 |6A 06 push 6
00401212 |8D45 D0 lea eax, dword ptr [ebp-30]
00401215 |68 B8604100 push 004160B8 ; ASCII "PGPSDA"
0040121A |50 push eax
0040121B |E8 20850000 call 00409740
00401220 |83C4 0C add esp, 0C
00401223 |85C0 test eax, eax
00401225 |75 26 jnz short 0040124D
00401227 |8D85 00FEFFFF lea eax, dword ptr [ebp-200]
0040122D |68 A4604100 push 004160A4 ; ASCII ".decoder.sda.exe"
00401232 |50 |