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