CTF--信息技术对抗赛ISCC之安卓逆向分析
来源:互联网 发布:淘宝下单微信全额返现 编辑:程序博客网 时间:2024/05/02 00:33
0x01 题目介绍
本题目是一道信息安全大赛上的安卓逆向题目,主要考察选手,逆向分析能力,
反汇编能力,安卓程序结构分析能力,以及常见的安全加密编码算法得能力。题
目下载 http://download.csdn.net/detail/bjtbjt/9846682可能部分步骤过于啰嗦,大
佬略过。方便入门者学习。这个题目拿到手是个安卓apk程序。下载下来,我们先
不着急进行分析。先对其程序apk安装测试一下,看看有什么功能和提示,或者了
解一下要求我们做什么。在这里呢, 不建议大家直接在自己的安卓手机上安装,
最好使用模拟器。我这里呢,使用的是模拟器。模拟器地址网上也很多,我自己
安装的是蓝叠模拟器
http://www.bluestacks.cn/
安装很简单,就是下一步。如果出现这个说明安装成功了。
然后把我们的程序添加到这个模拟器,本地安装APK点击选择,安装好即可。
我们测试一下题目,随便输入1234,发现验证失败。那么此题目输入正确答案
密码串。
0x02 解题要点
到了这里,可以请出我们的安卓逆向神器,当然也有其它类似反编译器。
apktool,jd等之类的工具。JEB我这里是jeb 2.2.7破解版。载入我们的apk程
序进行分析。
通过关键按钮菜单,我们进行手动分析。和反编译部分函数和模块。由于刚才的
安卓程序有个按钮和编辑框。因此必须找到这个关键点位置。如下:onClick事件
就是负责处理验证密码过程。
前面绿色的数字ID就是按钮编辑框的标识,主要观察这个验证过程。对于用户的输入
这个程序先进行了。
此处把用户输入进行了字符串转化,然后去除空格。进行了encode函数编码。到底这是
个什么算法,还得跟踪Digest这个类对象的定义。先别着急分析编码函数,我们继续看
下面的代码关键点有个checkFlag函数进行了正确与否的验证,因为后面的输出判断刚好
有失败和成功之分。
这个函数呢,有声明,但是没有具体定义实体。为什么呢,因为这个是个内部JNI函数。
科普一下 Java Native Interface (JNI)标准是java平台的一部分,它允许Java代码和其他
语言写的代码进行交互。JNI 是本地编程接口,它使得在 Java 虚拟机 (VM) 内部运行的
Java 代码能够与用其它编程语言(如 C、C++ 和汇编语言)编写的应用程序和库进行交互
操作。
http://www.cnblogs.com/hoys/archive/2010/10/28/1863612.html
http://www.2cto.com/kf/201308/232666.html
到这里基本上就算是验证结束。那么我们看到了其中经历两个验证函数。一个是encode,
一个是checkFlag函数。只要分析清楚这两个函数,那么我们就直接可以进行反推,逆向
分析算法获取结果。
先来看看第一个函数encode
看编码和基本操作,好像是个base64,这个为了高校简单起见,我们可以直接验证这段java代码类。
自己编辑测试个字符串即可。
找个bas64算法验证一下。
验证成功。
下面我们关注第二个函数算法
既然是个内部函数,那么我们看看它在哪,其实我们可以从内部导出这个库文件,存储为*.so
然后单独ida分析这个iscc.so库。
关键函数checkFlag定位
关键静态密文字符串
分析算法
这里面将用户输入的字符串重新复制了一份,然后操作
先将用户输入的字符串按照长度分割成两半
把前一半字符串中的字符按照从左到右的顺序取出来
ASCII码减去 5 , 然后与后半个字符串与之对应的位置进行交换。
最后是比较加密结果是否等于我们静态存储的密文。
=0HWYl1SE5UQWFfN?I+PEo.UcshU
完全一致返回真,否则返回假。
基于此算法,我们就可以手动编写逆向算法了。
'''@author: 5t4rk'''def decrypt(cipher_string): try: plain = list(cipher_string) plain.reverse() print ''.join(plain) for i in range(0, (len(plain) / 2)): plain[i] = chr(ord(plain[i]) + 5) return''.join(i for i in plain) except Exception , e: print e passif __name__ == '__main__': print decrypt("=0HWYl1SE5UQWFfN?I+PEo.UcshU").decode("base64") passoutput:UhscU.oEP+I?NfFWQU5ES1lYWH0=flag{ISCCJAVANDKYXX}
0x03 学习总结
本次题目难度不是很大,主要是注意两个算法的分析。
一个base64一个逆向置换编码
必须找到关键checkFlag函数。
参考点:
http://www.2cto.com/kf/201308/232666.html
http://blog.csdn.net/lovoo/article/details/51429303
http://www.cnblogs.com/hoys/archive/2010/10/28/1863612.html
http://blog.csdn.net/jiangwei0910410003/article/details/49336613/
- CTF--信息技术对抗赛ISCC之安卓逆向分析
- 安卓逆向之华山杯ctf第一题:错错错
- CTF安卓逆向练习第一弹
- CTF安卓逆向练习第二弹
- CTF安卓逆向练习第三弹
- CTF安卓逆向练习第四弹
- CTF安卓逆向练习第五弹
- [原创]安卓逆向之2016年华山杯CTF安卓writeUp
- CTF dotNet逆向分析
- 安卓逆向之华山杯ctf第二题:寻找密码
- 安卓逆向之华山杯ctf第四题:神奇的zip
- 合天网安实验室CTF练习赛之逆向题
- ISCC 2016 逆向部分 writeup
- 安卓逆向:一款抢红包APP的逆向分析
- 逆向BSides SF CTF之flagstore.apk
- Android安卓破解之逆向分析SO常用的IDA分析技巧
- Android安卓破解之逆向分析SO常用的IDA分析技巧
- 2016 ISCC CTF 比赛 BASE 心灵鸡汤
- Mysql 隔离级别和锁(一)
- LinkedHashMap及其源码分析
- Spring Data操作Redis时,发现key值出现 \xac\xed\x00\x05t\x00\tb
- Linux上不了网
- 观察者模式
- CTF--信息技术对抗赛ISCC之安卓逆向分析
- Android 自定义的Dialog,点击确定按钮,让其根据条件判断消失与否
- Android 7.0调用相机方法
- 链表学习(5)
- Matisse——Android 图片/视频选择器
- POJ 2186 Popular Cows 强连通分量(Kosaraju)
- 程序猿学习第三天,框架和表单
- Android 拖拽ViewDragHelper解析 自定义ViewGroup神器
- Gym