- 单步跟踪法,找大跳
0040D001 > 60 pushad
0040D002 E8 03000000 call NotePad_.0040D00A ; 不能在这里下F4
0040D007 - E9 EB045D45 jmp 459DD4F7 ; 跳转太大,也不能在这里下
0040D00C 55 push ebp ; 可以在这里下F4
0040D00D C3 retn
0040D00E E8 01000000 call NotePad_.0040D014 ; 涉及到call和jmp还有nop指令的,一般都绕过,悠着点,跳到这些指令的下一条
0040D013 EB 5D jmp short NotePad_.0040D072
0040D015 BB EDFFFFFF mov ebx,-13
备注:有时候程序会跑飞,这时候call也得跟进去
ESP大法, 通用
hr esp
ctrl+f popad
仅适用于upx
, 不适用于asp
备注:我说错了。这个也是通用的。od是怎么找的呢,在内存中找指令对应的字节。所以会出现找到后,强行解释后面的指令就错了,这说明找到的不是原本代码中的,是拆解了。应该继续找。
- 内存镜像法(仅适用于upx,是根据upx压缩的算法的出来的)
ALT+M打开内存
找到.rsrc,F2下断,F9运行
ALT+M打开内存
找到UPX0,F2下断,F9运行
备注:其实这种方式是通用的,先资源断点,再text断点。我说错了。upx0就是text段。
upx\asp
好脱壳是因为这两种壳都是压缩壳,属于解压缩后就是完整原始代码的压缩方式。
lordPE、ollydump
等都属于对内存的dump
操作,因此到达oep
后就不要动了。dump
完了之后看下如果没壳了但是运行不了,那就是IAT
的事情用importFix
修复下就行了。如果dump
完了之后发现还是没脱壳,IAT修复也无济于事。
lordPE
需要先修复文件大小,然后dump
。importFix
属于对内存程序中的IAT
修复,所以,多种dump
出来方式,用一次ImportFix
就够了。不用不同的dump
方式,然后每一次都importfix
.