VI笔记 - 使用vi加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