March 13, 2022

关于逆向工程核心原理-内嵌补丁

(简称逆向工程核心原理第二十章)

内嵌补丁

内嵌补丁即是inline code patch的简称,插入并运行的洞穴代码,估计是坐着对之后的hook技术打铺垫?简而言之,就是插入一段自己的代码修改部分功能。

image-20220313172526065

分析程序

作者上了个练习,感觉和CTF的题目差不多了,就是SMC,不过用dbg来分析增加经验,并且插入自己代码的事情还是第一次干

贴上自己的分析

  1. 先在从EP到解密区
  2. xor B区 和 A区 (也就是恢复B区和A区的代码)
  3. 再CRC校验 B区 查看数据有没有变
  4. 校验完如果失败就EXIT,成功就 xor C区
  5. 最后跳到 OEP(A区)

image-20220313173459388

image-20220313174626585

几个需要注意的点

1. 数据在B区

地址分别是40110A和401123,我们就是要修改这里面的字符串,因为调用Dialog Box的地址在那

image-20220313174200924

2. 放在可写区

  1. 注意要放在可写区,同时这里可以看下在RAW基地址是400,内存基地址是1000

  2. 也可以看到Size Of Raw Data为400,Virtual Size为280

  3. 也就是说在文件中尺寸是400,但是仅有280映射到内存中,其余区域(680 ~ 800)都是为空的

  4. 我们写那里面(680 ~ 800)即可

image-20220313174811472

制作内嵌补丁

算一下可以写的地址

文件基地址 400 + 280 = 680(这里开始就是空节区)

680 - 400 + 1000 = 1280(RAW To RVA)

于是把我们的字符串放入程序要调用的位置,要注意要00结尾,所以在ecx那要字符串长度 + 1

然后再跳到OEP

image-20220313180013874

P.Z Patch it!

呜呼!

image-20220313180210680

image-20220313180215254

DASCTF X SU
🍬
HFCTF2022
🍪

About this Post

This post is written by P.Z, licensed under CC BY-NC 4.0.