脱壳基础知识入门之用内存断点找OEP
2007-01-15 16:44:16 来源:WEB开发网核心提示: 也就是说当一个壳如果他在JMP到OEP前的一行代码仍在都在对code段解压,那么我们就不能再使用这种办法了!或者说我们没必要使用内存断点更贴切一点!情况2.对于一些在OEP处有stolencode的代码我们来看看一个OEP0049E2F4u>55pushebp//OEP0049E2F
也就是说当一个壳如果他在JMP到OEP前的一行代码仍在都在对code段解压,那么我们就不能再使用这种办法了!
或者说我们没必要使用内存断点更贴切一点!
情况2.
对于一些在OEP处有stolencode的代码
我们来看看一个OEP
0049E2F4u> 55 pushebp //OEP
0049E2F5 8BEC movebp,esp
0049E2F7 83C4F4 addesp,-0C
0049E2FA B8BCE04900 moveax,unpack.0049E0BC
0049E2FF E8048CF6FF callunpack.00406F08 //这里调用子程序
0049E304 A1B8FE4900 moveax,dwordptrds:[49FEB8]
0049E309 50 pusheax
0049E30A 6A00 push0
0049E30C 681F000F00 push0F001F
0049E311 E8E68EF6FF call<jmp.&kernel32.OpenFileMappingA> //API
0049E316 A360194A00 movdwordptrds:[4A1960],eax
0049E31B 833D60194A0000 cmpdwordptrds:[4A1960],0
这个软件在被PESPIN加壳了以后这些全被偷掉了!
也就是说,壳在模拟OEP代码的时候必然会执行
0049E2FF E8048CF6FF callunpack.00406F08 //这一步
而这个地方是call向code段的。如果我们使用内存访问断点,那么就停在这个子程序的地方
00406F08 50 pusheax //会停在这里
00406F09 6A00 push0
00406F0B E8F8FEFFFF call<jmp.&kernel32.GetModuleHandleA>
00406F10 BA04F14900 movedx,unpack.0049F104
00406F15 52 pushedx
这里既不是处理stolencode的地方,也不是FOEP的地方。这就会对我们的判断产生误导。
当然你可以alt+F9返回到壳处理stolen的地方,然后用内存断点,或者按几下F8到达FOEP处,但试问如果你拿到一个未知的壳的时候又怎么知道应该这么处理呢?
还有其他一些情况留给大家总结吧!
在下的砖已抛出,各位的玉不久矣。
--------------------------------------------------
3.总结
好了说了很多,大家应该对内存断点的办法有了全面的了解,如果了解了内存断点的原理就不难明白他的使用方法,不难明白为什么有写壳不能使用内存断点的办法,其实任何的一种办法都需要经验的积累。相信如果大家在回答开篇的3个问题,已经不难了。
大家可以结合原理再好好的体会一下《手动脱壳进阶第八篇Skvp1.32》这篇文章。
更多精彩
赞助商链接