2015阿里&看雪移动安全挑战赛-第一题
来源:互联网 发布:软件项目经理考试 编辑:程序博客网 时间:2024/05/01 10:30
2015阿里&看雪移动安全挑战赛-第一题
题目传送门:AliCrackme
网上已经有很多writeup,我也是按照乌云上的2015移动安全挑战赛(阿里&看雪主办)全程回顾的基本思路来想的。但作为一个新手,就算照着教程来做也会踩到很多坑。所以我想把自己解题过程中遇到的一些细节问题跟大家分享一下。
文章中提到的环境配置是按照看雪论坛非虫的《Android软件安全与逆向分析》(以下简称《逆向》)配置的,这本书很棒,讲的很详细。在这里安利一波。
0x01
[…apk下载安装过程:略…]
apk安装好后,是这个样子的
输入密码错误弹出提示,并要求继续。按照《逆向》里的思路,首先我尝试了用apktool将apk反编译成smali的做法。在strings.xml文件中查看是否有可疑字符串。
结果没有发现。(ps:后来看了很多资料,觉得正确的做法应该是先将dex转jar看代码,然后根据代码来看这里面的东西。)
0x02
第二次尝试用dex2jar把classes.dex转成jar,然后用jd-gui查看。
发现两个方法:getPwdFromPic()
和getTableFromPic()
。它们是这样被调用的:
这意味着每次输入的时候,程序都会调用日志输出table(映射表)、pw(密码)和enPassword(输入)。那么我们可以在Eclipse中打开LogCat查看它的输出日志。(如何打开LogCat请自行搜索)
比如,我们输入“123”,它的输出了这些东西:
输入的 123
变成了 么广亡
,这表明程序内部的映射表将数字转换成了汉字,那么根据pw的输出 义弓么丸广之
,我们可以逆推出它的真实密码为:581026
输入 581026
,破解成功
0x03
在乌云上,关于这道题的映射表是这样说的
获得正确注册码的代码逻辑为: 1. 从logo.png这张图片的偏移89473处,读取一个映射表,768字节编码成UTF-8,即256个中文表 2. 从偏移91265处读取18个字节编码的UTF-8(即6个中文字符)为最终比较的密码。然后通过输入的字符的转换,转换规则就是ASCII字符编码,去比较是否和最终密码相等。
一开始的时候我以为需要从图片中找出密码来,觉得很头疼。后来发现代码中存在日志输出,倒是直接把答案输出了。
- 2015阿里&看雪移动安全挑战赛-第一题
- 2015阿里&看雪移动安全挑战赛-第二题
- 2015移动安全挑战赛MSC(第二届)第一题解题思路
- 2015移动安全挑战赛全程回顾 并附上解法
- 2015ali android挑战赛第一题
- 阿里移动安全 Writeup
- 阿里聚安全攻防挑战赛第三题Android PwnMe解题思路
- 2015第一季度移动安全报告
- 阿里移动安全2015年第二季度报告
- 2015阿里移动推荐算法比赛第一赛季总结
- 阿里移动安全发布《2015物联网安全年报》,威胁攻击日益凸显
- 20万大奖等你拿!阿里聚安全攻防挑战赛报名开启!
- 巴斯光年探险阿里聚安全攻防挑战赛!决战12月28日!
- 你不知道的声纹识别,尽在阿里聚安全攻防挑战赛!
- 算法开启的人工智能时代!阿里聚安全算法挑战赛公开报名!
- 2015阿里安全峰会
- 看雪安全峰会,几维安全携国内首款全平台移动代码虚拟机KiwiVM参展
- 2016看雪等安全网站android安全最新经典文章第一期总结
- 基于thinkphp的cms学生学籍管理系统
- 比较数的大小(冒泡法)
- struts2中form只提交数据不跳转引发的刷新后重复提交表单中数据的问题
- 十进制转化为十六进制
- STL学习——set/map/multiset/mulitmap篇
- 2015阿里&看雪移动安全挑战赛-第一题
- 10个随机数
- 十进制向十六进制转化
- 播放图片动画
- 解析驾考json数据,将其写入word文件中
- 比较数的大小(选择法)
- Mac OSX配置Android Studio开发软件
- 前端实践--JavaScript--函数
- 若人工智能研发是登山,我们都经历了什么