解题要点
【题目来源】BUUCTF
【解题思路】
-检查壳和多少位程序
-扔进IDA进行代码分析
-找到flag在变量里
-根据程序改改flag即可
【难点】
-IDA的使用,寻找变量
-C语言函数的掌握熟悉程度
步骤一:查壳查位,扔进IDA分析
先使用查壳工具检测出是64位程序
二话不说扔进IDA分析,按F12后能显示出检测到的字符串列表,ctrl+F搜索出flag所在的位置
步骤二:伪代码分析
双击点进去后,找到对应字符串,发现两个调用的函数,好像都是同一个函数(点进去都是一样的)
点进去后仔细观察就能发现,这两个东西有点像flag{}
输入进去后闪退,也不知道对不对
那就按F5,生成伪代码,进行手动分析吧
研究了一下发现伪代码不是浪得虚名,简直是乱来的
连标准函数的名字也能是有误差的
代码分析也不太难
就是把str2这个变量的其中一个或几个的ascii码是111改为48,那查一下对应的字符就是把o改成了0
然后下面的strncmp函数是有点难理解,特别是多了个!号
先看strncmp函数,作用是比较两个字符串,如果相等就返回0,不相等就返回正数或负数
那如果相等就不触发if,所以要加个!
然后逻辑变成了相等则触发if
看了看下面那函数好像只是打印这段话出来,没啥意义
毕竟填flag在网站上
所以寻找怎么触发if就可以了
步骤三:寻找对应ascii码的字符
根据上面的理解,只需要str1和str2是一样的就可以触发if
之前的反汇编窗口已经看到了str2变量字符是{hello_world}
根据算法改一下那就是{hell0_w0rld},把o改为0就可以了
填了flag,搞掂