逆向工程核心原理 Chapter20 内嵌补丁练习

记录一下第二十章的实操过程
这个crackme本身逻辑不难 SMC自解密
学习点在于它有个CRC校验 不好直接修改字符串 所以需要"内嵌补丁"的技术实现
同时也从简单的开始 慢慢摆脱对IDA的依赖 提升用x32dbg动态调试的经验

调试分析流程

首先会进到这个循环
image
注意查看eax: 0x4010F5

往下走是这个:
image
注意这里数组取的ebx: 0x401007

继续走:
image
这里注意有条 mov ebx eax : 0x4010F5

这个函数ret后进入最后一个:
image
这里的ebx: 0x40124B

将这三个段基址由小到大记作A,B,C
那么流程就是:

F1:
	XOR B 0x44
	XOR A 7
	XOR B 11
F2 in A:
	CRC_CHECK
	XOR C 17

内嵌补丁代码编写

由于CRC校验的存在 很难直接对字符串进行patch
运行完解密代码后来到OEP处 0x40121E
image

我们想要把"内嵌补丁"写在这一段空白:
image

对应
image

搜索找到原本字符串的内存地址:
image

然后硬写汇编...
这里真不是很会写 跟着书学习一下
image

这里学习到了用 rep movsb 修改 他那个ecx设置的是读取字符的个数 所以会发现书中的ecx值刚好比字符串长度大1
写好后 找到这里:
image
有个jmp指令 我们给他修改为jmp到我们补丁代码处
注意到这里属于A区 所以要xor 7 后写回去

写完后保存补丁
我用的是x32dbg : ctrl+p->修补文件->xxx.exe
然后运行即可
image
image

posted @ 2024-01-18 19:53  N0zoM1z0  阅读(16)  评论(0)    收藏  举报