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

注意查看eax: 0x4010F5
往下走是这个:

注意这里数组取的ebx: 0x401007
继续走:

这里注意有条 mov ebx eax : 0x4010F5
这个函数ret后进入最后一个:

这里的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

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

对应

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

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

这里学习到了用 rep movsb 修改 他那个ecx设置的是读取字符的个数 所以会发现书中的ecx值刚好比字符串长度大1
写好后 找到这里:

有个jmp指令 我们给他修改为jmp到我们补丁代码处
注意到这里属于A区 所以要xor 7 后写回去
写完后保存补丁
我用的是x32dbg : ctrl+p->修补文件->xxx.exe
然后运行即可



 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号