Linux?VIM編輯二進制文件方式
Linux VIM編輯二進制文件
在vim下面編輯二進制的方式如下:
vim -b binary_file
-b 這個參數(shù)設定了 ‘binary’ 選項。
然后輸入:
:%!xxd
這個命令把文件內(nèi)容以常見的字節(jié)偏移 十六進制 ASCII碼的版面顯示
然后輸入R進入改寫模式,即可按照版面格式進行編輯。
注意:只有十六進制部分的修改才會被采用。右邊ASCII文本部分的修改無效。
編輯完成以后,輸入:
:%!xxd -r
這個命令把剛才的編輯格式轉(zhuǎn)換會原始文本格式。
再輸入:wq保存退出即可完成對二進制文件的修改。
vim編輯修改二進制文件以及對于二進制文件中幻數(shù)測試
講述我在學習反匯編時遇到的關(guān)于編輯二進制文件的問題。
編輯環(huán)境:Ubuntu + vim
我測試的文件是一個可執(zhí)行文件,也就是通過c程序編譯之后生成的,這里附上我測試的時候使用的程序代碼:
//assert.c //代碼出自《C primer plus》 #include <stdio.h> #include <assert.h> #include <math.h> int main(){ double x, y, z; puts("Enter a pair of numbers (0 0 to quit):"); while(scanf("%lf%lf", &x, &y) == 2 && (x != 0 || y != 0)){ z = x * x - y * y; assert(z >= 0); printf("answer is %f\n", sqrt(z)); puts("Next pair of numbers: "); } puts("Done"); return 0; }
使用如下命令進行編譯,這里的“-lm”是因為需要鏈接數(shù)學庫,否則會報錯undefine:
gcc assert.c -o a -lm gcc assert.c -o assert -lm
分別執(zhí)行上述兩條命令后可以產(chǎn)生a和assert兩個文件(這里為什么要生成兩個一樣的文件在后文有解釋)這里我們使用file命令查看一下文件的類型,為FLE類型:
file assert
隨后,使用vim打開assert文件,這里的-b表示打開的是二進制文件:
vim -b assert.c
在vim中開啟命令模式,通過如下命令,可以以十六進制形式顯示:
%!xxd
測試:將ELF幻數(shù)替換為MS-DOS的可執(zhí)行文件幻數(shù),即4d5a
這里我演示一下我曾經(jīng)犯過的錯誤,在修改結(jié)束后我直接wq關(guān)閉文件,這時候我使用file命令查看文件的類型,得到了如下的內(nèi)容:
也就是 assert:ASCII text,并不是我想要的MS-DOS內(nèi)容,為了測試這種編輯操作是否會對原本的文件產(chǎn)生影響,我們再使用上述方式將assert文件的前兩個字節(jié)改回到7f45,wq保存。
這時用到a文件,將a文件和改回原內(nèi)容的assert文件進行比較:
cmp a assert
使用上述命令之后可以看到兩個文件并不一樣,也就說明直接更改是不行的
這時可能意識到命令使用錯誤,經(jīng)過一番查找,在使用%!xxd命令進行更改二進制文件后,需要使用%!xxd -r命令進行還原(在vim命令模式下輸入),否則會造成錯誤:
%!xxd -r
再次使用上述更改步驟,可以得到正確的結(jié)果,可以看到assert文件被更改為MS-DOS文件:
總結(jié):上述的內(nèi)容是我個人在遇到問題時候的解決過程,供大家避雷,總結(jié)下來也就是幾條命令的事:
vim -b xxx(文件名) %!xxd %!xxd -r
這里附加幾個幻數(shù),供大家測試:
complied Java class: cafe babe MS-DOS executable: 4d5a
JPEG: 這里面需要改固定的幾個位置,第1,2字節(jié)改為ffd8,7,8,9,10字節(jié)改為4a,46,49,46,其他字節(jié)不需要修改,任何都可以。
最后
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
PHP程序員玩轉(zhuǎn)Linux系列 使用supervisor實現(xiàn)守護進程
這篇文章主要為大家詳細介紹了PHP程序員玩轉(zhuǎn)Linux系列文章,使用supervisor實現(xiàn)守護進程,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-04-04Ubuntu 18.04上安裝 phpMyAdmin的詳細教程
這篇文章主要介紹了Ubuntu 18.04上安裝 phpMyAdmin的詳細教程,本文通過圖文并茂的形式給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-12-12iis、apache與nginx禁止目錄執(zhí)行asp、php腳本的實現(xiàn)方法
為了網(wǎng)站安全,很多圖片上傳目錄等不需要執(zhí)行腳本的目錄我們可以通過下面的方法禁止執(zhí)行腳本。2011-11-11