0%

XCTF逆向进阶区Writeup合集

继续做XCTF的逆向题。

Mysterious

题目似乎没有什么提示,运行后要输入密码,但是没什么反应,用DIE看一下,32位的PE文件,没有加壳。

因为感觉分值给得比较低,所以先看看有没有相关字符串,没有搜到。

又回到程序,突然试了一下’password’结果退出了,应该,可能,是突破点,吧?

全局搜了一下password,没有东西。

还是老老实实分析反汇编代码吧。

退出是因为密码长度大于了6位,重点应该就是从if判断语句开始的了。

我一下还真的想不起xyz前面一个字母是什么了,w,试了一下{wxyz,无事发生。

而且疑惑Buff3r_0v3rf|0w是不是提示。

仔细看了一下源码,atoi()_itoa()是一对功能相反的函数,atoi()将字符串转换为数字,_itoa()将数字转换成字符串。这也蛮符合题目描述的逆向思维的密码的。

结果一下转不过弯,非和ascii码杠上了。来具体看一下函数作用。就只把数字转换,所以123真的就是123了。

定了8点之前做出来,结果8点过一分才明白,气死了。

主要是还纠结v11,v13,v14是不是输入的字符串里面的东西,但是也没看到相关代码,这是故意迷惑的吗?

Reversing-x64Elf-100

这道题不是很难,但是太久没编程我差点嗝屁了。

重点就是关注高亮部分的操作,把它还原就行。

但是这里需要注意的是,这是一个二维数组,3行7列,(&v3)和两组方括号,还是比较好看的。

只需要字符串转二维数组就行,但是python的数组初始化真的好麻烦啊,为什么不能像C一样方便,而且电脑没装NumPy,感觉对python里面的一些数据结构的创建不太熟练,虽然其他语言也不一定熟练。

这里还有一点就是i++和++i,虽然很久不用C了,但是还是记得的,所以解出来的字符串首字母是缺失的,但是我猜到了,就懒得看其他获得首字母的方法惹。

IgniteMe

有了Maze的教训之后,我都会先查一查不认识的单词,Ignite是点燃的意思,运行了一下,oh,又是老土的输入flag。

IDA F5反编译,找到Congratulations附近的函数,应该就是关键需要逆向的函数了。

Shuffle1

提示是“找到字符串在随机化之前”,用DIE查看一下文件,发现是ELF32位的文件。用IDA打开,F5反编译,把数字转成char就是flag。

Guess-the-Number

发现是个jar包,之前没有逆向过jar包,搜了一下,发现直接用jar命令解压jar包。

1
jar -xvf filename.jar

直接解压出配置文件和guess.class,guess.class就是关键了。

看main函数就可以知道,其实flag就是两个字符串异或。这里可以把文件改一改再运行,不过我找了一个在线运行java的网站跑的,非常方便。

EasyRE

32位的pe文件,运行之后现实”input”,输入不对直接退出。IDA看一下感觉还比较复杂。