吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 6393|回复: 81
收起左侧

[Android 原创] 字节系app通用抓包方案

    [复制链接]
Slimu 发表于 2024-1-11 12:10
本帖最后由 Slimu 于 2024-1-11 12:12 编辑

字节系app通用抓包脚本

已测试某音(28.4.0), 某茄小说(6.0.5.32)

原理

获取SSL_CTX_set_custom_verify的参数3(回调函数)

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;
}

17049426510968.jpg

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

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

代码编写

首先获取一下SSL_CTX_set_custom_verify

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加载
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[0].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[2], {
                    onLeave: function (retval) {
                        if (retval > 0x0) retval.replace(0x0);
                    }
                });
            }
        });
    }
});

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

效果图

17049453058755.jpg
17049455165907.jpg

完整代码已经上传至github

免费评分

参与人数 27威望 +1 吾爱币 +48 热心值 +22 收起 理由
Vae666 + 1 我很赞同!
Aec + 1 我很赞同!
junjia215 + 1 + 1 谢谢@Thanks!
1113519447 + 1 + 1 谢谢@Thanks!
Activityc + 1 + 1 谢谢@Thanks!
qwe123aa + 1 + 1 热心回复!
chenwen6 + 1 + 1 谢谢@Thanks!
h080294 + 1 + 1 热心回复!
kobelltw + 1 我很赞同!
tyezhong + 1 用心讨论,共获提升!
Soft98 + 2 + 1 用心讨论,共获提升!
zgrm1000 + 1 + 1 谢谢@Thanks!
正己 + 1 + 20 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
guoruihotel + 1 + 1 谢谢@Thanks!
greendays + 1 + 1 热心回复!
hwh425 + 1 我很赞同!
mEIhUAlU123 + 1 + 1 我很赞同!
debug_cat + 2 + 1 谢谢@Thanks!
Youzhuan45 + 1 我很赞同!
Alterx + 1 + 1 谢谢@Thanks!
allspark + 1 + 1 用心讨论,共获提升!
杨辣子 + 1 + 1 谢谢@Thanks!
mr88fang + 1 + 1 我很赞同!
wshq + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
坦然 + 1 + 1 我很赞同!
熊猫拍板砖 + 2 + 1 谢谢@Thanks!
T4DNA + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

iamafailor 发表于 2024-1-11 14:29
反手一个star
BurNingMe 发表于 2024-3-14 16:40
佬,我最近也在学习frida这方面的知识,求问有没有这方面的学习路线,要学到怎么样才能看得懂这篇文章。跪求回复啊啊啊啊啊啊啊啊啊啊啊啊
fc1314 发表于 2024-1-11 12:29
yyzzy 发表于 2024-1-11 12:41
怎么用啊?
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,学习
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-27 16:27

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表