(还没下DIE就没检查有没有壳,直接拖到IDA里打开了)
按shift+f12查看字符串,果然看到"flag"字样
双击,定位地址。
继续双击定位地址。
出现流程图。(其实我事后可以直接分析这个流程图了,因为这个流程图也不复杂,就是两个if)
按F5查看伪C代码。分析:
猜测sub_140011D1应该是printf(),那么sub_14001128F应该是scanf()。返回流程图可以看到str2是{hello_world}:
或者任意双击一个”str2“可以找到,str2的结果。
分析if判断条件,!()为1输出right,那么()应为0,()为0的条件:
strncmp(str1,str2,v3)是把str1与str2两字符串的前v3位数做一个比较,若str1=str2,返回0;大于返回正数,小于返回负数
查看上面的if:
这个for循环是将ASCII值做了处理。在IDA中,选中数字按"R"键可以将数字转换为字符。
得到flag{hell0_w0rld}
总结:
本题考查了IDA的基本操作:①查看字符串;②按F5将编码转换成伪C代码;③IDA中按住"R"键将ASCII码转为字符。
以及分析流程图。
参考资料: