修補執行檔
緣起,錯誤模型和勝利條件
某次我得修補執行檔跳過錯誤,這篇記錄當時的技巧和指令。測試平台是Raspberry Pi 3B。錯誤的程式如下圖,記憶體指標指向0,然候對這個指標存取,程式就死掉了。勝利條件是,程式正常跑完即可
修補的指令1
- 把執行檔轉成文字檔再反轉,而且還能執行。假如做得到,那就能對文字檔動手。時間有點久,指令都忘光了!chatgpt竟然直接給答案,而且精準無比!
- In Linux, how to use od to dump binary file into HEX
- od -An -t x1 -v a.out
- -A n,不要印address
- -t x1,格式用hex,每次1byte
- -v,一堆0也不要跳過
- What if I want to everything in single line
- od -An -t x1 -v a.out | tr -d '\n'
- How to convert continuous space in text file into single one
- od -An -t x1 -v a.out | tr -d '\n' | tr -s ' ' > a.txt
- How to reverse the hexdump output to binary
- xxd -r -p a.txt > q.out
- 至此準備工作完成,接下來對文字檔動手吧
修補的指令2
使用objdump -d進行反組譯,下面的指令會跳入func,讓他不要跳進去就好
留言