欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

(APP测试三板斧)第三板: Frida+IDA手工逆向证书密码

程序员文章站 2022-03-03 22:03:07
一、优缺点优点:适用大部分情况,尤其是一键自动提取证书和密码,傻瓜化操作缺点:一键自动提取证书和密码还好,但不是万能的,手工逆向证书密码技术难度较大,需要有代码功底,并且如果有加壳加固等操作更加麻烦。二、步骤1.一键自动提取证书和密码因为 APP 在向服务端发请求时, APP 肯定会操作证书,所以如果能找到 APP 操作证书的代码地方, Hook 这部分代码,对参数做些输出打印,证书和证书密码就都有了。大部分情况下,都是Hook java.security.KeyStore...

 一、优点

优点:

适用大部分情况,尤其是一键自动提取证书和密码,傻瓜化操作。

缺点:

一键自动提取证书和密码还好,但不是万能的,手工逆向证书密码技术难度较大,需要有代码功底,并且如果有加壳加固等操作更加麻烦。

二、步骤

1.一键自动提取证书和密码

因为 APP 在向服务端发请求时, APP 肯定会操作证书,所以如果能找到 APP 操作证书的代码地方, Hook 这部分代码,对参数做些输出打印,证书和证书密码就都有了。

大部分情况下,都是Hook java.security.KeyStore 这个类的 load 方法,load 方法的形参就是我们需要的证书和密码。

抠出的证书和密码,配置进 fiddler 或 burpsuite里面,就可以抓到双向认证的包。

PS: 还要注意证书的格式,抠出的证书可能是 jks 或 bks 格式的,fiddler 可能需要 p12 格式的, 所以要找工具先转换一下格式。

python3 cert_pwd.py

(APP测试三板斧)第三板: Frida+IDA手工逆向证书密码

需要python脚本辅助下,把上面的证书16进制先转换为jks格式

python3 cert2file.py
import  sys
f = open('keystore.jks', 'wb')
f.write(bytes.fromhex("xxx"))

再讲jks证书转为p12证书,p12证书再转换为crt证书

keytool -importkeystore -srckeystore keystore.jks -destkeystore keystore.p12 -srcstoretype jks -deststoretype pkcs12
openssl pkcs12 -in keystore.p12 -nokeys -clcerts -out keystore.crt

(APP测试三板斧)第三板: Frida+IDA手工逆向证书密码

2.手工分析证书密码

使用GDA打开apk,搜索证书关键字.p12

这个就是加载证书的代码,第二个参数就是密码,所以往上跟踪v1

v4_1.load(v0_1, v1.toCharArray());

发现值是通过a函数来的,跟踪进入a函数

String v1 = SoulNetworkSDK.Auto_getValue().a(SoulNetworkSDK.Auto_getValue().Auto_getValue());

(APP测试三板斧)第三板: Frida+IDA手工逆向证书密码

继续跟踪进入null_getStorePassword

(APP测试三板斧)第三板: Frida+IDA手工逆向证书密码

发现最终密码是从native层获取的

(APP测试三板斧)第三板: Frida+IDA手工逆向证书密码

我们来看下初始化加载的是哪个so文件

(APP测试三板斧)第三板: Frida+IDA手工逆向证书密码

发现是soul-netsdk,解压soul.apk,使用IDA打开soul-netsdk

搜索加载的关键字,最终发现证书密码(搜索到结果后,使用F5伪编译代码)

(APP测试三板斧)第三板: Frida+IDA手工逆向证书密码

3.踩过的坑

1.这个博客贴的js代码java_security_KeyStore__load函数结尾少了个圆括号,所以语法错误

https://api-caller.com/2019/03/30/frida-note/#soul

2.python调用Frida的函数

如果device = frida.get_usb_device()不行,试试device = frida.get_remote_device()

 

 

本文地址:https://blog.csdn.net/ggzhifeng/article/details/107606890