(简称逆向工程核心原理第二十章)
内嵌补丁
内嵌补丁即是inline code patch的简称,插入并运行的洞穴代码,估计是坐着对之后的hook技术打铺垫?简而言之,就是插入一段自己的代码修改部分功能。
分析程序
作者上了个练习,感觉和CTF的题目差不多了,就是SMC,不过用dbg来分析增加经验,并且插入自己代码的事情还是第一次干
贴上自己的分析
- 先在从EP到解密区
- xor B区 和 A区 (也就是恢复B区和A区的代码)
- 再CRC校验 B区 查看数据有没有变
- 校验完如果失败就EXIT,成功就 xor C区
- 最后跳到 OEP(A区)
几个需要注意的点
1. 数据在B区
地址分别是40110A和401123,我们就是要修改这里面的字符串,因为调用Dialog Box的地址在那
2. 放在可写区
注意要放在可写区,同时这里可以看下在RAW基地址是400,内存基地址是1000
也可以看到Size Of Raw Data为400,Virtual Size为280
也就是说在文件中尺寸是400,但是仅有280映射到内存中,其余区域(680 ~ 800)都是为空的
我们写那里面(680 ~ 800)即可
制作内嵌补丁
算一下可以写的地址
文件基地址 400 + 280 = 680(这里开始就是空节区)
680 - 400 + 1000 = 1280(RAW To RVA)
于是把我们的字符串放入程序要调用的位置,要注意要00结尾,所以在ecx那要字符串长度 + 1
然后再跳到OEP
P.Z Patch it!
呜呼!
🍬
🍪
About this Post
This post is written by P.Z, licensed under CC BY-NC 4.0.