网络协议抓取与分析(SSL Pinning突破)

news2025/3/20 13:17:17

1. 网络协议逆向基础

1.1 网络协议分析流程

graph TD  
    A[抓包环境配置] --> B[流量捕获]  
    B --> C{协议类型}  
    C -->|HTTP| D[明文解析]  
    C -->|HTTPS| E[SSL Pinning突破]  
    D --> F[参数逆向]  
    E --> F  
    F --> G[协议重放与模拟]  
1.1.1 关键分析目标
  • 协议结构:Header/Body格式、编码方式(JSON/Protobuf)

  • 认证机制:Token生成、签名算法、时间戳验证

  • 加密方式:AES密钥交换、RSA非对称加密


2. 抓包工具链配置

2.1 工具对比与选择

工具名称优势缺陷
Charles可视化友好,支持SSL代理无法绕过双向证书验证
Burp Suite插件生态丰富,支持主动扫描商业版功能受限
Fiddler Everywhere跨平台,支持移动端高级功能需订阅
Wireshark底层流量捕获,支持所有协议HTTPS解析依赖密钥导出

2.2 代理环境配置

Android设备代理设置

adb shell settings put global http_proxy 192.168.1.100:8888  
# 导入Charles证书到系统信任区  
adb push charles.pem /sdcard/  
adb shell mv /sdcard/charles.pem /system/etc/security/cacerts/  
adb shell chmod 644 /system/etc/security/cacerts/charles.pem  

3. SSL Pinning突破技术

3.1 证书锁定机制解析

常见实现方式

// OkHttp证书锁定示例  
CertificatePinner pinner = new CertificatePinner.Builder()  
    .add("api.example.com", "sha256/AAAAAAAAAAAAAAAAAAAAAAAA=")  
    .build();  
OkHttpClient client = new OkHttpClient.Builder()  
    .certificatePinner(pinner)  
    .build();  

3.2 Frida动态Hook方案

绕过证书检查

Java.perform(() => {  
    const CertificatePinner = Java.use('okhttp3.CertificatePinner');  
    CertificatePinner.check.overload('java.lang.String', 'java.util.List').implementation = function (hostname, pins) {  
        console.log(`[+] Bypass SSL Pinning for: ${hostname}`);  
        return; // 跳过校验逻辑  
    };  
});  

Xposed模块方案

XposedHelpers.findAndHookMethod(  
    "com.android.org.conscrypt.TrustManagerImpl",  
    lpparam.classLoader,  
    "checkTrusted",  
    X509Certificate[].class,  
    String.class,  
    String.class,  
    boolean.class,  
    new XC_MethodHook() {  
        @Override  
        protected void beforeHookedMethod(MethodHookParam param) {  
            param.setResult(null); // 强制信任所有证书  
        }  
    }  
);  

4. 协议逆向实战

4.1 加密参数定位

Hook网络库入口

// OkHttp拦截示例  
const OkHttpClient = Java.use('okhttp3.OkHttpClient');  
OkHttpClient.newCall.implementation = function (request) {  
    const url = request.url().toString();  
    const body = request.body().toString();  
    console.log(`请求URL: ${url}\n请求体: ${body}`);  
    return this.newCall(request);  
};  

4.2 算法逆向分析

AES密钥提取案例

const SecretKeySpec = Java.use('javax.crypto.spec.SecretKeySpec');  
SecretKeySpec.$init.overload('[B', 'java.lang.String').implementation = function (key, algo) {  
    console.log(`[AES密钥] 算法: ${algo}, 值: ${hexdump(key)}`);  
    return this.$init(key, algo);  
};  

5. 协议重放与模拟

5.1 Python请求模拟

自动化脚本模板

import requests  

def simulate_api(payload):  
    headers = {  
        "User-Agent": "Mozilla/5.0",  
        "X-Sign": generate_sign(payload)  # 逆向生成的签名算法  
    }  
    response = requests.post(  
        "https://api.target.com/v1/data",  
        json=payload,  
        headers=headers,  
        verify=False  # 忽略证书验证  
    )  
    return response.json()  

# 使用示例  
print(simulate_api({"user_id": 1001}))  

5.2 签名算法破解

Hook签名函数

Java.perform(() => {  
    const SignUtils = Java.use('com.target.app.SignUtils');  
    SignUtils.generateSign.implementation = function (data) {  
        const realSign = this.generateSign(data);  
        console.log(`原始数据: ${data} → 签名: ${realSign}`);  
        return "deadbeef";  // 返回固定签名绕过验证  
    };  
});  

6. 高级对抗技术

6.1 双向证书验证突破

客户端证书提取

const KeyStore = Java.use('java.security.KeyStore');  
KeyStore.load.overload('java.security.KeyStore$LoadStoreParameter').implementation = function (param) {  
    this.load(param);  
    const aliases = this.aliases();  
    while (aliases.hasMoreElements()) {  
        const alias = aliases.nextElement();  
        const cert = this.getCertificate(alias);  
        console.log(`[客户端证书] Alias: ${alias}\n${cert.toString()}`);  
    }  
};  

6.2 协议混淆对抗

流量伪装技术

# 在请求中插入随机噪声  
def add_noise(data):  
    noise = os.urandom(8).hex()  
    return {"data": data, "noise": noise}  

# 服务端需配合去除噪声  

7. 企业级实战案例

7.1 某电商APP协议逆向

步骤

  1. 配置抓包环境

    adb shell settings put global http_proxy 192.168.1.100:8888  
  2. 绕过SSL Pinning

    // Frida脚本注入  
    Java.perform(() => {  
        CertificatePinner.check.overload().implementation = function() {}  
    });  
  3. 定位加密参数

    • 使用Charles捕获/api/v3/order请求

    • 分析X-Sign头部生成逻辑

  4. 算法逆向

    • Hook发现使用HMAC-SHA256算法

    • 密钥通过SecureStorage.getKey()获取

  5. 模拟请求

    import hashlib, hmac  
    key = bytes.fromhex("deadbeef")  
    signature = hmac.new(key, payload.encode(), hashlib.sha256).hexdigest()  

7.2 即时通讯协议解密

技术要点

  • 使用Wireshark捕获原始TCP/UDP流量

  • 通过Frida提取TLS会话密钥

  • 配置Wireshark TLS解密:

    (Pre)-Master-Secret log: /path/to/sslkey.log  

8. 防护与检测方案

8.1 对抗Hook检测

检测Frida特征

public static boolean isFridaRunning() {  
    try {  
        new File("/data/local/tmp/frida-server").exists();  
        return true;  
    } catch (Exception e) {  
        return false;  
    }  
}  

8.2 动态协议保护

密钥轮换机制

public class KeyManager {  
    private static String getCurrentKey() {  
        // 每10分钟从服务端获取新密钥  
        return fetchFromServer(System.currentTimeMillis() / 600_000);  
    }  
}  

技术验证清单

  • 成功捕获并解析HTTPS流量

  • 绕过主流SSL Pinning实现

  • 提取并验证加密算法密钥

  • 实现协议重放攻击

  • 复现企业级协议逆向案例

本章实验需在授权测试环境进行,建议使用自建服务或开源API作为目标。禁止对未授权商业服务实施网络攻击,所有抓包操作需符合当地法律法规。

关于作者:

15年互联网开发、带过10-20人的团队,多次帮助公司从0到1完成项目开发,在TX等大厂都工作过。当下为退役状态,写此篇文章属个人爱好。本人开发期间收集了很多开发课程等资料,需要可联系我

 

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

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

相关文章

蓝桥杯真题——洛谷Day13 找规律(修建灌木)、字符串(乘法表)、队列(球票)

目录 找规律 P8781 [蓝桥杯 2022 省 B] 修剪灌木 字符串 P8723 [蓝桥杯 2020 省 AB3] 乘法表 队列 P8641 [蓝桥杯 2016 国 C] 赢球票 找规律 P8781 [蓝桥杯 2022 省 B] 修剪灌木 思路:对某个特定的点来说有向前和向后的情况,即有向前再返回到该位置…

【2025】基于Springboot + vue实现的毕业设计选题系统

项目描述 本系统包含管理员、学生、教师三个角色。 管理员角色: 用户管理:管理系统中所有用户的信息,包括添加、删除和修改用户。 配置管理:管理系统配置参数,如上传图片的路径等。 权限管理:分配和管理…

JAVA并发编程 --- 补充内容

1 线程状态 1.1 状态介绍 当线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态。线程对象在不同的时期有不同的状态。那么Java中的线程存在哪几种状态呢?Java中的线程 状态被定义在了java.lang.Thread.State枚…

【ArduPilot】Windows下使用Optitrack通过MAVProxy连接无人机实现定位与导航

Windows下使用Optitrack通过MAVProxy连接无人机实现定位与导航 配置动捕系统无人机贴动捕球配置无人机参数使用MAVProxy连接Optitrack1、连接无人机3、设置跟踪刚体ID4、校正坐标系5、配置IP地址(非Loopback模式)6、启动动捕数据推流 结语 在GPS信号弱或…

qt 图像后处理的软件一

这是一个图像后处理软件刚刚,目前功能比较单一,后续会丰富常用的功能。 目前实现的功能有 1.导入图像 2图像可中心缩放(右上角放大缩小,按钮及滚轮双重可控)。 3.图像重置功能 软件界面如下。 代码放在我的资源里…

Ardunio 连接OLED触摸屏(SSD1106驱动 4针 IIC通信)

一、准备工作 1、硬件 UNO R3 :1套 OLED触摸屏:1套 导线诺干 2、软件 arduino 二、接线 UNO R3OLED5VVCCGNDGNDA5SCLA4SDA 脚位如下图所示: Uno R3脚位图 触摸屏脚位图 查阅显示屏的驱动规格:通常显示屏驱动芯片有SSD1306,SH110…

深度学习 第4章 数值计算和 Deepseek 的实践

第4章 数值计算和 Deepseek 的实践 章节概述 本章主要探讨了数值计算中的关键问题,这些问题在深度学习和机器学习中尤为重要。数值计算的核心挑战在于如何在有限的计算资源和精度限制下,高效且稳定地处理连续数学问题。本章首先讨论了溢出和下溢问题&a…

【数据分享】2000—2024年我国省市县三级逐年归一化植被指数(NDVI)数据(年最大值/Shp/Excel格式)

之前我们分享过2000-2024年我国逐年的归一化植被指数(NDVI)栅格数据,该逐年数据是取的当年月归一化植被指数(NDVI)的年最大值。(可查看之前的文章获悉详情)!该数据来源于NASA定期发布…

HW华为流程管理体系精髓提炼华为流程运营体系(124页PPT)(文末有下载方式)

资料解读:HW华为流程管理体系精髓提炼华为流程运营体系(124页PPT) 详细资料请看本解读文章的最后内容。 华为作为全球领先的科技公司,其流程管理体系的构建与运营是其成功的关键之一。本文将从华为流程管理体系的核心理念、构建…

【系统架构设计师】操作系统 - 特殊操作系统 ③ ( 微内核操作系统 | 单体内核 操作系统 | 内核态 | 用户态 | 单体内核 与 微内核 对比 )

文章目录 一、微内核操作系统1、单体内核 操作系统2、微内核操作系统 引入3、微内核操作系统 概念4、微内核操作系统 案例 二、单体内核 与 微内核 对比1、功能对比2、单体内核 优缺点3、微内核 优缺点 一、微内核操作系统 1、单体内核 操作系统 单体内核 操作系统 工作状态 : …

【RabbitMQ】RabbitMQ的基本架构是什么?包括哪些核心组件?

RabbitMQ基于AMQP协议实现,由多个核心组件组成,确保消息的可靠传递。 Rabbit的架构图: 1.RabbitMQ的基本架构: 1.核心组件: 1.Producer(生产者): 发送消息到RabbitMQ。 2.Exchange(交换机):接…

Octave3D 关卡设计插件

课程参考链接 这位大佬有在视频合集中有详细的讲解,个人体验过,感觉功能很强大 https://www.bilibili.com/video/BV1Kq4y1C72P/?share_sourcecopy_web&vd_source0a41d8122353e3e841ae0a39908c2181 Prefab资源管理 第一步 在场景中创建一个空物体…

【视频】文本挖掘专题:Python、R用LSTM情感语义分析实例合集|上市银行年报、微博评论、红楼梦、汽车口碑数据采集词云可视化

原文链接:https://tecdat.cn/?p41149 分析师:Zhenzhen Liu,Shuai Fung 作为数据科学家,我们始终关注如何从非结构化数据中提取高价值信息。本专题合集聚焦企业年报的文本分析技术,通过Python与R语言实战案例&#xff…

英伟达“AI 超级碗”开幕

Nvidia的AI和机器人技术进展 2025年03月19日 | AI日报 ![](https://i-blog.csdnimg.cn/direct/e7838b88f17f40c9a435f6dc48d26c59.jpeg#pic_center) 欢迎各位人工智能爱好者。 Nvidia的CEO Jensen Huang刚刚拉开了他的“AI超级碗”,并发表了关于该公司最新芯片、…

DeepSeek扫盲篇: V3 vs R1全面对比架构差异与蒸馏模型演进史

I. 引言:DeepSeek系列的技术革命 在全球大模型军备竞赛白热化的2023年,DeepSeek系列通过V3与R1两款里程碑产品,构建了中文大模型领域的"双塔奇观"。这两个看似矛盾的版本——前者以1280亿参数的MoE架构突破算力边界,后…

UE5材质法线强度控制节点FlattenNormal

连法 FlattenNormal内部是这样的 FlattenNormal的作用是用来调整法线强度 连上FlattenNormal后 拉高数值

计算机网络基础:认识网络硬件与传输介质

计算机网络基础:认识网络硬件与传输介质 一、前言二、网络硬件设备2.1 路由器2.1.1 路由器的基本概念与功能2.1.2 路由器的工作原理2.1.3 路由器的类型与应用场景 2.2 交换机2.2.1 交换机的基本概念与功能2.2.2 交换机的工作原理2.2.3 交换机的类型与应用场景 2.3 服…

Android audio(8)-native音频服务的启动与协作(audiopolicyservice和audioflinger)

音频策略的构建 1、概述 2、AudiopolicyService 2.1 任务 2.2 启动流程 2.2.1 加载audio_policy.conf(xml)配置文件 2.2.2 初始化各种音频流对应的音量调节点 2.2.3 加载audio policy硬件抽象库 2.2.4设置输出设备 ps:audiopatch流程简介 2.2.5打开输出设…

法兰克仿真软件FANUC CNC Guide v25.0 安装教程及中文设置

前言 下载地址在文末。 我们公司用新到一批FANUC 系统的设备,为方便使用就装了一个 FANUC 数控系统仿真软件FANUC CNC Guide v25.0 ,还是最新版不是市面上流传的老版本。模拟学习一下。 安装操作 安装环境:Windows 11 专业版 24H2 安装程…

Java SE 面经

1、Java 语言有哪些特点 Java 语言的特点有: ①、面向对象。主要是:封装,继承,多态。 ②、平台无关性。一次编写,到处运行,因此采用 Java 语言编写的程序具有很好的可移植性。 ③、支持多线程。C 语言没…