zer0fire
V2EX  ›  程序员

求大佬指点解析 ssl 双向校验

By zer0fire at 2021 年 6 月 16 日 · 2967 次点击

尝试解析 ssl 双向校验, 抓 soul 的包, 使用 frida 来 hook 获取密码 hook 目标

package cn.soulapp.android.net;

public class o extends SSLSocketFactory {
	...

    public o(android.content.Context r7, java.lang.String r8) {
    		...
            java.lang.String r8 = cn.soulapp.android.soulpower.SoulPowerful.l(r8)
            char[] r4 = r8.toCharArray()     // Catch:{ Exception -> 0x0049, all -> 0x004d }
             java.security.KeyStore r3 = java.security.KeyStore.getInstance(r3)     // Catch:{ Exception -> 0x00e9 }

            r3.load(r7, r4)     // Catch:{ Exception -> 0x0049, all -> 0x004d }
        L_0x0049:
            r7.close()     // Catch:{ Exception -> 0x0055 }
            goto L_0x0055
        	...
    }

}

编写 js 脚本如下:

console.log("Script loaded successfully ");
Java.perform(function x() {
    console.log("Inside java perform function");
    //定位类
    var my_class = Java.use("cn.soulapp.android.net.o");
    // var my_class = Java.use("cn.soulapp.android.soulpower.SoulPowerful");
    console.log("Java.Use.Successfully!");//定位类成功!
    //在这里更改类的方法的实现( implementation )
    my_class.$init.overload("android.content.Context", "java.lang.String").implementation = function (args, args2) {
        console.log("debug");
        console.log("args1", args)
        console.log("args2", args2)
        // 打印替换前的参数
        console.log("Ok");
        // var aa = Java.use("cn.soulapp.android.soulpower.SoulPowerful.l()");
        // console.log(aa.p().a(aa.p().a()))
        return this.$init(args, args2);
    }
});

目前卡在方法没有被调用上,console.log("debug")没有执行

所用测试 apk 下载地址: https://share.weiyun.com/jltxrcPz

4 条回复  •  2021-06-16 23:09:57 +08:00
0o0O0o0O0o
   1
0o0O0o0O0o  
   2021 年 6 月 16 日 via iPhone
*oul 没有必要反编译看那么多,hook KeyStore.load 简单些
MaxLi77
   2
MaxLi77  
   2021 年 6 月 16 日
hook 不上主要有两个原因,1. 注入时机不对,脚本要在 app 启动前注入 2. 所在方法的 classloader 不对
不过这个问题最好的解决方案还是按楼上说的,hook KeyStore.load
zer0fire
   3
zer0fire  
OP
   2021 年 6 月 16 日
@0o0O0o0O0o 已做修改, 但是依旧注入时机不对
修改如下:

```
console.log("Script loaded successfully ");
Java.perform(function x() {
console.log("Inside java perform function");
//定位类
var my_class = Java.use("java.security.KeyStore");
console.log("Java.Use.Successfully!");//定位类成功!
//在这里更改类的方法的实现( implementation )
my_class.load.overload("java.io.InputStream", "[C").implementation = function (args1, args2) {
console.log("args1", args1)
console.log("args2", args2)
}
});
```
zer0fire
   4
zer0fire  
OP
   2021 年 6 月 16 日
后面尝试使用这个 https://gist.github.com/ceres-c/cb3b69e53713d5ad9cf6aac9b8e895d2 也失败, 获取不到
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
© 2026 V2EX · 25ms · 3.9.8.5