使用ESP定律,手脱UPX壳
关于upx壳,其实很容易脱壳,使用ESP定律,便可以很容易的脱掉。废话不多说,以notepad的UPX为例,说明ESP定律的使用过程。
1、先用PEiD查壳,
UPX 0.89.6 - 1.02 / 1.05 - 1.24 -> Markus & Laszlo
2、OD载入,断到蓝色的代码行处,如下所示:
0040E8C0 60 pushad
0040E8C1 BE 15B04000 mov esi,UPX.0040B015
0040E8C6 8DBE EB5FFFFF lea edi,dword ptr ds:[esi+FFFF5FEB]
0040E8CC 57 push edi
0040E8CD 83CD FF or ebp,FFFFFFFF
0040E8D0 EB 10 jmp short UPX.0040E8E2
如果看到pushad,pushfd,可以考虑使用ESP定律的方法脱壳。何
为ESP定律法,就是在pushad处,F8单步跟踪一步,查看右边寄存器窗口中,ESP的值发生了变化,右单击ESP寄存器的值,在弹出菜单中,选择"
在数据窗口跟随",此时,在数据窗口中,右单击“数值”,选择“断点”->“设置硬件访问断点”->“Word”,此时硬件断点设置完毕,按
Shift+F9,代码断到如下位置的蓝色代码处:
0040EA0F - E9 B826FFFF jmp UPX.004010CC
0040EA14 0000 add byte ptr ds:[eax],al
0040EA16 0000 add byte ptr ds:[eax],al
0040EA18 0000 add byte ptr ds:[eax],al
0040EA1A 0000 add byte ptr ds:[eax],al
0040EA1C 0000 add byte ptr ds:[eax],al
此时,再按F8,便来到了OEP处,代码类似于:
004010CC 55 push ebp
004010CD 8BEC mov ebp,esp
004010CF 83EC 44 sub esp,44
004010D2 56 push esi
004010D3 FF15 E4634000 call dword ptr ds:[4063E4] ; kernel32.GetCommandLineA
004010D9 8BF0 mov esi,eax
此处就是脱壳的最佳位置。使用OD自带的脱壳插件脱壳即可。注意,要记住10CC这个偏移地址,因为在修复脱壳文件时,要使用这个地址。

浙公网安备 33010602011771号