vim+xxd编辑十六进制的一个大坑:自动添加0x0a

问题描述

今天在做一个ctf题,它给了一个elf文件,我要做的事情是修复这个elf文件,最后执行它,这个可执行文件会计算它自身的md5作为这道题的flag。我把所有需要修复的地方都修复了,程序也能成功运行,但是flag始终就是不对

操作环境

Linux kali 5.10.0-kali7-amd64 #1 SMP Debian 5.10.28-1kali1 (2021-04-12) x86_64 GNU/Linux

vim版本信息如下

问题排查

出于困惑,我查看了网上的答案,发现他们修改的地方和我一模一样,但是他们的md5和我的不一样。更进一步的,我尝试了在windows下使用ue修改那个elf文件,得到的md5和他们是一样的

至此,可以初步得出结论:linux下使用vim+xxd修改的结果是有问题的

我分别使用wc -c指令查看了正确的和错误的elf文件的大小

发现错误的文件比正确的多一个字节,至此真相已经明了,vim+xxd编辑在xxd -r的时候会偷偷在文件末尾多加一个字节

后面通过实验验证,如果这个二进制文件的最后一个字节不是0x0a,那么在xxd -r之后,它会在文件末尾加上一个0x0a

这个大坑属事实把我给坑麻了,排查了大半天,很难想象是编辑器出了问题

解决办法

在windows下可以就用ue进行十六进制编辑

在linux下可以用ghex来进行编辑

一点感悟

在日常做ctf题的过程中,要尽可能多地去探索不同工具的作用,用法以及局限性。所幸这次是在练习中被坑了,也算是涨经验了,如果是在比赛中遇到这种问题,最后也许可以想到是编辑器的问题,但这无疑会很花时间

相关推荐
Zevalin爱灰灰3 分钟前
Linux入门第一部分(Ubuntu入门篇) 第二章 浅尝Ubuntu(二)
linux·嵌入式·1024程序员节
北京中科新远科技40 分钟前
高速接口兼容排查实战:OSFP、QSFP112与QSFP56如何逐层验证
linux·运维·网络
Ruiery1 小时前
Linux 6.6内核 CPU 深度解析(零):x86 内核引导协议 — 从 bootloader 到 main()
linux·运维·服务器
Ruiery1 小时前
Linux 6.6内核 CPU 深度解析(十六):x86 保护机制 — 从 ring 到页表的权限防线
linux·运维·服务器
qetfw1 小时前
Linux 文件清理:find、mtime 与安全传参验证
linux·shell·1024程序员节
可乐_不渴2 小时前
【Linux】 项目自动化构建工具makefile&& 版本管理Git&&第一个程序
linux·git·自动化·1024程序员节
西安同步电子2 小时前
时统卡驱动踩坑:Windows 和 Linux 下时间同步的底层差异
linux·stm32·单片机
虚无的纽扣2 小时前
【Linux】线程互斥:多线程改同一个变量,到底会出什么问题
linux·服务器·1024程序员节
qetfw3 小时前
Bash 函数与流程控制:read、if、for、case 验证
linux·前端·javascript·bash
m0_547486663 小时前
《Linux操作系统基本原理与应用》全套PPT课件2026
linux·linux系统