bruteforce
問題
Calculate the flag.
Note: Please don't misunderstand, DO NOT bruteforce the server.
bruteforce
メモ
解法
逆アセンブルして読むとsigsetjmpとSIGFPEとlongjmpを用いて, ゼロ除算が発生したらsigsetjmpしたところに8を返して戻るようになっている。 また,60108cにある変数は,ゼロ除算が発生した時のみ1になる。
sigsetjmpした後に呼び出される4008c0の関数は
行番号表示/非表示切替
1 for (int i = 2; i != arg1; i++) {
2 1 / (arg1 % i);
3 }
を計算しているが,これはarg1が素数の時のみ0除算が発生しない。 よって素数の時のみ0x8(%rsp)がカウントアップされ,0x8(%rsp)が10000000になった時にフラグが表示される。
"10000000th prime"を検索 → Wikipediaに "179424673 – 10000000th prime number"
ADCTF_179424673