V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
zer0fire
V2EX  ›  程序员

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

  •  
  •   zer0fire · 2021-06-16 08:07:29 +08:00 · 1974 次点击
    这是一个创建于 1291 天前的主题,其中的信息可能已经有所发展或是发生改变。

    尝试解析 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-06-16 08:52:58 +08:00 via iPhone
    *oul 没有必要反编译看那么多,hook KeyStore.load 简单些
    MaxLi77
        2
    MaxLi77  
       2021-06-16 09:26:36 +08:00
    hook 不上主要有两个原因,1. 注入时机不对,脚本要在 app 启动前注入 2. 所在方法的 classloader 不对
    不过这个问题最好的解决方案还是按楼上说的,hook KeyStore.load
    zer0fire
        3
    zer0fire  
    OP
       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
        4
    zer0fire  
    OP
       2021-06-16 23:09:57 +08:00
    后面尝试使用这个 https://gist.github.com/ceres-c/cb3b69e53713d5ad9cf6aac9b8e895d2 也失败, 获取不到
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1632 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 16:47 · PVG 00:47 · LAX 08:47 · JFK 11:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.