首页
论坛
课程
招聘
[原创]Android逆向之CrackMe01.apk破除反调试及取得明文密码
2020-7-20 19:25 4053

[原创]Android逆向之CrackMe01.apk破除反调试及取得明文密码

2020-7-20 19:25
4053

1.目的

记Android逆向学习之路。

2.对象

CrackMe01.apk(见附件)(无壳,存在反调试和密码验证逻辑)

3.步骤

3.1 概述

分析apk java层代码-->安装apk并开启IDA监听端口-->IDA以Debug模式动态调试apk-->破除反调试-->取得明文密码

3.2 环境搭建

工欲善其事,必先利其器
工具:Windows10;IDA7.0(Window);ajdx-gui;DDMS(adt-bundle-windows-x86_64_20140101里面tools中的monitor.bat,先打开);ARM架构模拟器(这里是armeabi-v7a,SDK里面的相关组件可以创建模拟器)

3.3 分析apk java层代码

把apk拖进ajdx-gui中
图片描述
图片描述
可得知密码验证在so层

3.4 安装apk并开启IDA监听端口

使用adb install 电脑apk路径 安装CrackMe01.apk,界面如下:
图片描述
开启IDA监听端口(要事先把IDA-dbgsrv目录下的android-server置到模拟器中,这里是/data/local/tmp下,修改名称为as并赋给可执行权限),用./as开启端口监听,默认端口是23946,app崩溃
图片描述
猜测可能存在端口检测,更改端口为31928,命令:./as -p31928
成功过app调试端口检测,接着进行端口转发
图片描述

3.5 IDA以Debug模式动态调试apk

先打开DDMS,用于模拟器进程监听。
打开app主界面,使用adb shell dumpsys activity top命令获取当前界面信息
图片描述
使用adb shell am start -D -n com.yaotong.crackme/.MainActivity命令以Debug模式启动app指定界面
图片描述
然后打开IDA Debugger附加CrackMe01.apk app进程
图片描述
图片描述
图片描述
勾选Debug选项(加载so要挂起载入)
图片描述
图片描述
IDA Debug模式动态调试配置完成。

 

为什么不用直接动态调试?经发现,该apk运行时会自己附加一个子进程,IDA中直接动态调试会显示两个Pid的该进程(可以进入/proc/进程id/status进行信息查看,子进程的TracePid就是父进程的Pid),由于一个进程只能被附加一次
,因此不能再对子进程进行附加,对父进程调试也发生了错误,而Debug模式动态调试则没有问题。

3.6 破除反调试

F9然后执行jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=端口号,端口号是DDMS对应进程的端口,且执行后图标变成绿色。
加载libwolf.so进来(进程现在挂起状态),找到这个so的导出函数(Debugger-Module list)
图片描述
在jni_onload函数下断点,然后F9
图片描述
程序断在这里
经测试函数在下图中的函数执行后会使调试中断
图片描述
怀疑是反调试相关函数,尝试不让这个函数执行,找到改指令对应的内存指令数据
并修改为(00)(据说是注释)
图片描述
变为
图片描述
图片描述
应用之,反调试成功破除。

3.7 取得明文密码

从导出函数列表中可以看到许多加解密相关,猜测是把密文解密成明文然后与输入作比较,直接在Decrypt函数中的CMP(compare)指令下断点。
按F9让相关so加载进来,之后回到apk随便输入然后点按钮验证以触发解密函数。
按F9程序在指定地方断下,密码明文很可能在某一个寄存器中,找到R7寄存器(指向堆)jump过去查看存放内容
图片描述
红圈存放的hello5.1应该就是密码
图片描述
果然

4.总结

点点滴滴,循序渐进。


[培训]12月3日2020京麒网络安全大会《物联网安全攻防实战》训练营,正在火热报名中!地点:北京 · 新云南皇冠假日酒店

最后于 2020-7-20 19:34 被mb_gujpacap编辑 ,原因:
上传的附件:
收藏
点赞0
打赏
分享
最新回复 (5)
雪    币: 428
活跃值: 活跃值 (33)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
上帝不凡 活跃值 2020-7-20 20:16
2
0
很详细,感谢分享
雪    币: 2318
活跃值: 活跃值 (7544)
能力值: (RANK:65 )
在线值:
发帖
回帖
粉丝
Editor 活跃值 2020-7-21 09:33
3
0
感谢分享,移到Android版块了
雪    币: 5832
活跃值: 活跃值 (3271)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
浅笑不语 活跃值 2020-7-21 21:13
4
0
感谢分享,学习了
雪    币: 4
活跃值: 活跃值 (189)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
最懒人great 活跃值 2020-7-22 10:58
5
0
怀疑是反调试相关函数,尝试不让这个函数执行,找到改指令对应的内存指令数据   是在这个地址上 982560c8  修改为nop指令么? 
雪    币: 1364
活跃值: 活跃值 (382)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
琅環玉碎 活跃值 2020-10-18 16:11
6
0
最懒人great 怀疑是反调试相关函数,尝试不让这个函数执行,找到改指令对应的内存指令数据 是在这个地址上 982560c8 修改为nop指令么?
这个不是nop,arm 的用r0赋值r0做无效操作
游客
登录 | 注册 方可回帖
返回