当前位置: 移动技术网 > IT编程>开发语言>Java > (APP测试三板斧)第三板: Frida+IDA手工逆向证书密码

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

2020年07月29日  | 移动技术网IT编程  | 我要评论

 一、优点

优点:

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

缺点:

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

二、步骤

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

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

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

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

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

python3 cert_pwd.py

需要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

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());

继续跟踪进入null_getStorePassword

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

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

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

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

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网