Avatar
$ # Hello, World するプログラムがある。 $ ./helloWorld Hello, World! $ # これの World を ***** でマスクする。 $ mask-macho-cstring --with-asterisks "World" ./helloWorld $ # するとバイナリが次のように書き換えられる。書き換え範囲は __cstring セクションに閉じているのでプログラムが壊れることはない。 $ diff -u <(xxd ./helloWorld) <(xxd ./helloWorld.mod) --- /dev/fd/11 2025-04-24 18:11:06 +++ /dev/fd/12 2025-04-24 18:11:06 @@ -1013,8 +1013,8 @@ 00003f40: 1002 40f9 0002 1fd6 1000 00b0 100a 40f9 ..@...........@. 00003f50: 0002 1fd6 1000 00b0 100e 40f9 0002 1fd6 ..........@..... 00003f60: 1000 00b0 1012 40f9 0002 1fd6 1000 00b0 ......@......... -00003f70: 101a 40f9 0002 1fd6 4865 6c6c 6f2c 2057 ..@.....Hello, W -00003f80: 6f72 6c64 2100 0a00 2000 0000 3cfe ffff orld!... ...<... +00003f70: 101a 40f9 0002 1fd6 4865 6c6c 6f2c 202a ..@.....Hello, * +00003f80: 2a2a 2a2a 2100 0a00 2000 0000 3cfe ffff ****!... ...<... 00003f90: 0000 0000 0300 0000 0100 0000 1c00 0000 ................ 00003fa0: 0100 0000 2000 0000 0000 0000 2000 0000 .... ....... ... 00003fb0: 0200 0000 0000 0004 c83d 0000 4400 0000 .........=..D... $ # バイナリを改ざんしたのでコード署名を更新する。 $ codesign -f -s - ./testdata/helloWorld.mod ./testdata/helloWorld.mod: replacing existing signature $ # World がマスクされた! $ ./testdata/helloWorld.mod Hello, *****!