文件补丁(一)-入门篇

时间:2024-05-20 08:21:41

环境:win10
工具:vs2017、PE Tool、Ollydbg、UltralEdit
参考:加密与解密(第四版)

1.概述

文件补丁是修改文件本身的某个数据,达到一劳永逸的效果,与·内存补丁不同的是:内存补丁是在程序运行时对其数据修改,可以理解为动态,而文件补丁是静态。
文件补丁是直接修改可执行文件的二进制数据,文件补丁实施起来很简单。
如果数据是加密的,你就要对其算法进行研究,这时候内存补丁是很好的选择。

2.测试

使用VS2017新建一个Windows桌面应用程序
文件补丁(一)-入门篇
这里只是简单弹出一个提示框,现在我们要通过打文件补丁的方式改变提示框的内容。用Debug编译程序,现在请遗忘这个程序的源代码。

用PE tool打开程序
镜像基址和偏移地址:
文件补丁(一)-入门篇
节区信息:
文件补丁(一)-入门篇
现在用Ollydbg加载程序:
文件补丁(一)-入门篇
我们可以看到程序的入口虚拟地址为12 9138E,根据PE Tool的提供的数据:入口虚拟地址 = 镜像基址+入口点=4 1138E。与Ollydbg加载的地址不一样,这时候就要计算差值:12 9138E-4 1138E=E8 0000,这个差值很重要,如果加载地址与PE tool一样就会很省事。
我们知道这个程序会弹出一个提示框,我们用ollydbg对MessageBoxA和MessageBoxW下断点,这里为什么要对两个API下断点呢?因为弹出对话框有两个版本:ASNI和UNICODE版本,
下完断点按F9我们来到断点处。
![在这里插入图片描述](https://img-blog.****img.cn/20190315012227752.PNG文件补丁(一)-入门篇
我们可以看到是用的UNICODE版本,所以我们打补丁的时候也要用UNICODE编码。我们记录下提示框数据的地址:129 7B38 = 你好,129 7B30=提示。
现在就是繁琐的计算过程了。
前面我们计算的差值为E8 0000,“你好”原本应加载的虚拟地址为:129 7B38 - E8 0000 = 417B38。那么虚拟偏移为417B38 - 400000 = 17B38,现在看节区信息,17B38属于.rdata区段。然后再计算文件偏移地址:.rdata的文件偏移起始地址为5C00,5C00+(17B38-17000)=6738.
用UltralEdit打开程序,跳转到6738
![在这里插入图片描述](https://img-blog.****img.cn/20190315013850378.PNG文件补丁(一)-入门篇
现在基本就大功告成了。现在我们要把“你好”改成“错误”。怎么改呢?在网上搜UNICODE转中文,我这里随便改一下。
文件补丁(一)-入门篇
码砖不易。。。。。。。。.。。。。。。。。。。。。。。。。