网络抓包03 - 实践篇

news2024/11/20 13:45:44

声明: 本文中提及的APK及相关内容仅用于学习和交流目的,不涉及任何商业用途。本文不鼓励或支持任何形式的版权侵犯行为,同时也强调对软件的安全使用。我们尊重和维护开发者的权益,强烈建议读者在使用软件时遵守相关法律法规,并尊重软件的使用许可协议。对于因不当使用软件而导致的任何法律或安全问题,本文作者及发布平台不承担任何责任。如果软件开发者或权利人有任何版权或安全方面的疑虑,请及时与我们联系,我们将第一时间进行相应处理。

保存证书

此样本已经失效了,了解一下思路吧

对于VPN抓包失败的,先上一套降龙十八掌。

比如,先尝试Hook一下 KeyStore,看看情况:

function hook_KeyStore_load() {
    Java.perform(function () {
        var StringClass = Java.use("java.lang.String");
        var KeyStore = Java.use("java.security.KeyStore");

        KeyStore.load.overload('java.security.KeyStore$LoadStoreParameter').implementation = function (arg0) {
            console.log(Java.use("android.util.Log").getStackTraceString(Java.use("java.lang.Throwable").$new()));
            console.log("KeyStore.load1:", arg0);
            this.load(arg0);
        };

        KeyStore.load.overload('java.io.InputStream', '[C').implementation = function (arg0, arg1) {
            console.log(Java.use("android.util.Log").getStackTraceString(Java.use("java.lang.Throwable").$new()));
            console.log("KeyStore.load2: ", arg0, arg1 ? "|" +  StringClass.$new(arg1) + "|": "password is null");
            if (arg0) {
                saveFile(arg0, "ncsearch");
            }
            this.load(arg0, arg1);
        };

        console.log("hook_KeyStore_load...");
    });
}

function saveFile(is, saveName) {
    var file = Java.use("java.io.File").$new("/sdcard/Download/" + saveName + ".p12");
    var out = Java.use("java.io.FileOutputStream").$new(file);

    var buffer = new Array(1024);
    buffer = buffer.fill(0)
    buffer = Java.array('byte', buffer);

    var len;
    while ((len = is.read(buffer)) > 0) {
        out.write(buffer, 0, len)
    }

    out.close()
    console.log("save file success!")
}

输出如下内容:

java.lang.Throwable
        at java.security.KeyStore.load(Native Method)
        at com.ninemax.ncsearchnew.utils.HttpClientSslHelper.getSSLContext(HttpClientSslHelper.java:152)
        at com.ninemax.ncsearchnew.utils.HttpUtils.loadData(HttpUtils.java:95)
        at com.ninemax.ncsearchnew.utils.HttpUtils.loadData(HttpUtils.java:52)
        at com.ninemax.ncsearchnew.ui.base.BaseActivity.loadData(BaseActivity.java:215)
        at com.ninemax.ncsearchnew.ui.SpalshActivity.getWebsiteData(SpalshActivity.java:232)
        at com.ninemax.ncsearchnew.ui.SpalshActivity.onApplyPrivacyFinish(SpalshActivity.java:183)
        at com.ninemax.ncsearchnew.ui.SpalshActivity.showPrivacyDialog(SpalshActivity.java:698)
        at com.ninemax.ncsearchnew.ui.SpalshActivity.initData(SpalshActivity.java:171)
        at com.ninemax.ncsearchnew.ui.base.BaseActivity.onCreate(BaseActivity.java:96)
        at android.app.Activity.performCreate(Activity.java:7802)
        at android.app.Activity.performCreate(Activity.java:7791)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1306)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3245)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016)
        at android.os.Handler.dispatchMessage(Handler.java:107)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7356)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)

KeyStore.load2:  android.content.res.AssetManager$AssetInputStream@6498482 |cods.org.cn|

明显是从 asset 里面读取了一个文件,然后加载成 KeyStore,我们将这个文件直接写到 sdcard 上,使用 keystore explore 打开看看。

https://keystore-explorer.org/downloads.html

需要注意,上面我们保存文件的时候,使用的是 .p12,但是实际上不一定是 .p12 格式,具体还需要使用软件查看,使用 kse 打开证书:

输入上面打印出来的密码:

可以看到,它确实是一个 PKCS12 格式的文件,我们可以直接将它导入到charles里面去,为了简单,域名我选择了全匹配。

弄完之后,再去做请求,一般情况下会ok,如果还不行,就需要祭出 ssl pin 等hook代码了,objection 也可以一键处理,就不展开了。

SSL PIN 的处理

看另一个样本:

VPN抓包也是失败的,祭出 ssl pin 等 hook 的代码之后,发现还是走不通。这就让人比较头大了。

可以确定的是,网络请求肯定是触发了的,那么我们hook一下最底层的代码,看看调用堆栈。

比如,我们使用 objection hook  这个类 com.android.org.conscrypt.TrustManagerImpl 的所有方法,再次点击按钮,发送网络请求,就可以看到堆栈:

        at com.android.org.conscrypt.TrustManagerImpl.checkTrusted(Native Method)
        at com.android.org.conscrypt.TrustManagerImpl.checkServerTrusted(TrustManagerImpl.java:335)
        at android.security.net.config.NetworkSecurityTrustManager.checkServerTrusted(NetworkSecurityTrustManager.java:113)
        at android.security.net.config.RootTrustManager.checkServerTrusted(RootTrustManager.java:133)
        at java.lang.reflect.Method.invoke(Native Method)
        at android.net.http.X509TrustManagerExtensions.checkServerTrusted(X509TrustManagerExtensions.java:101)
        at java.lang.reflect.Method.invoke(Native Method)
        at ul.b$a.a(AndroidPlatform.java:2)
        at nl.f.a(CertificatePinner.java:13)
        at ql.d.f(RealConnection.java:52)
        at ql.d.c(RealConnection.java:22)
        at ql.g.d(StreamAllocation.java:95)
        at ql.g.e(StreamAllocation.java:1)
        at ql.a.a(ConnectInterceptor.java:13)
        at rl.f.b(RealInterceptorChain.java:11)
        at pl.b.a(CacheInterceptor.java:105)
        at rl.f.b(RealInterceptorChain.java:11)
        at rl.a.a(BridgeInterceptor.java:37)
        at rl.f.b(RealInterceptorChain.java:11)
        at rl.i.a(RetryAndFollowUpInterceptor.java:12)
        at rl.f.b(RealInterceptorChain.java:11)
        at rl.f.a(RealInterceptorChain.java:1)
        at yl.a.a(HttpLoggingInterceptor.java:4)
        at rl.f.b(RealInterceptorChain.java:11)
        at y8.b.a(HttpResponseInterceptor.kt:8)
        at rl.f.b(RealInterceptorChain.java:11)
        at y8.a.a(HttpRequestInterceptor.kt:37)
        at rl.f.b(RealInterceptorChain.java:11)
        at rl.f.a(RealInterceptorChain.java:1)
        at nl.y.c(RealCall.java:23)
        at nl.y.b(RealCall.java:16)
        at lm.p.execute(OkHttpCall.java:18)
        at x8.a.execute(EasyCall.kt:1)
        at x8.a.c(EasyCall.kt:1)
        at com.ticktick.task.helper.UserActivationHelper.sendUserActivation(UserActivationHelper.kt:2)
        at com.ticktick.task.helper.UserActivationHelper.trySendUserActivation(UserActivationHelper.kt:1)
        at com.ticktick.task.helper.UserActivationHelper.access$trySendUserActivation(UserActivationHelper.kt:1)
        at com.ticktick.task.helper.UserActivationHelper$trySendUserActivation$$inlined$timerTask$1.run(Timer.kt:1)
        at java.util.TimerThread.mainLoop(Timer.java:562)
        at java.util.TimerThread.run(Timer.java:512)

这个时候,就明白了,应用层的类都被混淆了,所以我们 hook 代码失效了,我们直接hook混淆后的类:

function hook_cp() {
    Java.perform(function () {
        var ClassName = "nl.f";
        var Platform = Java.use(ClassName);
        var targetMethod = "a";
        var len = Platform[targetMethod].overloads.length;
        console.log(len);
        for (var i = 0; i < len; ++i) {
            Platform[targetMethod].overloads[i].implementation = function () {
                console.log("class:", ClassName, "target:", targetMethod, " i:", i, arguments);
            }
        }
    });
}

这个时候,就可以正常抓到包了:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2177191.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

烟雾检测算法、明烟明火检测、烟火识别算法

烟火检测是一种基于先进技术的安全监控手段&#xff0c;主要用于及时发现和预防火灾等安全事故。其技术原理和应用领域可以详细阐述如下&#xff1a; 技术原理 烟火检测算法主要依赖于计算机视觉、深度学习以及图像处理技术。具体步骤包括&#xff1a; 1、数据采集与预处理&…

jQuery——css

本文分享到此结束&#xff0c;欢迎大家评论区相互讨论学习&#xff0c;下一篇继续分享jQuery中offset 和 position的学习。

深度学习--------------------------------门控循环单元GRU

目录 门候选隐状态隐状态门控循环单元GRU从零开始实现代码初始化模型参数定义隐藏状态的初始化函数定义门控循环单元模型训练该部分总代码简洁代码实现 做RNN的时候处理不了太长的序列&#xff0c;这是因为把整个序列信息全部放在隐藏状态里面&#xff0c;当时间很长的话&#…

SpringCloud学习记录|day1

学习材料 2024最新SpringCloud微服务开发与实战&#xff0c;java黑马商城项目微服务实战开发&#xff08;涵盖MybatisPlus、Docker、MQ、ES、Redis高级等&#xff09; 学redis讲到微服务就停了&#xff0c;nginx也是。 所以嘛&#xff0c;我终于来到微服务了。 复习MyBatisP…

鸿蒙HarmonyOS开发生态

1、官网 华为开发者联盟-HarmonyOS开发者官网&#xff0c;共建鸿蒙生态 2、开发工具IDE下载及使用 https://developer.huawei.com/consumer/cn/ 3、使用帮助文档 4、发布到华为应用商店 文档中心

免费分享一套SpringBoot+Vue火车票订票管理系统【论文+源码+SQL脚本】,帅呆了~~

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的SpringBootVue火车票订票管理系统&#xff0c;分享下哈。 项目视频演示 【免费】SpringbootVue火车票订票管理系统 Java毕业设计_哔哩哔哩_bilibili 项目介绍 传统办法管理信息首先需要花费的时间比较多&…

CEX上币趋势分析:Infra赛道与Ton生态的未来

在当前的加密市场中&#xff0c;CEX&#xff08;中心化交易所&#xff09;上币的选择愈发重要&#xff0c;尤其是对项目方而言。根据 FMG 的整理&#xff0c;结合「杀破狼」的交易所上币信息&#xff0c;显然 Infra 赛道成为了交易所的热门选择&#xff0c;而 Ton 生态也展现出…

相互作用感知的 3D 分子生成 VAE 模型 - DeepICL 评测

DeepICL 是一个基于相互作用感知的 3D 分子生成模型&#xff0c;能够在目标结合口袋内进行相互作用引导的小分子设计。DeepICL 通过利用蛋白质-配体相互作用的普遍模式作为先验知识&#xff0c;在有限的实验数据下也能实现高度的泛化能力。 一、背景介绍 DeepICL 来源于韩国科学…

CHItrans简介--DVM

DVM基础flow 注&#xff1a;上图中&#xff0c;没有画出DVM指令对应的snoop request&#xff0c;相关snp请求如下所示&#xff1a; 对应的snp请求 Non-sync DVM trans flow Sync DVM trans flow Flow Control 后续的说明&#xff0c;参考&#xff1a; CHI协议之DVM操作_dvm r…

MySql语言操作数据库---MySql引擎,数据表,约束,基本查询,条件查询

数据库引擎 作用:引擎决定了数据是如何存在于数据库中的.不同引擎存储结构和特征是不同的. 常见引擎: InnoDB,MyISAM,MemoryMysql引擎操作: 查看支持的引擎: show engines; 给表设置引擎:create table student2(name varchar(20),age int )engine InnoDB; -- todo 展示所有的…

elasticsearch_exporter启动报错 failed to fetch and decode node stats

最近把服务器迁移到了ubuntu系统&#xff0c;结果发现在centos还正常运行的elasticsearch_exporter&#xff0c;用systemd启动后一直报错 failed to fetch and decode node stats 在网上翻了大半年&#xff0c;竟然都无解&#xff01;这种报错&#xff0c;很明显就是你的ES密码…

使用WPF实现一个快速切换JDK版本的客户端工具

发现网上一键切换JDK环境的方法都是在mac或Linux下的&#xff0c;本人主力电脑是Windows&#xff0c;于是看了一下WPF的文档&#xff0c;自己开发了一个客户端。 直接上代码吧&#xff1a; using JavaSwitch.Properties; using Newtonsoft.Json; using System; using System.…

本地IO与远程IO:揭秘工业自动化中的两大关键角色

在工业自动化领域&#xff0c;IO&#xff08;Input/Output&#xff0c;输入/输出&#xff09;模块扮演着至关重要的角色。它们作为连接控制系统与现场设备的桥梁&#xff0c;负责数据的采集与指令的执行。然而&#xff0c;随着技术的不断进步&#xff0c;IO模块也分为本地IO和远…

【百度文心智能体】想开发爆款智能体?来看看黑神话旅游指南 智能体开发流程大揭秘

&#x1f3ac; 博主&#xff1a;鸽芷咕 ⛺️生活的理想&#xff0c;就是为了理想的生活! 前言 2022年到2023年整年度随着 ChatGPT的爆火&#xff0c;“AI 人工智能 智能助手”概念开始引起各行各业的广泛关注&#xff0c;一些曾经存在于科幻片中的智能助手&#xff0c;到如今也…

探索SpringBoot:学科竞赛管理项目开发

2 相关技术简介 2.1Java技术 Java是一种非常常用的编程语言&#xff0c;在全球编程语言排行版上总是前三。在方兴未艾的计算机技术发展历程中&#xff0c;Java的身影无处不在&#xff0c;并且拥有旺盛的生命力。Java的跨平台能力十分强大&#xff0c;只需一次编译&#xff0c;任…

从零预训练一个tiny-llama#Datawhale组队学习Task2

完整的教程请参考&#xff1a;datawhalechina/tiny-universe: 《大模型白盒子构建指南》&#xff1a;一个全手搓的Tiny-Universe (github.com) 这是Task2的学习任务 目录 Qwen-blog Tokenizer&#xff08;分词器&#xff09; Embedding&#xff08;嵌入&#xff09; RMS …

Wed前端--HTML基础

目录 一、开发工具 二、HTML文档结构 2.1头部head 2.1.1title标记 2.1.2元信息meta标记 具体实例 ​编辑 一、开发工具 最基础的开发工具是&#xff1a;HBuilder 二、HTML文档结构 HTML文档由头部head和主体body组成 头部head标记中可以定义标题样式&#xff0c;头部信…

VR视频怎样进行加密和一机一码的使用?--加密(一)

在视频加密领域&#xff0c;我们常见接触的就是在普通设备上使用的加密视频&#xff0c;如电脑、手机、平板等。Vr的发展和兴起给人们带来最真实的体验感受&#xff0c;不仅在游戏行业应用较广&#xff0c;在一些影院或者元宇宙文旅、展厅等视频场景也备受青睐。 随着VR视频场景…

django的URL配置

1 django如何处理一个请求 首先Django要使用根URLconf模块&#xff0c;通过setting.py配置文件的ROOT_URLCONF来设置。 加载该模块后并查找变量 urlpatterns。这是一个Python的django.conf.urls.url()实例列表。 Django按顺序运行每个URL模式&#xff0c;并在匹配所请求的…

Java项目实战II基于Java+Spring Boot+MySQL的智能物流管理系统(文档+源码+数据库)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者 一、前言 随着电子商务的蓬勃发展&#xff0c;物流行业迎来了前所未有的挑战与机遇。传统物流管理方式在应对海…