最早开始学脱壳,是根据三人行的教程一步一步来的,我也把他当成我的老师,“老师说的话永远是对的”。
三人行曾经说过,新手学习使用OD的一个关键就是:实现向下的跳转,打断向上的跳转。 我根据他的说法,
一般那些壳都可以脱。后来看了黑基的教程,里面有个老师是说,实现向下的跳转,打断向上的跳转。但是,
他又说,如果有非常大的跳转没有实现,我们就要让他实现。本来感觉很奇怪,不过习惯的三人行的方法,
我也没在意,还是照样使用三人行的,毕竟是新手,能学会一种就行了。今天看了一个关于脱
PKLITE32 V1.1 -> PKWARE Inc. *壳的教程,又出现了另一个疑问。
0040D000 > 68 80D04000 push PKLITE32.0040D080 /入口点,停在这
0040D005 68 73154100 push PKLITE32.00411573 F8
0040D00A 68 00000000 push 0
0040D00F E8 5F450000 call PKLITE32.00411573
0040D014 ^ E9 B340FFFF jmp PKLITE32.004010CC /这边是个jmp大跳,实现了,但是是往回跳,我们应该在下面F4,但
如果那样下去的话,我搞到最后不行了。看了教程,非常简单,就按5下F8就到OEP了,也就是在jmp下冒用下段,直接让它跳。
脱完壳后PEID查到 Microsoft Visual C++ 6.0 SPx Method 1 [Overlay]
FI 查到 Masm v6.0
004010CC 55 push ebp
004010CD 8BEC mov ebp,esp
004010CF 83EC 44 sub esp,44
004010D2 56 push esi
可以看出是D写的
怎么会出现三种语言了啊
还有一个小问题就是OD里面的jmp全部变成了一块红色的东西,看不到字母了,这是什么原因。
UPX 0.89.6 - 1.02 / 1.05 - 1.24 (Delphi) stub -> Markus & Laszlo
用ESP定律,F9后到这
0046AD57 ^\E9 98CBFEFF jmp UPX_0_89.004578F4 /实现了jmp向上大跳
0046AD5C ^ 74 AD je short UPX_0_89.0046AD0B /跳转没有实现
0046AD5E 46 inc esi
在这个上也是F8,让jmp往回跳,直接到达OEP了。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课