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

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

2020-7-20 19:25
10372

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.总结

点点滴滴,循序渐进。


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

最后于 2020-7-20 19:34 被mb_gujpacap编辑 ,原因:
上传的附件:
收藏
免费 2
支持
分享
最新回复 (6)
雪    币: 428
活跃值: (39)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
很详细,感谢分享
2020-7-20 20:16
0
雪    币: 21449
活跃值: (62288)
能力值: (RANK:125 )
在线值:
发帖
回帖
粉丝
3
感谢分享,移到Android版块了
2020-7-21 09:33
0
雪    币: 19878
活跃值: (4912)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
感谢分享,学习了
2020-7-21 21:13
0
雪    币: 4
活跃值: (230)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
怀疑是反调试相关函数,尝试不让这个函数执行,找到改指令对应的内存指令数据   是在这个地址上 982560c8  修改为nop指令么? 
2020-7-22 10:58
0
雪    币: 1636
活跃值: (653)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
最懒人great 怀疑是反调试相关函数,尝试不让这个函数执行,找到改指令对应的内存指令数据 是在这个地址上 982560c8 修改为nop指令么?
这个不是nop,arm 的用r0赋值r0做无效操作
2020-10-18 16:11
0
雪    币: 400
活跃值: (720)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Da_
7

你好,我这边用ida debug有如下的配置选项,application ,input file directory等,如果不填会报红色的错误。请问这里应该怎么填写,谢谢!

2022-1-13 16:24
0
游客
登录 | 注册 方可回帖
返回
//