合天网安实验室CTF练习赛之逆向题

最近搞逆向,就做做CTF题吧

 

挑战地址:http://www.hetianlab.com/CTFrace.html

对linux的逆向还没深入学习,所以re300暂时空着

2017.11.07:竟然还想起有这个事情没完成....,那就现在完成re300吧:合天网安实验室CTF练习赛之RE300

逆向100

先把后缀改为.apk吧

 

安装看看吧,

输入密码,随便输入,点击Enter没任何反应,应该是输入正确后才会有提示flag什么的

 

合天网安实验室CTF练习赛之逆向题_第1张图片

 

那我们反编译看看

合天网安实验室CTF练习赛之逆向题_第2张图片

 

反编译就看到明文比较了

合天网安实验室CTF练习赛之逆向题_第3张图片

 

输入后直接出flag了

合天网安实验室CTF练习赛之逆向题_第4张图片

 

 

逆向200

 

打开看看,应该是先输入第一个password,正确了才让你输入第二个password,第一个错误了就直接退出了

查壳没有加壳

合天网安实验室CTF练习赛之逆向题_第5张图片

那我们下一个退出断点,其实下一个strcmp断点更快

合天网安实验室CTF练习赛之逆向题_第6张图片

从反汇编跟随就可以找到用户领空的退出代码,ctrl+a分析一下,发现有个跳转跳过来,直接跟过去,

合天网安实验室CTF练习赛之逆向题_第7张图片

下个断点,跟进去

合天网安实验室CTF练习赛之逆向题_第8张图片

一直f8,都可以看到真的password了

合天网安实验室CTF练习赛之逆向题_第9张图片

测试一下,确实是

合天网安实验室CTF练习赛之逆向题_第10张图片

 

当然借助一下ida,就更加容易看到了

 

合天网安实验室CTF练习赛之逆向题_第11张图片

 

看看过了level1后又会怎样

 

合天网安实验室CTF练习赛之逆向题_第12张图片

 

发现这个应该是反调试的

合天网安实验室CTF练习赛之逆向题_第13张图片

 

下面从某处复制的

新增的AddVectoredExceptionHandler 这个API将一个指向函数的指针作为参数,把这个函数的地址添加到已注册的异常处理程序链表中。

那么这里的int3异常会交给异常处理程序链表中第一个处理函数处理,假如调试器处理这个异常,我们就到不了那里了,所以od的设置一定要忽略所以异常,让程序或系统自己处理

 

具体是在哪设置的呢,其实这里不用知道也可以,知道就更好了,如下图,可以直接去到40157f,删除一下分析就可以看到代码了

 

合天网安实验室CTF练习赛之逆向题_第14张图片

 

不知道这个怎么办呢,我们可以用退出函数断点啊,也可以根据堆栈的反汇编跟随到达password2的代码

 

合天网安实验室CTF练习赛之逆向题_第15张图片

 

那么401547的代码肯定是关键了,f7跟进,我们可以看到作者设定的常量了

 

合天网安实验室CTF练习赛之逆向题_第16张图片

 

那么接下来做了什么呢,首先判断是否到达字符串的结尾,这里作者设定的是二进制的02为结尾

 

合天网安实验室CTF练习赛之逆向题_第17张图片

 

那么具体的算法下面已注射的比较清楚了

 

合天网安实验室CTF练习赛之逆向题_第18张图片

 

当然也可以借助ida,不过通过汇编看学得更多哦

 

合天网安实验室CTF练习赛之逆向题_第19张图片

 

弄懂这个简单的算法后,我们可以把je改为jmp

 

合天网安实验室CTF练习赛之逆向题_第20张图片

 

直接在cmp处下断点,不断f9,记下al中的每个字母,password2就出来了

 

合天网安实验室CTF练习赛之逆向题_第21张图片

 

成功

 

合天网安实验室CTF练习赛之逆向题_第22张图片

 

当然也可以写个脚本

 

合天网安实验室CTF练习赛之逆向题_第23张图片

 

最终flag: r0b0RUlez!_w3lld0ne

 

 

 

你可能感兴趣的:(信息安全,合天网安实验室,CTF,Android安全与编程,逆向工程)