攻防世界RE1 writeup

解题过程

将题目给出的exe文件拖入ida中,查看main函数。

main函数

分析函数的逻辑,发现用户需要输出一个字符串,存储到变量v9中。如果v9的值与v5的值相等则会打印unk_413e90中的值,否则打印aFlag_0的值。

查看两个输出的值:

可以看到如果输入正确的话会打印flag get,这说明flag存储在v5中。

查看v5的值,发现没有值:

v5

仔细查看main函数发现第10行有一个存储操作,将一个变量的值存储到了v5中。v5的值是在main函数执行过程中才被传入的,因此之前找不到值就可以理解了。

查找xmmword变量中存储的值:

可以将变量的值转为ascii码,同时发现qword变量也可以转为ascii。

字符串值逆序即为flag:

DUTCTF{We1c0met0DUTCTF}

简单解法

因为大概知道flag是以字符串形式存储在某个变量中的,不是程序运行过程中生成的,因此可以直接用Linux或Mac下的strings命令直接求得所有字符串并查找ctf、flag等关键词。

总结

这是一道简单的逆向题,直接用strings时没啥可说的。用ida时只要知道题目中涉及到的存储函数,这个题目很好解决。当然了,除了前面说的方法,用ollydbg也可以解这道题。

有一个需要注意的点是,用ida解题时,最后给出的flag值是逆序的,这是受到了存储方式的影响。具体可以了解下大端存储和小端存储的区别。

原文地址:https://www.cnblogs.com/kevinbruce656/p/11993709.html