首页
社区
课程
招聘
[原创]2015移动安全挑战赛-第2题破解思路
2015-1-26 19:12 4675

[原创]2015移动安全挑战赛-第2题破解思路

2015-1-26 19:12
4675
首先反编译dex文件,dex2jar、JD-GUI都能正常。定位关键代码

逻辑很清晰,public native boolean securityCheck(String paramString); 返回true即可。剩下的工作就是逆向so

打开IDA,反编译so,F5查看c代码

逻辑是输入和off_5A66E28C处的字符串一致即可。先看一眼静态数据:
.data:5A66E28C off_5A66E28C    DCD aWojiushidaan       ; DATA XREF: Java_com_yaotong_crackme_MainActivity_securityCheck+FCr
.data:5A66E28C                                         ; .text:off_5A669308o
.data:5A66E28C ; .data         ends                    ; "wojiushidaan"
难道是“wojiushidaan”,尝试一下果然不对。这块区域在动态执行过程中改变了。

准备IDA调试so,查看动态内存。结果发现IDA无法调试,应该反调了。
尝试静态干看,发现乱七八糟的代码太多,不想在第二题上浪费太多时间,所以采用查看动态内存的思路。
我的做法是通过010Editor 修改so文件,修改其代码,利用__android_log_print将其打印出来,这样是比较快的。

主要修改如下部分的代码
.text:0000129C                 BLX     R3              ; GetStringUTFChars
.text:000012A0                 LDR     R1, =(off_628C - 0x5FBC)
.text:000012A4                 LDR     R2, [R1,R7] ; off_628C
.text:000012A8
.text:000012A8 loc_12A8                                ; CODE XREF: Java_com_yaotong_crackme_MainActivity_securityCheck+120 j
.text:000012A8                 LDRB    R3, [R2]
.text:000012AC                 LDRB    R1, [R0]
.text:000012B0                 CMP     R3, R1
.text:000012B4                 BNE     loc_12D0
.text:000012B8                 ADD     R2, R2, #1
.text:000012BC                 ADD     R0, R0, #1

在000012A4处,需要对比的密文存储于R2,所以思路是修改000012A8处的指令为:
.text:000012A8                 MOV     R0, #4
.text:000012AC                 MOV     R1, R2
.text:000012B0                 BL      __android_log_print

打开010Editor,修改如下。其中BL的指令需要重新计算一些偏移。


最终获取log如下:

答案就是:aiyou,bucuoo

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

上传的附件:
收藏
点赞0
打赏
分享
最新回复 (1)
雪    币: 15
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
帝高阳 2015-7-29 15:31
2
0
我用的IDA6.6没有F5  只有F4
游客
登录 | 注册 方可回帖
返回