unidbg:逆向工程的深度剖析

IT阅读排行榜 2024-07-11 15:45

现在的App,只要是稍微对安全有一些要求的,都会把核心逻辑、加解密算法或者保护机制,比如一些反调试手段,使用NDK开发的方式写到Native库中,最终生成so文件。


so文件的逆向比Java层的DEX要困难很多,如果文件中还有比较严重的混淆或者花指令的话,可能连正常的反编译都成问题,更不用说查看它采用的是什么算法了。不仅如此,现在ARM平台上还出现了让算法完全消失的虚拟机保护(Virtual Machine Protect)技术,该技术通过自定义字节码的方式实现一套自己的CPU。如果不能理解这套虚拟机的运行流程,逆向算法便无从谈起。


“兵来将挡,水来土掩。”幸运的是,随着技术的发展,可以应对这样场景的对抗方案出现了。正如AlphaGo在大战李世石时依赖暴力下棋法一样,我们也可以不还原某段算法,而是凭借现代计算机的超高算力,直接暴力执行这段算法。


在模拟执行的过程中,算法是黑盒,我们并不直接分析这个黑盒,而是直接让它运行,它需要什么我们就给它补充什么,以确保它能顺利地执行完算法,生成我们需要的结果。


这个模拟执行的框架就是unidbg。


扫码了解 ↑


视频解读





读者对象




本书是一本理论与实战并举,全方位介绍unidbg的使用、原理及实现细节的著作,适合以下几类读者阅读:

  • 移动应用安全方向的安全工程师。

  • 计算机组成原理和软件模拟方向的应用开发者。

  • 自动化领域的爬虫工程师。

  • 反欺诈/风控领域的安全工程师。


如何阅读本书




本书共31章,分为4部分。


第一部分(第1~3章) 进入unidbg的世界。通过阅读该部分,读者可以简单了解unidbg的基础知识,通过unidbg执行一些基本的操作,包括环境准备、so文件加载、简单补环境、Hook和Patch的方法等。


第二部分(第4~15章) unidbg原理。由于unidbg主要是用Java写的,代码比较通俗易懂,且核心原理参照的是Android系统,可以说是一个缩小版AndroidLite,因此如果有哪部分看不懂,可以直接参考Android源码。读完该部分,读者会对unidbg核心原理有比较完整的认识。


第三部分(第16~26章) 模拟执行与补环境实战。该部分主要介绍unidbg实战中的各种具体技术案例,如I/O重定向、Debugger自吐、指针参数与Debugger、魔改Base64还原、使用unidbg动态分析内存中的数据、使用unidbg主动调用fork进程,并对补环境中的补环境入门、标识记录、设备风控、补环境加强等进行分析,指导读者编写实际的补环境代码,更好地将理论知识运用于实践。


第四部分(第27~31章) 反制与生产环境部署。该部分介绍环境变量检测、xHook框架检测、JNI层常见函数处理等,并对常规检测进行总结,还介绍通过检测之后如何把so部署到x86服务器上运行。该部分是大家最关心的批量生产与对抗的内容,也是最敏感的支持风控数据与决策的内容,对于打击黑灰产、遏制网络犯罪有着非常积极的意义。



目录



上拉下滑查看目录 ↓

目  录 Contents

前 言

第一部分 进入unidbg的世界

第1章 unidbg环境准备与快速

上手  2

1.1 r0env环境介绍与集成  2

1.1.1 r0env各组件介绍  2

1.1.2 r0env下载及安装  5

1.2 IDEA安装及配置  6

1.3 第一个unidbg项目  7

1.3.1 unidbg介绍  7

1.3.2 unidbg下载与运行示例  8

1.3.3 unidbg示例讲解  9

1.4 本章小结  13

第2章 unidbg模拟执行初探  14

2.1 第一个NDK项目  14

2.1.1 使用Android Studio创建NDK项目  14

2.1.2 编写自己的so业务代码  16

2.2 unidbg的符号调用与地址调用  18

2.2.1 unidbg主动调用前置准备  18

2.2.2 unidbg主动调用so函数  19

2.2.3 unidbg部分API简单讲解  22

2.3 本章小结  24

第3章 unidbg补环境、Hook与

Patch  25

3.1 为so添加交互:使用JNI接口

编写md5方法  25

3.2 使用unidbg修补执行环境并

模拟执行  27

3.3 脱离编译器,使用命令行

编译so  34

3.4 unidbg的Hook  36

3.5 unidbg的Patch  39

3.6 本章小结  42

第二部分 unidbg原理

第4章 ELF文件执行视图解析  44

4.1 ELF文件结构  44

4.1.1 ELF头部结构  45

4.1.2 程序头部表  47

4.1.3 动态节区_DYNAMIC段  51

4.2 深入jelf代码细节,探究ELF

解析  54

4.2.1 分析原版jelf代码  54

4.2.2 分析unidbg版jelf代码  56

4.3 本章小结  60

第5章 Unicorn的初级使用与初探Linker  61

5.1 Unicorn的初级使用:模拟执行与Hook  61

5.1.1 使用Unicorn进行模拟

执行  61

5.1.2 Unicorn的Hook  64

5.1.3 Keystone与Capstone  70

5.2 初探Android系统源码  71

5.2.1 Java层代码追踪  73

5.2.2 Native层代码追踪  75

5.3 本章小结  78

第6章 深入Linker:so的加载、

链接、初始化  79

6.1 so的加载过程  79

6.2 so的链接过程  90

6.3 so的初始化操作  100

6.4 本章小结  102

第7章 使用Unicorn模拟Linker:so的加载过程  103

7.1 模拟Linker :环境准备  103

7.2 模拟Linker :so的加载  109

7.3 动态调试Linker,探究so的内存

布局图  118

7.4 本章小结  122

第8章 使用Unicorn模拟Linker:

so的链接过程  123

8.1 so的依赖库加载过程  123

8.2 so的动态链接  127

8.3 初尝试:使用unidbg模拟执行

简单so文件  131

8.4 探究unidbg的Linker代码

细节  133

8.4.1 unidbg加载so文件代码

入口  134

8.4.2 处理so信息并载入内存  135

8.4.3 对so的依赖库进行处理  137

8.4.4 重定位操作  138

8.4.5 处理so的初始化信息与生成module对象  140

8.4.6 执行初始化  141

8.5 本章小结  142

第9章 R0dbg实战与Unidbg_FindKey  143

9.1 模拟Linker :so的初始化过程  143

9.2 指令追踪与排错  147

9.2.1 TLS线程局部存储环境

初始化  148

9.2.2 R0dbg对系统调用进行

处理  150

9.3 使用R0dbg模拟执行so  152

9.4 Unidbg_FindKey牛刀小试  154

9.5 本章小结  157

第10章 unidbg源码解析:AndroidEmulator  158

10.1 创建AndroidEmulator  158

10.2 创建FileSystem  165

10.3 创建Backend  168

10.4 创建SvcMemory  169

10.5 本章小结  172

第11章 unidbg源码解析:

DalvikVM  173

11.1 分析createDalvikVM()  173

11.2 Dvm相关类介绍  178

11.2.1 BaseVM解析  179

11.2.2 DalvikVM解析  184

11.2.3 DvmObject解析  185

11.2.4 DvmClass解析  187

11.3 本章小结  188

第12章 unidbg源码解析:模拟

执行流程追踪  189

12.1 编写含JNI交互的MD5算法并

模拟执行  189

12.1.1 编写含JNI交互的so  189

12.1.2 使用unidbg进行模拟

执行  190

12.2 模拟执行流程追踪:寻找

函数  192

12.3 模拟执行流程追踪:处理参数

并模拟执行  195

12.4 本章小结  202

第13章 unidbg源码解析:JNI

交互流程追踪  203

13.1 JNI注册  203

13.2 JNI指令执行  208

13.3 本章小结  217

第14章 unidbg源码解析:

Memory  218

14.1 Memory模块的创建  218

14.2 AndroidElfLoader的方法实现  219

14.2.1 内存相关方法实现  219

14.2.2 栈空间相关方法实现  226

14.2.3 用户常用方法解析  227

14.2.4 虚拟模块  230

14.3 加载so的loader功能  231

14.4 本章小结  237

第15章 unidbg源码解析:

Hook  238

15.1 unidbg的Hook框架  238

15.1.1 Hook框架的使用  238

15.1.2 Hook源码分析  243

15.2 Debugger模块解析  245

15.2.1 Console Debugger的

使用  245

15.2.2 Debugger源码分析  246

15.3 本章小结  256

第三部分 模拟执行与补环境实战

第16章 unidbg实战:I/O重定向  258

16.1 分析App的内部逻辑  258

16.1.1 了解App的运行流程  258

16.1.2 Java层逻辑分析  259

16.1.3 so层逻辑分析  262

16.2 unidbg模拟执行分析  267

16.2.1 unidbg模拟执行saveSN()

方法  267

16.2.2 unidbg的I/O重定向  269

16.3 本章小结  272

第17章 unidbg实战:Debugger

自吐  273

17.1 分析App的内部逻辑  273

17.1.1 了解App的运行流程  273

17.1.2 Java层逻辑分析  273

17.1.3 so层逻辑分析  275

17.2 使用unidbg工具进行分析  277

17.2.1 使用unidbg进行模拟

执行  277

17.2.2 使用Debugger模块实现

自吐  281

17.2.3 使用Patch进行自吐  283

17.3 本章小结  286

第18章 unidbg实战:指针参数与Debugger  287

18.1 指针参数的使用  287

18.1.1 对App进行分析  287

18.1.2 使用unidbg进行模拟

执行  290

18.2 快速识别AES算法  295

18.2.1 对App进行分析  295

18.2.2 使用unidbg进行模拟

执行  297

18.3 本章小结  301

第19章 unidbg实战:魔改Base64还原  302

19.1 逆向环境搭建  302

19.2 APK分析  303

19.3 so文件详细分析  304

19.3.1 基本类型手动修改  304

19.3.2 主体代码分析  308

19.4 使用unidbg辅助分析so  309

19.4.1 使用unidbg主动调用

Native层的算法  309

19.4.2 魔改Base64核心步骤

分析  312

19.5 本章小结  321

第20章 unidbg实战:使用unidbg

动态分析内存中的数据  322

20.1 环境搭建  322

20.2 APK基本分析  323

20.2.1 按钮事件分析  323

20.2.2 对输入框的内容进行

判断  325

20.3 使用IDA静态分析so并使用unidbg动态验证  326

20.3.1 静态代码块说明  326

20.3.2 IDA分析  326

20.4 本章小结  337

第21章 unidbg实战:使用unidbg

主动调用fork进程  338

21.1 样本情景复现  338

21.2 样本反编译分析  339

21.3 so中代码的分析  342

21.4 使用unidbg对fork进程中的

函数做处理  350

21.5 本章小结  356

第22章 unidbg补环境实战:

补环境入门  357

22.1 为什么要补环境  357

22.2 unidbg补环境的案例情景

复现  357

22.3 模拟执行so  361

22.3.1 参数获取  361

22.3.2 unidbg代码初始化  362

22.3.3 目标函数的调用  363

22.3.4 补环境说明  363

22.3.5 补环境实战  364

22.4 本章小结  374

第23章 unidbg补环境实战:标识记录  375

23.1 样本一:如何补JNI_OnLoad

环境  375

23.1.1 基本环境搭建  375

23.1.2 运行项目,异常分析  376

23.2 样本二:文件标识的补环境

策略  384

23.2.1 环境搭建  384

23.2.2 文件标识策略  386

23.3 样本总结  395

23.4 本章小结  395

第24章 unidbg补环境实战:设备风控  396

24.1 Android系统API补全策略  396

24.1.1 ActivityThread  398

24.1.2 android_id  399

24.2 目录获取  402

24.3 样本最后一个函数的调用  407

24.4 本章小结  416

第25章 unidbg补环境实战:

补环境加强  417

25.1 上文回顾  417

25.2 样本的框架搭建  417

25.3 补环境实操  420

25.3.1 getApplication环境

补充  420

25.3.2 无障碍服务的补环境  423

25.4 本章小结  437

第26章 unidbg补环境实战:

总结  438

26.1 补环境初始化  438

26.1.1 架构选择  438

26.1.2 进程名称初始化  439

26.1.3 处理器后端的设置  439

26.1.4 Android根目录设置  440

26.1.5 Android虚拟机创建  440

26.1.6 加载so  440

26.2 补环境适用场景  441

26.2.1 unidbg的报错  441

26.2.2 何时补环境  444

26.3 补环境的规范  450

26.3.1 通用规则  451

26.3.2 复杂类型的规则  452

26.4 本章小结  457

第四部分 反制与生产环境部署

第27章 Anti-unidbg系列:环境

变量检测  460

27.1 Linux中的环境变量  460

27.2 Android中的环境变量  462

27.2.1 查看和设置环境变量  462

27.2.2 常见环境变量说明  463

27.3 环境变量源码解析  465

27.3.1 Java层环境变量读取和

设置  466

27.3.2 Native层环境变量读取和

设置  468

27.3.3 情景模拟  469

27.4 unidbg如何设置环境

变量  470

27.5 本章小结  472

第28章 Anti-unidbg系列:xHook检测  473

28.1 xHook的基本使用  473

28.1.1 项目简介  473

28.1.2 项目编译  474

28.1.3 xHook API介绍  476

28.1.4 样本编写  478

28.2 xHook的原理阐述  479

28.2.1 文件编译和测试  479

28.2.2 出现的问题  482

28.2.3 ELF文件格式  482

28.2.4 Linker  486

28.2.5 重定向追踪  487

28.2.6 内存检索  489

28.2.7 跳转验证  491

28.3 xHook检测实现  492

28.3.1 获取ELF文件在内存中的

首地址  493

28.3.2 Linker的复写  495

28.4 unidbg xHook检测  506

28.5 补充Inline Hook检测  508

28.5.1 Inline Hook通用检测

思路  508

28.5.2 Inline Hook模块检测

思路  515

28.6 本章小结  516

第29章 Anti-unidbg系列:JNI层

常见函数处理  517

29.1 FindClass反制策略  517

29.1.1 FindClass介绍  517

29.1.2 FindClass基本使用  521

29.2 methodID反制策略  524

29.3 本章小结  528

第30章 Anti-unidbg系列:unidbg

常规检测总结  529

30.1 检测说明  529

30.2 基地址检测  530

30.3 JNI环境之JNI调用  530

30.4 JNI环境之类检测  530

30.5 文件描述符  532

30.6 uname  532

30.7 运行时间检测  534

30.8 检测Unicorn  534

30.9 本章小结  537

第31章 unidbg生产环境部署  538

31.1 Spring Boot框架的基本使用

方法  538

31.2 Spring Boot和unidbg

结合  542

31.3 unidbg-boot-server简介  548

31.3.1 简介  549

31.3.2 常规配置项说明  549

31.4 unidbg-boot-server项目

实例  549

31.4.1 项目演示  549

31.4.2 添加模拟执行  551

31.5 本章小结  555


了解更多











  • 本文来源:原创,图片来源:原创

  • 责任编辑:王莹,部门领导:宁姗

  • 发布人:白钰

IT阅读排行榜 技术圈的风向标,有趣,有料,有货,有品又有用
评论 (0)
  •   陆地边防事件紧急处置系统平台解析   北京华盛恒辉陆地边防事件紧急处置系统平台是整合监测、预警、指挥等功能的智能化综合系统,致力于增强边防安全管控能力,快速响应各类突发事件。以下从系统架构、核心功能、技术支撑、应用场景及发展趋势展开全面解读。   应用案例   目前,已有多个陆地边防事件紧急处置系统在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润陆地边防事件紧急处置系统。这些成功案例为陆地边防事件紧急处置系统的推广和应用提供了有力支持。   一、系统架构   感知层:部
    华盛恒辉l58ll334744 2025-04-23 11:22 110浏览
  •   卫星通信效能评估系统平台全面解析   北京华盛恒辉卫星通信效能评估系统平台是衡量卫星通信系统性能、优化资源配置、保障通信服务质量的关键技术工具。随着卫星通信技术的快速发展,特别是低轨卫星星座、高通量卫星和软件定义卫星的广泛应用,效能评估系统平台的重要性日益凸显。以下从技术架构、评估指标、关键技术、应用场景及发展趋势五个维度进行全面解析。   应用案例   目前,已有多个卫星通信效能评估系统在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润卫星通信效能评估系统。这些成功案例为卫
    华盛恒辉l58ll334744 2025-04-22 16:34 148浏览
  • 文/Leon编辑/cc孙聪颖‍在特朗普政府发起的关税战中,全球芯片产业受到巨大冲击,美国芯片企业首当其冲。据报道称,英伟达本周二公布的8-K文件显示,美国政府通知该公司向中国(包括中国香港及澳门)销售尖端芯片(H20)时,需要获得美国政府的许可。文件发布后,英伟达预计会在第一季度中额外增加55亿美元的相关费用计提。随后,英伟达股价单日下跌6.9%,市值一夜蒸发约1890亿美元(约合人民币1.37万亿元)。至截稿时,至截稿时,其股价未见止跌,较前日下跌4.51%。北京时间4月17日,英伟达创始人、
    华尔街科技眼 2025-04-22 20:14 105浏览
  •   复杂电磁环境模拟系统平台解析   一、系统概述   北京华盛恒辉复杂电磁环境模拟系统平台是用于还原真实战场或特定场景电磁环境的综合性技术平台。该平台借助软硬件协同运作,能够产生多源、多频段、多体制的电磁信号,并融合空间、时间、频谱等参数,构建高逼真度的电磁环境,为电子对抗、通信、雷达等系统的研发、测试、训练及评估工作提供重要支持。   应用案例   目前,已有多个复杂电磁环境模拟系统在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润复杂电磁环境模拟系统。这些成功案例为复杂电
    华盛恒辉l58ll334744 2025-04-23 10:29 148浏览
  •   电磁频谱数据综合管理平台系统解析   一、系统定义与目标   北京华盛恒辉电磁频谱数据综合管理平台融合无线传感器、软件定义电台等前沿技术,是实现无线电频谱资源全流程管理的复杂系统。其核心目标包括:优化频谱资源配置,满足多元通信需求;运用动态管理与频谱共享技术,提升资源利用效率;强化频谱安全监管,杜绝非法占用与干扰;为电子战提供频谱监测分析支持,辅助作战决策。   应用案例   目前,已有多个电磁频谱数据综合管理平台在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润电磁频谱数
    华盛恒辉l58ll334744 2025-04-23 16:27 141浏览
  •   后勤实验仿真系统平台深度解析   北京华盛恒辉后勤实验仿真系统平台依托计算机仿真技术,是对后勤保障全流程进行模拟、分析与优化的综合性工具。通过搭建虚拟场景,模拟资源调配、物资运输等环节,为后勤决策提供数据支撑,广泛应用于军事、应急管理等领域。   应用案例   目前,已有多个后勤实验仿真系统平台在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润后勤实验仿真系统平台。这些成功案例为后勤实验仿真系统平台的推广和应用提供了有力支持。   一、核心功能   (一)后勤资源模拟
    华盛恒辉l58ll334744 2025-04-23 15:39 110浏览
  • 一、技术背景与市场机遇在智能家居高速发展的今天,用户对家电设备的安全性、智能化及能效表现提出更高要求。传统取暖器因缺乏智能感知功能,存在能源浪费、安全隐患等痛点。WTL580-C01微波雷达感应模块的诞生,为取暖设备智能化升级提供了创新解决方案。该模块凭借微波雷达技术优势,在精准测距、环境适应、能耗控制等方面实现突破,成为智能取暖器领域的核心技术组件。二、核心技术原理本模块采用多普勒效应微波雷达技术,通过24GHz高频微波信号的发射-接收机制,实现毫米级动作识别和精准测距。当人体进入4-5米有效
    广州唯创电子 2025-04-23 08:41 122浏览
  •   无人机结构仿真与部件拆解分析系统平台解析   北京华盛恒辉无人机结构仿真与部件拆解分析系统无人机技术快速发展的当下,结构仿真与部件拆解分析系统平台成为无人机研发测试的核心工具,在优化设计、提升性能、降低成本等方面发挥关键作用。以下从功能、架构、应用、优势及趋势展开解析。   应用案例   目前,已有多个无人机结构仿真与部件拆解分析系统在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润无人机结构仿真与部件拆解分析系统。这些成功案例为无人机结构仿真与部件拆解分析系统的推广和应用提
    华盛恒辉l58ll334744 2025-04-23 15:00 146浏览
  • 故障现象一辆2016款奔驰C200L车,搭载274 920发动机,累计行驶里程约为13万km。该车组合仪表上的防侧滑故障灯、转向助力故障灯、安全气囊故障灯等偶尔异常点亮,且此时将挡位置于R挡,中控显示屏提示“后视摄像头不可用”,无法显示倒车影像。 故障诊断用故障检测仪检测,发现多个控制单元中均存储有通信类故障代码(图1),其中故障代码“U015587 与仪表盘的通信存在故障。信息缺失”出现的频次较高。 图1 存储的故障代码1而组合仪表中存储有故障代码“U006488 与用户界
    虹科Pico汽车示波器 2025-04-23 11:22 77浏览
  •   电磁干扰抑制系统平台深度解析   一、系统概述   北京华盛恒辉电磁干扰抑制系统在电子技术快速发展、电磁环境愈发复杂的背景下,电磁干扰(EMI)严重影响电子设备性能、稳定性与安全性。电磁干扰抑制系统平台作为综合性解决方案,通过整合多元技术手段,实现对电磁干扰的高效抑制,确保电子设备稳定运行。   应用案例   目前,已有多个电磁干扰抑制系统在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润电磁干扰抑制系统。这些成功案例为电磁干扰抑制系统的推广和应用提供了有力支持。   二
    华盛恒辉l58ll334744 2025-04-22 15:27 154浏览
  • 文/Leon编辑/cc孙聪颖‍4月18日7时,2025北京亦庄半程马拉松暨人形机器人半程马拉松正式开跑。与普通的半马比赛不同,这次比赛除了有人类选手,还有21支人形机器人队伍参赛,带来了全球首次人类与机器人共同竞技的盛况。参赛队伍中,不乏明星机器人企业及机型,比如北京人形机器人创新中心的天工Ultra、松延动力的N2等。宇树G1、众擎PM01,则是由城市之间科技有限公司购置及调试,并非厂商直接参赛。考虑到机器人的适用场景和续航力各有不同,其赛制也与人类选手做出区别:每支赛队最多可安排3名参赛选手
    华尔街科技眼 2025-04-22 20:10 99浏览
  • 一、行业背景与市场需求高血压作为全球发病率最高的慢性病之一,其早期监测与管理已成为公共卫生领域的重要课题。世界卫生组织数据显示,全球超13亿人受高血压困扰,且患者群体呈现年轻化趋势。传统血压计因功能单一、数据孤立等缺陷,难以满足现代健康管理的需求。在此背景下,集语音播报、蓝牙传输、电量检测于一体的智能血压计应运而生,通过技术创新实现“测量-分析-管理”全流程智能化,成为慢性病管理的核心终端设备。二、技术架构与核心功能智能血压计以电子血压测量技术为基础,融合物联网、AI算法及语音交互技术,构建起多
    广州唯创电子 2025-04-23 09:06 134浏览
  • 前言本文主要演示基于TL3576-MiniEVM评估板HDMI OUT、DP 1.4和MIPI的多屏同显、异显方案,适用开发环境如下。Windows开发环境:Windows 7 64bit、Windows 10 64bitLinux开发环境:VMware16.2.5、Ubuntu22.04.5 64bitU-Boot:U-Boot-2017.09Kernel:Linux-6.1.115LinuxSDK:LinuxSDK-[版本号](基于rk3576_linux6.1_release_v
    Tronlong 2025-04-23 13:59 96浏览
  • 在科技飞速发展的当下,机器人领域的每一次突破都能成为大众瞩目的焦点。这不,全球首届人形机器人半程马拉松比赛刚落下帷幕,赛场上的 “小插曲” 就掀起了一阵网络热潮。4月19日,北京亦庄的赛道上热闹非凡,全球首届人形机器人半程马拉松在这里激情开跑。20支机器人队伍带着各自的“参赛选手”,踏上了这21.0975公里的挑战之路。这场比赛可不简单,它将机器人放置于真实且复杂的动态路况与环境中,对机器人在运动控制、环境感知和能源管理等方面的核心技术能力进行了全方位的检验。不仅要应对长距离带来的续航挑战,还要
    用户1742991715177 2025-04-22 20:42 94浏览
我要评论
0
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦