命运舞姬 发表于 2015-6-25 08:50:51

内存断点原理4

vi.下面来讨论一下内存断点的局限性问题。
是不是什么壳都可以用内存中断啊?
不是每个都可以的,一些像UPX和ASPACK就不行。
为什么?
呵呵~follew me!
情况1.
我们来看看UPX的壳

首先,他的壳代码在UPX1段。

这里是他要跳到OEP的地方



CODE:


0040ED4F /77 11    ja short NOTEPAD_.0040ED62
0040ED51 |01C3    add ebx,eax
0040ED53 |8B03    mov eax,dword ptr ds:
0040ED55 |86C4    xchg ah,al
0040ED57 |C1C0 10    rol eax,10    //在解码
0040ED5A |86C4    xchg ah,al
0040ED5C |01F0    add eax,esi
0040ED5E |8903    mov dword ptr ds:,eax
0040ED60 ^|EB E2    jmp short NOTEPAD_.0040ED44
0040ED62 \24 0F    and al,0F
0040ED64 C1E0 10    shl eax,10
0040ED67 66:8B07    mov ax,word ptr ds:
0040ED6A 83C7 02    add edi,2
0040ED6D ^ EB E2    jmp short NOTEPAD_.0040ED51 //回跳解码
0040ED6F 61    popad
0040ED70 - E9 5723FFFF jmp NOTEPAD_.004010CC    //跳到OEP





我们看到他在对code段解压完毕的时候马上就JMP到OEP去了,那么我们根本就来不及使用内存断点的办法。

你可能说,我可以在

0040ED6F 61    popad //这一句下段然后使用啊

呵呵~~当然可以,不过你把花在下内存断点的时间,多按下几次F8不更好?!

也就是说当一个壳如果他在JMP 到OEP前的一行代码仍在都在对code段解压,那么我们就不能再使用这种办法了!

或者说我们没必要使用内存断点更贴切一点!

情况2.:
对于一些在OEP处有stolen code的代码
我们来看看一个OEP



CODE:


0049E2F4 u> 55    push ebp     //OEP
0049E2F5 8BEC    mov ebp,esp
0049E2F7 83C4 F4    add esp,-0C
0049E2FA B8 BCE04900 mov eax,unpack.0049E0BC
0049E2FF E8 048CF6FF call unpack.00406F08     //这里调用子程序
0049E304 A1 B8FE4900 mov eax,dword ptr ds:
0049E309 50    push eax
0049E30A 6A 00    push 0
0049E30C 68 1F000F00 push 0F001F
0049E311 E8 E68EF6FF call <jmp.&kernel32.OpenFileMappingA> //API
0049E316 A3 60194A00 mov dword ptr ds:,eax
0049E31B 833D 60194A00 00 cmp dword ptr ds:,0



这个软件在被PESPIN加壳了以后这些全被偷掉了!

也就是说,壳在模拟OEP代码的时候必然会执行



QUOTE:


0049E2FF E8 048CF6FF call unpack.00406F08 //这一步


而这个地方是call向code段的。如果我们使用内存访问断点,那么就停在这个子程序的地方



CODE:


00406F08 50    push eax        //会停在这里
00406F09 6A 00    push 0
00406F0B E8 F8FEFFFF call <jmp.&kernel32.GetModuleHandleA>
00406F10 BA 04F14900 mov edx,unpack.0049F104
00406F15 52    push edx





这里既不是处理stolen code的地方,也不是FOEP的地方。这就会对我们的判断产生误导。

当然你可以alt+F9返回到壳处理stolen的地方,然后用内存断点,或者按几下F8到达FOEP处,但试问如果你拿到一个未知的壳的时候又怎么知道应该这么处理呢?

还有其他一些情况留给大家总结吧!
在下的砖已抛出,各位的玉不久矣。

3.总结:
好了说了很多,大家应该对内存断点的办法有了全面的了解,如果了解了内存断点的原理就不难明白他的使用方法,不难明白为什么有写壳不能使用内存断点的办法,其实任何的一种办法都需要经验的积累。相信如果大家在回答开篇的3个问题,已经不难了。

海潮 发表于 2015-6-25 13:38:05

沙发~学习

332936 发表于 2017-12-15 11:32:33

每天坚持学习,慢慢进步,加油!
页: [1]
查看完整版本: 内存断点原理4