Slimu 发表于 2024-1-11 12:10

字节系app通用抓包方案

本帖最后由 Slimu 于 2024-1-11 12:12 编辑

# 字节系app通用抓包脚本
> 已测试某音(28.4.0), 某茄小说(6.0.5.32)

## 原理
获取`SSL_CTX_set_custom_verify`的参数3(回调函数)
``` cpp
void SSL_CTX_set_custom_verify(SSL_CTX *ctx, int mode, enum ssl_verify_result_t (*callback)(SSL *ssl, uint8_t *out_alert)) {
    ctx->verify_mode = mode;
    ctx->custom_verify_callback = callback;
}
```



让回调函数的返回值保持为0, 即ssl_verify_ok即可

``` cpp
enum ssl_verify_result_t BORINGSSL_ENUM_INT {
    ssl_verify_ok,
    ssl_verify_invalid,
    ssl_verify_retry,
};
```

## 代码编写
首先获取一下`SSL_CTX_set_custom_verify`

``` JavaScript
function main() {
    Java.perform(function () {
      let SSL_CTX_set_custom_verify = Module.getExportByName('libsscronet.so', 'SSL_CTX_set_custom_verify');
    }
}
setImmediate(main);
```

spwan模式启动下应用`frida -U -f com.ss.xxx.xxx.aweme -l byteDance.js`

注入后提示报错: **Error: unable to find module 'libsscronet.so'**

很明显, 问题的原因在于注入的时机过早, so还没有加载进来, 解决办法有2个:
1. `setTimeout(main, 3000);`延时执行函数
2. hook系统函数, 监听so加载

``` JavaScript
function onLoad(name, callback) {
    //void* android_dlopen_ext(const char* filename, int flag, const android_dlextinfo* extinfo);//原型
    const android_dlopen_ext = Module.findExportByName(null, "android_dlopen_ext");
    if (android_dlopen_ext != null) {
      Interceptor.attach(android_dlopen_ext, {
            onEnter: function (args) {
                if (args.readCString().indexOf(name) !== -1) {
                  this.hook = true;
                }
            },
            onLeave: function (retval) {
                if (this.hook) {
                  callback();
                }
            }
      });
    }
}

onLoad(soName, () => {
    let SSL_CTX_set_custom_verify = Module.getExportByName('libsscronet.so', 'SSL_CTX_set_custom_verify');
    if (SSL_CTX_set_custom_verify != null) {
      Interceptor.attach(SSL_CTX_set_custom_verify, {
            onEnter: function (args) {
                Interceptor.attach(args, {
                  onLeave: function (retval) {
                        if (retval > 0x0) retval.replace(0x0);
                  }
                });
            }
      });
    }
});
```

当监听到so被加载时进行hook操作, hook到`SSL_CTX_set_custom_verify`后, 获取参数3并hook它, 让此函数执行完成后的返回值保持为0即可

## 效果图




> 完整代码已经上传至(https://github.com/LanBaiCode/FridaScripts)

iamafailor 发表于 2024-1-11 14:29

反手一个star

带头大哥Even 发表于 2024-5-5 14:42

闷骚小贱男 发表于 2024-5-4 17:34
什么内容呢。

起点读书app 里面很多,兑换起点币 游戏频道里面,很多 H5游戏,大部分是不用登录,直接鉴权访问的, 这类H5可以改物品、开VIP功能吗?

yyzzy 发表于 2024-1-11 12:41

怎么用啊?

闷骚小贱男 发表于 2024-5-5 16:11

带头大哥Even 发表于 2024-5-5 14:42
起点读书app 里面很多,兑换起点币 游戏频道里面,很多 H5游戏,大部分是不用登录,直接鉴权访问的, 这 ...

也分游戏吧,大部分带服务器的都不能改。本地小游戏应该是可以的(例如支付宝小游戏)
据我所知,里面正好有首富这款游戏。。不能改

fc1314 发表于 2024-1-11 12:29

这是什么工具的怎么用的大佬讲解一下

782335921 发表于 2024-1-11 12:50

插眼zsbd

Dragoun 发表于 2024-1-11 12:51

插眼,大佬666

sunzhw 发表于 2024-1-11 13:10

收藏学习,感谢分享

gracenshan 发表于 2024-1-11 13:47

这个也行啊,厉害

枕下的悲情 发表于 2024-1-11 14:13

收藏学习,感谢分享

javascript2014 发表于 2024-1-11 14:53

chayan,学习
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 字节系app通用抓包方案