2017/03/09(Thu)バイナリーファイル内の特定アドレス範囲にパッチする方法

2017/03/09 1:58 Software::Windows
Windows上のとあるバイナリーファイルに対し、「特定アドレス範囲の値がなんであろうと、0x00に置き換える」という処理がしたくなった。
ddを使うとワンラインでできそうだったので試してみる。

解答

Windowsだとddがないので、ここらあたりから拝借。
バッチファイルとして保存して、複数ファイルをD&Dで処理。
@echo off
cd /d %~dp0
for %%f in (%*) do (
  dd.exe if=/dev/zero of=%%f bs=1 count=100 seek=200
)
pause
これで、ofに指定されたファイルの200バイト目(0xC8)~100バイト分を0x00で埋めることが出来る。
bs(blocksize)を1バイトにして、countの繰り返し数をバイト数しつつ、seekで位置をずらすのがミソ。

埋める値が0x00でなければ、ファイルをinputにしてもよい。入力側のoffsetをずらすには、skip=で指定する。
このときconv=notruncも指定しないとifのファイルサイズにofが引きずられるので注意。

*nix系のddでも勿論できるはず。

参考文献

How to use dd as a hex editor - rationallyPARANOID.com