从今天开始做逆向的题目,每一题都会写心得,作为积累
1、Hello,RE!
这一题入门题,应该不会很难。把1.exe拖到PEID和ExeinfoPe里也是发现没有壳的,于是就直接放到IDA里看看,直接F5,上图

然后看到那堆数字就直接转成字符,用“R”键,结果如下

然后再看下面的代码,while语句里两个条件,第一个是判断有没有读完,第二个就是字符串比较。从内存的本质和strcmp的性质来看,应该是比较v4第一个字符的地址开始和v5第一个字符开始的每一个字符。这里注意上面的注释,在内存中,v5应该是在栈顶的,v6、v7……依次往下存储,而v5代表的第一个字符应该是f,也就是说我们依次往后比较的字符应该是每个字符串倒过来的。
所以最后的答案应该是
flag{Welcome_To_RE_World!}
2、ReadAsm2
3、Py交易
先下载文件,发现后缀名为pyc,没见过,第一次碰到这样的题,不会做。
于是上网查,看大牛的解释.py与.pyc文件区别
然后明白,原来pyc与elf是差不多的,都是中间文件,经过汇编的源代码。
那么思路也就显然了,先反汇编出源代码,然后再看。
于是去找python反汇编的方式,发现有在线的工具,但是貌似没发现有可以下载的工具?
具体网址为https://tool.lu
然后就可以得到这样一段代码

然后下一步就是阅读程序了,大致意思就是判断你输入的flag经过一系列操作后是不是和他给你的正确结果一样。那么也就是说把correct反推就能得到flag。具体的脚本如下
import base64
correct = 'XlNkVmtUI1MgXWBZXCFeKY+AaXNt'
correct = base64.b64decode(correct)
#print(type(correct))
s = ''
for i in range(len(correct)):
x = correct[i]
x = x - 16
x = x ^ 32
s = s + chr(x)
print(s)
然后我因为不知道base64解码后的返回指类型,刚开始在循环中写的是x = ord(correct[i]),然后给我报错了,就输出了一下解码后的数据类型,发现是bytes,知道应该是数值,本来以为返回的是字符串的。这是一个小插曲吧。
运行一下就出现flag了,这题还是比较简答的,就是会有新知识。
nctf{d3c0mpil1n9_PyC}
4、WxyVM