对网络安全一直有兴趣,但技术上始终无法入门,想着寒假或许能让自己正式步入网安的学习之路,学长说教程终究次要,刷题才是根本,现给大家送上两份reverse的简单题解,本人小白水平,目前也仍处于摸索阶段,望各位大佬轻喷
1.FIRST
题目地址:http://172.22.114.206:8000/challenges#First
题目有附件,下载好后文件名为First.exe
放进PEID中检查下是否带壳,检查无壳,准备直接放入ida,开始逆向
打开32位的ida,选择默认的载入方式即可
好,正式来到程序执行界面
直接常规操作,查找字符串
发现可疑字符串,双击来到字符串所在程序地址
再次双击箭头处,出现一个程序执行流程图,不必研究,直接f5进行反汇编
大概看一下程序末尾处,有个strcmp函数,很明显,当两个字符串相同时输出congratulations,那么我们只需要知道这个字符串是什么即可
检查程序,并手写一个相仿的程序,让它对str1字符串执行相反的操作,即可得到str2
开始编写
运行一下,得到结果
这就是flag了
2.SECOND
题目地址:http://172.22.114.206:8000/challenges#Second
这道题最大的难点就是加壳…
同样下载好源文件,放入PEID查壳
可以看到是有壳的,但是upx壳是一种比较简单的壳,网上有一些工具可以直接脱壳(起初想od绕开壳的,但是技术不行,只好找工具上了)
UPXtools
喏,就长这样,把要脱壳的文件拖进去,点解压缩再点开始,就会生成一份脱壳后的文件
PEID再查一次,看是否脱壳成功
好的成功了,照例放进ida检查
也是一样的常规操作查询字符串,不出所料找到congratulations
同样的找到congratulations所在的程序部分,f5反汇编后显示伪c如下:
前面没显示全没关系,不影响读者理解程序后段的意思,大意是比较两个字符串,若完全相同则输出congratulations
因此,同样手写一个c程序跑一下就行:
运行一下,flag就有了
这两道题都不难,主要是拥有相应工具并掌握了工具的使用办法,解题就手到擒来了。