本次遇到一个项目,因为是逆向 不能拿到项目的源码,需要改的也是很简单的判断语句,但是也把我这个菜逼弄懵逼了。还好有个如师长的逆向大佬指导,我才去了解这个Patch的功能。接下来我以一个小案例来实现。
小案例需求
加我们有这样一个判断
int i = 4;
if(i == 3){
// 做一些事情
}
我们想要把 ==
号换为 >=
号。当然如果你有源码的话改起来很方便,但是可惜我们没有源码。我写了一个实例deb 进行这样的操作。
//上面的省略
CMP x1 #4; // 比较
B.NQ Local_1658 //不相等的话跳到对应地址块 不反回
那么我们会要做的就是讲B.NQ
改为B.CC
让他做大于等于操作,接下来我们介绍如何进行修改。
- . 第一步:
我们需要了解Patch是如何进行使用的。Edit —> Patch program 如下所示
- . 我看看他们都有什么
- change byte … 就是直接修改二进制数值
- change word.. 就是直接改地址
- Assemble 没用过: 欢迎补充
- Apply patches to input file: 使我们patch 成功并修改后要写回原文件中此处是我的dylib
- 如何进行改数值呢?好 我们现在开始
点击你定位的程序位置,如图 此处是我修改后的内容。 点击这段地址后可以点击Edit —> Patch program –> Change byte 进行更改当前的内容 如图:
可以看到我画框的8位数就是我们需要修改的 汇编指令。更改为你想要操作的指令的16进制数值 即可。
当你修改成功后,就可以按之前介绍的内容进行写入文件中。 后面会讲到如何进行重新打包。
Debian 进行重新打包
Debian Linux系统解压和重新打包.deb文件方法,iplaypy.com在网络上搜索问题的答案,找到了类似这样解释:
mkdir -p extract/DEBIAN
dpkg-deb -x package.deb extract/
dpkg-deb -e package.deb extract/DEBIAN [...do something, e.g. edit the control file...]
mkdir build
dpkg-deb -b extract/ build/
以上这五打命令的解释如下:
第一条命令创建了一个名为“extract”文件夹和一个名为“DEBIAN”的子文件夹;
第二条命令会从你的.deb包提取一些文件到“extract”文件夹;
第三条命令会解压.deb包的内容到“DEBIAN”子文件夹,在那里你就可以修改/补丁你想要的文件;
第四条命令建立一个名为“build”的文件夹;
而第五条命令会将修改后的文件重新构建到一个新的.deb包中,并在 “build” 文件夹中生成。
在你执行第三条命令后,可以通过你的默认文件管理器,用一个图形化的文本编辑器可视化地修改文件。