单步跟踪法
首先 OD载入程序 停在这儿00401000 >60pushad ; OD载入,停在这儿0040100181C0 5735821F add eax, 1F8235570040100760pushad0040100861popad0040100981E8 5735821F sub eax, 1F8235570040100F61popad004010106A 00 push00040101287F1xchgecx, esi0040101460pushad00401015E8 04000000 call0040101E ; 这个F7
F7进入后来到
0040101E42inc edx0040101F4Adec edx0040102083EC FC sub esp, -40040102361popad0040102487F1xchgecx, esi00401026810424 1344ECB8 add dword ptr [esp], B8EC44130040102D46inc esi0040102EEB 01 jmp short 004010310040103061popad0040103147inc edi004010324Fdec edi004010334Edec esi00401034813424 6A9771E4 xor dword ptr [esp], E471976A0040103B81C3 5BE110CA add ebx, CA10E15B00401041E8 04000000 call0040104A ; 这个F7
接着来到0040104A6A 00 push00040104C810424 20BA55A6 add dword ptr [esp], A655BA200040105383C4 04 add esp, 40040105683C4 04 add esp, 40040105981EB 5BE110CA sub ebx, CA10E15B0040105F810424 2884E20E add dword ptr [esp], 0EE284280040106687E9xchgecx, ebp0040106860pushad0040106956pushesi0040106A83C4 04 add esp, 40040106D61popad0040106E87E9xchgecx, ebp00401070810424 E838C094 add dword ptr [esp], 94C038E80040107745inc ebp0040107881C7 80B82EE7 add edi, E72EB8800040107EEB 02 jmp short 00401082 ; 这个跳后会来到下面的地方
0040108260pushad0040108383C4 20 add esp, 200040108681EF 80B82EE7 sub edi, E72EB8800040108C4Ddec ebp0040108D68 83ECF8C3 pushC3F8EC8300401092E8 03000000 call0040109A ; 这里F700401097204E 03 and [esi+3], cl0040109A53pushebx; F7后来到这儿0040109B60pushad0040109CE8 05000000 call004010A6 ; 这儿F7004010A18ACBmov cl, bl004010A3DA15 1883C404 ficom dword ptr [4C48318]004010A983EC E0 sub esp, -20004010AC83C4 04 add esp, 4004010AF83C4 04 add esp, 4004010B2FFD4callesp; 这里F8,然后就会跳向 到OEP
00401700 >55pushebp; OEP004017018BECmov ebp, esp004017036A FF push-10040170568 00254000 push004025000040170A68 86184000 push<jmp.&msvcrt.#238>0040170F64:A1 00000000mov eax, fs:[0]0040171550pusheax
还有一种方法,我记得用peid查的入口点,在入口点下断,然后shift+F9运行,就能到了(最懒的方法)
但是不知道我的电脑怎么了,由于这个壳报毒。我关了杀毒软件,但是我后来重新打开电脑再来用其他方法试试的时候
发现老是出错,而且连单步跟踪都有错误,不知道怎么回事!!!
郁闷了,看看哪儿出来问题~~~~~
思考中:为什么开始的时候能成功,到后来就不行了呢???郁闷中
那个开始感觉应该不是call esp就到oep了,为什么又会到呢??搞不明白~~~
思考了一下,两次内存镜像也成功了,不知道你们是不是能成功,为什么我成功后,第二次电脑重启就会有问题
首先打开内存(alt+m)
找到Memory map, 条目 18 地址=00407000 大小=00002000 (8192.) 属主=UnPackMe 00400000 区段=.ximo 类型=Imag 01001002 访问=R 初始访问=RWE
F2下断
然后SHIFT+F9 运行
来到这儿0040976B8032 BC xor byte ptr [edx], 0BC0040976EEB 03 jmp short 004097730040977088F4mov ah, dh004097722251 68 and dl, [ecx+68]
再打开内存
在这个地方F2下断Memory map, 条目 25 地址=00403000 大小=00001000 (4096.) 属主=UnPackMe 00400000 区段=.ximo 类型=Imag 01001002 访问=R 初始访问=RWE
然后SHIFT+F9运行
来到下面的地方00401734830D 2C314000 F>ordword ptr [40312C], FFFFFFFF ; 来到这儿0040173B830D 30314000 F>ordword ptr [403130], FFFFFFFF00401742FF15 8C214000 call[40218C] ; msvcrt.__p__fmode004017488B0D 20314000 mov ecx, [403120]0040174E8908mov [eax], ecx00401750FF15 88214000 call[402188] ; msvcrt.__p__commode004017568B0D 1C314000 mov ecx, [40311C]0040175C8908mov [eax], ecx
然后往上看,可以看到程序的oep0040170055pushebp; 在这个地方右键-->此处为新的EIP004017018BECmov ebp, esp004017036A FF push-10040170568 00254000 push004025000040170A68 86184000 push00401886 ; jmp 到 msvcrt._except_handler30040170F64:A1 00000000mov eax, fs:[0]0040171550pusheax0040171664:8925 0000000>mov fs:[0], esp0040171D83EC 68 sub esp, 68
然后用loadPE脱壳,Import REC修复
即可
dumped_.rar |