ctf4b networks社のページからファームウェアをダウンロードしてきました。
このファイルの中からパスワードを探してください。
firmware.bin
というファイルが配布されます
配布されたfirmware.bin
で\xffELF
で検索すると0x161e2に該当するアドレスがあります
そこから下にデータを見ていくと0x1943dにff d8 ff e0 e0 00 10 4a 46 49 46
とJPEGのヘッダっぽいデータがあります
この0x161e2~0x1943d区間を取り出してGhidraに投げたところarmのアセンブリとして読むことができました
main関数を見ると0x10ea4をint32_t型の配列として解釈したデータを入力に0x53でxorをかけた値と比較しています。
なので0x10ea4からのデータに0x53でxorをかけたデータを出力すればflag
ソルバ
l = [0x30, 0x27, 0x35, 0x67, 0x31, 0x28, 0x3a, 0x63, 0x27, 0x0c, 0x37, 0x36, 0x25, 0x62, 0x30, 0x36, 0x0c, 0x35, 0x3a, 0x21, 0x3e, 0x24, 0x67, 0x21, 0x36, 0x0c, 0x32, 0x3d, 0x32, 0x62, 0x2a, 0x20, 0x3a, 0x60, 0x0c, 0x21, 0x36, 0x25, 0x60, 0x32, 0x62, 0x20, 0x0c, 0x32, 0x0c, 0x3f, 0x63, 0x27, 0x0c, 0x3c, 0x35, 0x0c, 0x66, 0x36, 0x30, 0x21, 0x36, 0x64, 0x20, 0x2e, 0x59]
flag = ''
for i in l:
flag += chr(i ^ 0x53)
print(flag)
ctf4b{i0t_dev1ce_firmw4re_ana1ysi3_rev3a1s_a_l0t_of_5ecre7s}