まず、ls -lでどんなファイルがあるか確認して

ソースコードを見る

hashcodeは0x21DD09EC

argv[1]は20バイトを入力しないとダメみたい

そして、check_password()関数にargv[1]を渡いて、そのポインターをchar系からint系に変換する。

その後、for文で5回繰り返しながら4バイトの整数をresに足している。

その最後の値が0x21DD09ECにならなければいけない。

 

つまり、20文字列が入力されそれをint系ポインターに変換して計算するから

int(文字) X 5 = 0x21DD09EC

 

0x21DD09ECを5で割り算すると0x06C5CEC8になるが4があまるので

最後の値には+4しなければならないので

\xc8\xce\xc5\x06*4+\xcc\xce\xc5\x06にすれば良い

flagが出力される

 

/* argv 補充 */

argv[1]に値を\xaa\xbb\xcc\xddを入力すると

argv[1][0]には\xaa

argv[1][1]には\xbb

argv[1][2]には\xcc

argv[1][3]には\xdd

これをint系で変換して出力してみると