合天网安实验室CTF练习赛之逆向题
2016-06-23 10:32
288 查看
最近搞逆向,就做做CTF题吧
挑战地址:http://www.hetianlab.com/CTFrace.html
对linux的逆向还没深入学习,所以re300暂时空着
2017.11.07:竟然还想起有这个事情没完成....,那就现在完成re300吧:合天网安实验室CTF练习赛之RE300
安装看看吧,
输入密码,随便输入,点击Enter没任何反应,应该是输入正确后才会有提示flag什么的
![](http://img.blog.csdn.net/20160622232125351?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
那我们反编译看看
![](http://img.blog.csdn.net/20160622232413633?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
反编译就看到明文比较了
![](http://img.blog.csdn.net/20160622232545462?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
输入后直接出flag了
![](http://img.blog.csdn.net/20160622233158130?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
查壳没有加壳
![](http://img.blog.csdn.net/20160622233709248?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
那我们下一个退出断点,其实下一个strcmp断点更快
![](http://img.blog.csdn.net/20160622234927926?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
从反汇编跟随就可以找到用户领空的退出代码,ctrl+a分析一下,发现有个跳转跳过来,直接跟过去,
![](http://img.blog.csdn.net/20160622234941812?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
下个断点,跟进去
![](http://img.blog.csdn.net/20160622235044439?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
一直f8,都可以看到真的password了
![](http://img.blog.csdn.net/20160622235110611?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
测试一下,确实是
![](http://img.blog.csdn.net/20160622235205081?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
当然借助一下ida,就更加容易看到了
![](http://img.blog.csdn.net/20160623004056087?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
看看过了level1后又会怎样
![](http://img.blog.csdn.net/20160623004153694?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
发现这个应该是反调试的
![](http://img.blog.csdn.net/20160623092926721?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
下面从某处复制的
新增的AddVectoredExceptionHandler 这个API将一个指向函数的指针作为参数,把这个函数的地址添加到已注册的异常处理程序链表中。
那么这里的int3异常会交给异常处理程序链表中第一个处理函数处理,假如调试器处理这个异常,我们就到不了那里了,所以od的设置一定要忽略所以异常,让程序或系统自己处理
具体是在哪设置的呢,其实这里不用知道也可以,知道就更好了,如下图,可以直接去到40157f,删除一下分析就可以看到代码了
![](http://img.blog.csdn.net/20160623094025156?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
不知道这个怎么办呢,我们可以用退出函数断点啊,也可以根据堆栈的反汇编跟随到达password2的代码
![](http://img.blog.csdn.net/20160623094547211?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
那么401547的代码肯定是关键了,f7跟进,我们可以看到作者设定的常量了
![](http://img.blog.csdn.net/20160623094639306?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
那么接下来做了什么呢,首先判断是否到达字符串的结尾,这里作者设定的是二进制的02为结尾
![](http://img.blog.csdn.net/20160623094900231?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
那么具体的算法下面已注射的比较清楚了
![](http://img.blog.csdn.net/20160623094828262?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
当然也可以借助ida,不过通过汇编看学得更多哦
![](http://img.blog.csdn.net/20160623095305669?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
弄懂这个简单的算法后,我们可以把je改为jmp
![](http://img.blog.csdn.net/20160623095028480?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
直接在cmp处下断点,不断f9,记下al中的每个字母,password2就出来了
![](http://img.blog.csdn.net/20160623095114203?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
成功
![](http://img.blog.csdn.net/20160623095226877?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
当然也可以写个脚本
![](http://img.blog.csdn.net/20160623095327832?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
最终flag: r0b0RUlez!_w3lld0ne
挑战地址:http://www.hetianlab.com/CTFrace.html
对linux的逆向还没深入学习,所以re300暂时空着
2017.11.07:竟然还想起有这个事情没完成....,那就现在完成re300吧:合天网安实验室CTF练习赛之RE300
逆向100
先把后缀改为.apk吧安装看看吧,
输入密码,随便输入,点击Enter没任何反应,应该是输入正确后才会有提示flag什么的
那我们反编译看看
反编译就看到明文比较了
输入后直接出flag了
逆向200
打开看看,应该是先输入第一个password,正确了才让你输入第二个password,第一个错误了就直接退出了查壳没有加壳
那我们下一个退出断点,其实下一个strcmp断点更快
从反汇编跟随就可以找到用户领空的退出代码,ctrl+a分析一下,发现有个跳转跳过来,直接跟过去,
下个断点,跟进去
一直f8,都可以看到真的password了
测试一下,确实是
当然借助一下ida,就更加容易看到了
看看过了level1后又会怎样
发现这个应该是反调试的
下面从某处复制的
新增的AddVectoredExceptionHandler 这个API将一个指向函数的指针作为参数,把这个函数的地址添加到已注册的异常处理程序链表中。
那么这里的int3异常会交给异常处理程序链表中第一个处理函数处理,假如调试器处理这个异常,我们就到不了那里了,所以od的设置一定要忽略所以异常,让程序或系统自己处理
具体是在哪设置的呢,其实这里不用知道也可以,知道就更好了,如下图,可以直接去到40157f,删除一下分析就可以看到代码了
不知道这个怎么办呢,我们可以用退出函数断点啊,也可以根据堆栈的反汇编跟随到达password2的代码
那么401547的代码肯定是关键了,f7跟进,我们可以看到作者设定的常量了
那么接下来做了什么呢,首先判断是否到达字符串的结尾,这里作者设定的是二进制的02为结尾
那么具体的算法下面已注射的比较清楚了
当然也可以借助ida,不过通过汇编看学得更多哦
弄懂这个简单的算法后,我们可以把je改为jmp
直接在cmp处下断点,不断f9,记下al中的每个字母,password2就出来了
成功
当然也可以写个脚本
最终flag: r0b0RUlez!_w3lld0ne
相关文章推荐
- 状态选择器
- Ubuntu下Eclipse无法添加Tomcat7解决方法
- iOS 程序间跳转传参(支付和地图)
- lucene学习六:lucene全文检索与数据库查询的比较
- [leetcode] Nim Gam
- Bootstrap中文本框的宽度变窄并且加入一副验证码图片的实现方法
- Android中通过反射获取资源Id(特别用在自己定义一个工具将其打成.jar包时,特别注意资源的获取)
- jenkins相关命令
- java并发的处理方式
- 重温指针数组和数组指针
- js 弹出子页面与关闭子页面刷新父页面的问题
- android之TabWidget选项卡
- ARM Linux 3.x的设备树(Device Tree)
- json简介
- Caffe代码导读(0):路线图
- 二叉树遍历,先序序列+中序序列=后序序列,Poj(2255)
- beta 阶段的 postmortem 报告
- 使用Android studio Gradle 实现友盟多渠道打包
- Install _ zimg - A lightweight and high performance image storage and processing system.
- cordova local notification sound not working in ios and andorid