提示:这篇文章里涉及到:idapython,gdb,idapython中文手册.pdf百度云链接
攻防世界no-strings-attached_逆向之旅007
前言
本题的摘要:
文件是linux下的elf文件,但是运行报错。有两个解题思路,第一种是用gdb在linux虚拟机下动态调试,第二种是使用ida静态分析,然后构建脚本计算出flag。
今天距离写上一篇博客有13天了,终于可以做逆向题并写博客了,前面一段时间在应对恶意代码考试及编译和反编译的考试。当然了,还有元旦假期的快乐开黑生活。
一、攻防世界no-strings-attached
在这里给出题目链接:https://adworld.xctf.org.cn/task/answer?type=reverse&number=4&grade=0&id=5080&page=1
二、writeup
1.用exeinfo看一下
可得到信息:elf文件,32位,使用gcc 4.6.3编译
2.在linux下运行
发现程序会输出两句话,然后报错。
3.分析
对于此题,我选择使用第二种思路,即使用ida静态分析,然后写脚本计算flag。对于另一种思路:使用gdb调试,我后面会写一篇使用gdb解其他题目的博客。
这个题还是一如既往的比较好找到main函数。
F5反编译
通过分析,可以确定flag是在authenicate()中,着重分析该函数:
分析过程见图中的注释,可以知道flag是在s2中存着。加下来对decrypt函数进行分析。
该函数所描述的步骤即为计算flag的方法,接下来编写脚本来计算flag。
首先使用idapytohn获得参数s,dword_8048A90的值,这两个参数的类型为wchar_t数组,wchar_t:
wchar_t是C/C++的字符数据类型,是一种扩展的字符存储方式。 在Windows下,wchar_t占2个字节(byte);
在Linux下,wchar_t占4个字节。
wchar_t类型主要用在国际化程序的实现中,但它不等同于Unicode编码。Unicode编码的字符一般以wchar_t类型存储。
这个程序是linux下的,所以wchar_t是dd类型(double word )占4字节。接下来使用idapython将s和dword_8048A90提取出来:
(注意!!! 我用的是idapro7.5,使用其他版本的ida,脚本会不一样的,如何编写idapython脚本呢,我这有idapython中文手册.pdf :
百度云链接:链接:https://pan.baidu.com/s/1B0qNeQSQHeWPaUZqJfYMFQ
提取码:0dkl