缘由
在2016年6月的时候,我写下RE100和RE200的wp,当时刚接触逆向,硬刚,刚出了这两题,re300的linux没接触过,一开始并看不出什么,当时说暂时空着,现在要培训别人,要搞掂题目,所以重新看了下,达到有始有终。
开始吧
die看一下,elf文件,ida打开并注释,关键在check函数(当然,注释过了)
1 | int __cdecl main(int argc, char **argv) |
之后进入check,里面首先是一个switch,可以看到第一个字符我们必须为i
1 | case 0: |
而LABEL_19是递归调用
1 | LABEL_19: |
那我们就可以写代码了
1 | dic = {"3":"n", "9":"r", "4":"d", "1":"e", "0":"i", "5":"a", "6":"g", "7":"s"} |
运行结果:
1 | isengard |
那我们运行下程序即可
1 | root@giantbranch:~# ./rev300 isengard |