纯黑盒(不脱壳)app测试

纯黑盒(不脱壳)app测试

之前做一个项目,需要分析出协议是否可以被攻击者模拟利用,app使用了加固,协议进行了加密,在完全黑盒的情况下进行测试。

一般情况下我们分析协议,直接反编译apk,找请求发包代码,一层层往上找,或者利用url关键字搜索,很容易发现参数处理的代码,还原逻辑,比较简单的甚至可以直接复制代码就能模拟协议了。
但是在黑盒的情况下,想拿到代码不太现实。收费版加固的强度还是足够的,脱壳需要的精力太大,不脱壳又看不到实现代码,无法还原逻辑。所以这里就讲一下纯黑盒下的协议分析。

这里涉及的技术其实就是动态分析技术,不是动态调试哦,一般的壳都会带反调试功能的。
动态分析工具在不侵入应用代码的情况下,获取应用执行的函数和调用顺序。通过筛选函数信息,完成对应用实现逻辑的大体还原。

Traceview+Xposed

traceview是ddms里的一个功能,android studio也集成了(AS里的Record有时会报失败的错误)。

结束时得到一个.trace文件,里面记录了大量的函数调用,这时候需要你的一点经验了,筛选过滤出目标函数,通过该函数的调用上下文来梳理逻辑。
项目里的应用会根据订单信息产生一个二维码,尝试搜索“QR”:
a-w600
运气不错,存在调用createQRImage函数,该函数会由字符串参数指定生成二维码。利用Xposed hook得到一个加密的字符串,猜测是订单信息加密之后得到的。
这里说一下,hook方法和工具很多,用frida简单快速,不过对于加固应用,具有反调试,不能直接hook(直接hook是frida的进程ptrace到目标进程,会被kill),frida提供-f选项来让frida产生一个目标进程(这里对某叠词加固的双进程保护有效)。

想办法得到加密相关信息,一般写加密会用到的两个包,javax.crypto.~和(com.android.)org.bouncycastle那个包,那么搜索相关关键字就行。

b-w600
c-w600

实际中需要观察涉及到的函数名,有些是自写函数,会直接返回明文、IV、密钥等信息,这些函数hook起来很方便,也不用筛选log,因为自写函数基本都是在业务中的调用。

从客户那里了解到,请求的包体加密前还要做一下签名,一般做参数签名用到的md5、sha1、sha256这些,也很好hook:
d-w600

ok,拿到对协议参数做处理的函数后,就需要hook来验证,xposed写hook没什么特别的操作(找一个支持加固应用的demo就行,也就是支持multidex)。

e-w600

f-w300

一般知道加密函数、加密模式、密钥、IV后就能模拟应用发包请求了,大部分的应用协议加密类就一个,密钥什么的也都通用,甚至有些本地文件加密也和协议用的是同一个加密类。

这里推荐一篇博客,介绍了我用到的工具,也让我知道了还有下面要讲的自动化的工具。

Inspeckage

下载地址

安装之后,选择要分析的应用,点击“Launch APP”即可:

g-w400

本地转发8008端口,就可以打开提供的web视图:

加密类记录:
h-w600

哈希类记录:
i-w600

自动化的动态分析工具还是很方便的,由于它记录的函数是库中的函数,如果应用中涉及的加密自写了函数,就需要手动hook了,所以两种方法结合着用吧。
这里遇到的问题是端口老是掉,需要重新开启端口。。。