VI笔记 - 使用vi加xxd完成对二进制文件的内容修改
背景编译生成a.out的代码修改的a.out目的反汇编获取修改点使用xxd转十六进制显示定位到修改点并且进行修改使用xxd还原二进制并保存执行结果背景
在一些破解二进制应用的场景中,需要修改二进制执行的机器码,那么就需要搜索并且修改二进制应用的十六进制数据
编译生成a.out的代码
#include <stdio.h>int run() {printf("call run\n");return 1;}int main(void) {if(run()==1) {return 1;}printf("hello\n");return 0;}
修改的a.out
目的
我们做个实验,就是通过修改二进制a.out让程序逻辑跳过run验证,完成打印hello;
反汇编获取修改点
vi a.out
使用xxd转十六进制显示
:%!xxd
该指令在vi执行完后就会将当前的二进制文件全部以16进制的形式进行呈现,如下图:
定位到修改点并且进行修改
将e8 cc ff ff ff
修改为b8 00 00 00 00
修改后:
使用xxd还原二进制并保存
:%!xxd -r:w
执行结果
如果觉得《vi笔记 - 使用vi加xxd完成对二进制文件的内容修改》对你有帮助,请点赞、收藏,并留下你的观点哦!