工具:
DIE:下载:https://download.csdn.net/download/m0_73981089/89334360
IDA:下载:https://hex-rays.com/ida-free/
新手小白勇闯逆向区!!!
[reverse]easyre
首先查壳,用DIE看程序信息,看到无壳且是64位的程序,用其相应的IDA打开
用IDAx64打开,查看源码,点开主函数(main)
发现界面是直接由flag字眼,直接点开
便得到flag
[reverse]reverse1
拿到文件,先查壳,用DIE根据下图,可以判断该程序无壳,且程序也是64位
将其用IDA64位打开进行反汇编
看主函数(main)这里是main 0,打开便看到汇编码显眼的flag字眼
还看到这个{}非常像flag
但是不是
回滚到看到显眼flag字眼:
我是小白😳,看的有点困难😅,直接再此界面看伪代码(按F5键)
有点编程小基础应该能猜到红色框是输出printf(print),黄色框框应该是输入scanf
而Str1是我们所需要输入的内容,点开Str2,发现是 {hello_world}字符串
再分析上端代码
大概意思是:
用for循环来遍历Str2这个字符串,如果超过Str2长度则跳出循环,如果再Str2能找到ASCII码为"111",则把其替换为ASCII码为"48"的字符
如果不记得ASCII码可以选中ASCII码键盘按"R"键,会显示ASCII对应的字符,如图
那这样就大概知道了,只需要把Str2" {hello_world}"的o替换为数字0,则是本题的flag
提交成功啦!!!
[reverse]reverse2
刚开始我将文件用010 editor打开,发现了一串很像flag的字符串
输进去,我以为我以为意外解,哇趣,不对,骗人!
仔细想想,这是一道逆向题,不用任何相关文件就能解出flag概率还是很小的 😳
回归正题:
老规矩,先查壳,用DIE工具,没有壳,程序为64位
还是用IDAx64位打开,进行反汇编
还是先查看主函数的汇编代码,大致看了一下,也看到flag的字眼
(看不懂汇编代码的可以跟我操作哦)所以我们先查看伪码(按F5),慢慢分析
s2是我们需要输入的但是flag我们不知道,点击flag进行查看:
看来flag是**{hacking_for_fun}**,等等先别急,我们代码还没有分析呢
输入输出由一些些C语言基础或者C++基础应该是可以看懂的,这里就不过多解释啦
直接看条件
大概意思是:
如果pid不为空,则会执行waitpid这个函数(此不是我们需要重点抓住的),看后边,如果pid为空则for循环遍历flag这个字符串,如果flag上的字符加上从0到其长度的等于ASCII码为105或者114,则改为ASCII码为49
(是不是上一题很像啊,嘻嘻~)
如果不知道ASCII码是不是可以选其ASCII码然后按(R)键
更加一目了然啦!!!
所以最终的flag是将原本的flag"{hacking_for_fun}"所含有"i" 和 "r"字符替换为数字"1",这样就可以拿到本题的flag啦!!!