题目链接:reverse2。
下载附件后,使用 IDA 进行反编译,定位到 main 函数,如下。
main 函数中主要需要分析的地方如下。
for ( i = 0; i <= strlen(&flag); ++i ){if ( *(&flag + i) == 'i' || *(&flag + i) == 'r' )*(&flag + i) = '1';}
printf("input the flag:");__isoc99_scanf("%20s", s2);if ( !strcmp(&flag, s2) )return puts("this is the right flag!");elsereturn puts("wrong flag!");
即,程序将目标字符串中的字符 "i" 与字符 "r",转换为 "1" 后,与用户的输入进行比对,若一致,则通过。
从程序中提取到的目标字符串为:{hacking_for_fun}
。
因此,直接使用 Python 脚本转换字符,即可获得 flag。
string = "{hacking_for_fun}"string = string.replace("i", '1')
string = string.replace("r", '1')print("flag" + string)