Rev

packed

そのまま Ghidra につっこむと,Wrong や FLAG は見つかるものの,全体的に結構意味不明

image.png

問題タイトルが 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(+ 改行) 文字を入れる.

image.png