求脱壳EP 2.0 -> CoDe_Inside方法
下面是我的脱壳步骤:
用peid查壳,是EP 2.0 -> CoDe_Inside这个壳
然后用OD载入
00EC6EE4 > 6A 73 PUSH 73
00EC6EE6 60 PUSHAD
00EC6EE7 E9 01010000 JMP BfServer.00EC6FED
00EC6EEC DAA9 7C8F9226 FISUBR DWORD PTR DS:[ECX+26928F7C]
00EC6EF2 A6 CMPS BYTE PTR DS:[ESI],BYTE PTR ES:[EDI]
00EC6EF3 0879 9B OR BYTE PTR DS:[ECX-65],BH
00EC6EF6 D8C3 FADD ST,ST(3)
00EC6EF8 8C3E MOV WORD PTR DS:[ESI],SEG? ; 未定义的段寄存器
00EC6EFA 56 PUSH ESI
00EC6EFB A7 CMPS DWORD PTR DS:[ESI],DWORD PTR ES:[ED>
00EC6EFC E7 75 OUT 75,EAX ; I/O 命令
00EC6EFE 1126 ADC DWORD PTR DS:[ESI],ESP
隐藏OD,然后忽略所有的异常,按shift+f9四次到达
711A9574 90 NOP
711A9575 64:8F05 0000000>POP DWORD PTR FS:[0]
711A957C C3 RETN
711A957D C3 RETN
711A957E 8BC0 MOV EAX,EAX
711A9580 54 PUSH ESP
711A9581 E8 56EBF7FF CALL V2201105.711280DC ; JMP 到 kernel32.OutputDebugStringA
711A9586 CC INT3
711A9587 CC INT3
然后观察堆栈
016BFE44 016BFE70 指向下一个 SEH 记录的指针
016BFE48 711A94A9 SE处理程序
016BFE4C 711AFEFE 返回到 V2201105.711AFEFE 来自 V2201105.711A94A4
016BFE50 016BFE64
016BFE54 00000000
016BFE58 016BFF70
然后按ctrl+g输入711A94A9,然后下断点,shirft+f9断下来
来到这里
711A94A9 53 PUSH EBX
711A94AA 52 PUSH EDX
711A94AB 8B5C24 14 MOV EBX,DWORD PTR SS:[ESP+14]
711A94AF 8B93 C4000000 MOV EDX,DWORD PTR DS:[EBX+C4]
711A94B5 8B83 C0000000 MOV EAX,DWORD PTR DS:[EBX+C0]
711A94BB A3 B4B62371 MOV DWORD PTR DS:[7123B6B4],EAX
711A94C0 E8 5FFFFFFF CALL V2201105.711A9424
711A94C5 9C PUSHFD
让下单步
可以看到
711A954E 8943 10 MOV DWORD PTR DS:[EBX+10],EAX
711A9551 C743 18 5501000>MOV DWORD PTR DS:[EBX+18],155
711A9558 5A POP EDX
711A9559 5B POP EBX
711A955A C3 RETN
711A955B - E9 C605E4B6 JMP 27FE9B26
711A9560 2371 01 AND ESI,DWORD PTR DS:[ECX+1]
711A9563 ^ EB DE JMP SHORT V2201105.711A9543
711A9565 64:FF35 0000000>PUSH DWORD PTR FS:[0]
711A956C 64:8925 0000000>MOV DWORD PTR FS:[0],ESP
但是不论是下断点还是下硬件断点,都截不下来这个jmp,看着快跳到OEP了,要怎么才能跳过去呢?
在单步的过程中发现会调用epe文件,就是一个dll,peid查出upx的壳,可是要具体怎么做呢?我是新手,求指导。
[最优解释]
711A955B - E9 C605E4B6 JMP 27FE9B26
这行指令的上面是retn啊 单步肯定过不去
在说了27FE9B26 不可能是oep啊
[其他解释]
自己顶一下,求大神指点,感激不尽
[其他解释]
我再跟跟,谢谢