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

2021-06-16 08:07:29 +08:00
 zer0fire

尝试解析 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

1758 次点击
所在节点    程序员
4 条回复
0o0O0o0O0o
2021-06-16 08:52:58 +08:00
*oul 没有必要反编译看那么多,hook KeyStore.load 简单些
MaxLi77
2021-06-16 09:26:36 +08:00
hook 不上主要有两个原因,1. 注入时机不对,脚本要在 app 启动前注入 2. 所在方法的 classloader 不对
不过这个问题最好的解决方案还是按楼上说的,hook KeyStore.load
zer0fire
2021-06-16 22:52:00 +08:00
@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
2021-06-16 23:09:57 +08:00
后面尝试使用这个 https://gist.github.com/ceres-c/cb3b69e53713d5ad9cf6aac9b8e895d2 也失败, 获取不到

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/783629

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX