そのまま Ghidra につっこむと,Wrong や FLAG は見つかるものの,全体的に結構意味不明
問題タイトルが packed なので unpack すれば OK と思いきや,下記のようなカスが出てくる.多分ちゃんと動作しなくなっている?
undefined8 main(void)
{
long in_FS_OFFSET;
undefined local_98 [136];
long local_10;
local_10 = *(long *)(in_FS_OFFSET + 0x28);
write(1,"FLAG: ",6);
read(0,local_98,0x80);
write(1,"Wrong.\\n",7);
if (local_10 != *(long *)(in_FS_OFFSET + 0x28)) {
/* WARNING: Subroutine does not return */
__stack_chk_fail();
}
return 0;
}
gdb で動的に見るしかない. FLAG: で一回止めてみると,何かを cmp している.このまま適当な文字列を入力すると 0x44eec3 に飛ばされて,”Wrong” と言われる. なので,cmp が成立しないといけない.0x31 なのでおそらく文字列ということで 48(+ 改行) 文字を入れる.