逆向工程核心原理之内嵌补丁

本文介绍了一种程序解密方法及内嵌补丁技术的应用。通过与特定数值进行异或操作完成代码解密,并详细说明了如何通过修改跳转指令实现补丁代码的嵌入,确保程序完整性和功能扩展。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.1       源程序分析

第一次解密4010F5,与0x44异或

解密401007,与0x7异或,一直到0x401086

第二次解密4010F5,与0x11异或。

将4010F5处的内容累加得到校验和,与0x31EB8DB0作比较,来判断代码/数据是否被改动过。

下图是我们将要修改的字符串。分别位于0x40110A和0x401123

        解密代码。

1.2       内嵌补丁

思路:解密结束后会跳到OEP,把JMP OEP改成JMP 补丁代码,补丁代码执行完成后再JMP OEP。

补丁代码有3种设置方法:

设置到文件的空白区域

扩展最后节区后设置

添加新节区后设置。

打补丁过程:

.text节区起始偏移是0x400,大小是0x280,从0x680-0x800都是NULL,这个文件偏移所对应RVA是0x1000+(0x680-0x400)+ImageBase=0x401280,在0x401280处填充补丁代码。

补丁代码填充结束后,需要修改之前跳转到OEP的代码修改成跳转到401280。

修改0x401083处的内容,内容为“E9 96 01”,这一部分到0x401086就结束了。文件偏移是0x401083-0x401000+0x400=0x483

        0x483处的内容是未解密的,和0x7异或之后得到jmp40121e。

        现在需要将JMP 40121e改成JMP 401280,“E9 F8 01”,需要将“E9 F8 01”与0x7异或后再写入0x483-0x486。

 

打了补丁之后的程序:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值