フラグを出す実行ファイルがあるのだが、プログラム(elfファイル)作成者が出力する関数を書き忘れてしまったらしい…
reverse100
普通に実行してみた
[admin@localhost ~]$ ./rev100
cpaw{}
ghidraでデコンパイルしてみた
undefined4 main(void)
{
int in_GS_OFFSET;
undefined2 local_4b;
undefined local_49;
int local_48;
int local_44;
int local_40 [4];
undefined4 local_30;
undefined4 local_2c;
undefined4 local_28;
undefined4 local_24;
undefined4 local_20;
undefined4 local_1a;
undefined2 local_16;
int local_14;
local_14 = *(int *)(in_GS_OFFSET + 0x14);
local_1a = 0x77617063;
local_16 = 0x7b;
local_40[0] = 0x79;
local_40[1] = 0x61;
local_40[2] = 0x6b;
local_40[3] = 0x69;
local_30 = 0x6e;
local_2c = 0x69;
local_28 = 0x6b;
local_24 = 0x75;
local_20 = 0x21;
local_4b = 0xa7d;
local_49 = 0;
local_44 = 5;
printf("%s",&local_1a);
if (local_44 != 5) {
for (local_48 = 0; local_48 < 9; local_48 = local_48 + 1) {
putchar(local_40[local_48]);
}
}
printf("%s",&local_4b);
if (local_14 != *(int *)(in_GS_OFFSET + 0x14)) {
/* WARNING: Subroutine does not return */
__stack_chk_fail();
}
return 0;
}
明らかにputcharの部分が通らないので多分ココ
しかも文字は9文字なのでACSIIに変換すると
local_16 = 0x7b; // '{'
local_40[0] = 0x79; // 'y'
local_40[1] = 0x61; // 'a'
local_40[2] = 0x6b; // 'k'
local_40[3] = 0x69; // 'i'
local_30 = 0x6e; // 'n'
local_2c = 0x69; // 'i'
local_28 = 0x6b; // 'k'
local_24 = 0x75; // 'u'
local_20 = 0x21; // '!'
local_4b = 0xa7d; // この値は通常のASCII範囲を超えています。
まとめ
ghidra入れるのに時間かかりました
コメント