好友
阅读权限40
听众
最后登录1970-1-1
|
下面是小生的脱文的一部分
00413000 >5Bpop ebx //OD载入
0041300181E3 00FFFFFF and ebx,FFFFFF00 //ait+m打开内存镜象
━━━━━━━━━━━━━━━━━━━━━━━━━━
首先在00405000处下F2设置访问中断,接着shift+f9运行
━━━━━━━━━━━━━━━━━━━━━━━━━━
00413232300431xor byte ptr ds:[ecx+esi],al //程序停在了这里
0041323581EA 1F79E4BF sub edx,BFE4791F //在一次ait+m打开内存镜象
━━━━━━━━━━━━━━━━━━━━━━━━━━
在00401000处下F2设置访问中断,接着shift+f9运行
━━━━━━━━━━━━━━━━━━━━━━━━━━
004010CC55push ebp //程序直接停在了OEP
004010CD8BECmov ebp,esp//dump程序
写的比较详细,但是没说原理。
我照着画了一遍,成功了,但是不理解的话,以后脱其它壳还是不会用这个方法。
so ,我就找资料:::
【【这里注意上面虽然下了两次内存访问断点,但是本质是不一样的,目的也是不一样的。
1.对data段下内存访问断点而中断是因为内存写入中断,目的是断在对data段的解压时,这时壳要对data段写数据,但是code段已经解压完毕。
2.对code段下内存访问断点而中断是因为内存执行中断,目的当然就是寻找OEP了。
总结一下:如果我们知道壳在什么地方对code段解压完毕我们就可以使用内存断点,找到OEP。如果不知道,那么我们就依靠2次内存断点去找,如果还不行就用多次内存断点。总之明白了原理在多次的内存断点其实都一样。从这个过程中我们了解的是壳在对区段解码的顺序!】】(来自百度)
下面是我的理解了···
data --- 数据
code--- 代码
我们最终的目的是 在代码段解压完毕 并开始执行时断下它,自然就断在了 OEP
那么如何判断 什么时候断代码段好 从而 选择 下断内存断点 呢?
我觉得从小生和网文 可以看出来:
断在data段,是因为内存写入,要写入data段了,自然是code段已经解压完毕。
那么,code段已经解压完毕,说明就快要或者开始执行了,此时再下断code段,自然就断了下来。
于是,总结出两次内存断点法的操作:
1,alt+m , F2 in data, F9
2,alt+m , F2 in code, F9
3,OEP
ps:菜鸟没办法,脱不了壳,但是学习了方法··写个笔记(****(版主知道什么意思吧!:-)))[s:40] |
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|