继续做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看一下感觉还比较复杂。