信息收集-小程序应用&逆向反编译&外在抓包&动态调试&自动化提取&主包分包源码
本文最后更新于85 天前,其中的信息可能已经过时,如有错误请发送邮件到184874483@qq.com

信息收集-小程序应用-公开信息-知识产权&平台搜索

模块:信息收集-小程序应用-公开信息-知识产权&平台搜索

模块前置结构

学习目标
  • 掌握将公开数据重新定义为可关联、可分析的信息资产的系统方法。
  • 能够针对目标小程序,界定并构建包含技术构成与实体主体的资产轮廓。
  • 能够解析小程序技术构成要素与其在知识产权、开发平台中的信息关联。
  • 能够建立并执行从多源公开平台定向检索、提取并整合关键信息的操作流程。
  • 能够在授权范围内,综合多源信息形成可用于后续评估阶段的目标信息支撑框架。
重点与难点

核心知识点
本模块的核心在于构建一种系统性思维,将分散于不同公开数据源(如知识产权库、代码托管平台、企业信息公示系统)的孤立信息片段,通过小程序这一载体建立逻辑关联。学习者需要掌握从小程序本身的技术构成(如名称、开发主体、API接口、服务端域名)反向推导其可能存在的知识产权记录(如软件著作权、商标)和平台公开信息(如开发者账号、关联应用),并理解这些信息之间的印证与补充关系。

常见理解误区
学习者常将公开信息收集等同于简单的搜索引擎关键词查询,忽略了垂直领域数据源的结构化价值和关联分析的重要性。另一个误区是未能区分信息的“公开可用性”与“使用合法性”,容易在收集过程中跨越授权边界。本模块旨在纠正这些点,强调在合法合规的前提下,通过系统化方法,将零散数据转化为具有情报价值的目标画像。

模块工程结构

一、模块概念解释

该模块解决的核心问题是如何在授权的安全评估前期,系统化地收集、整合与分析目标小程序在公开领域的相关信息。其在技术体系中的定位是信息收集阶段的关键环节,聚焦于利用知识产权数据库、代码托管平台、应用分发市场及各类公开网络服务中可合法获取的数据,构建目标小程序的初始技术轮廓与实体主体画像。该过程不涉及任何非公开或侵入性的技术手段,完全依赖于对公开信息的深度挖掘与关联分析。

二、技术原理说明

该模块的技术原理基于信息关联与数据聚合。核心机制是“由点及面”和“多源印证”。

底层工作机制:以目标小程序的核心标识(如名称、开发者名称、AppID)为起点,将其作为查询因子,逐一投射到不同的公开数据源中。每个数据源返回的结果集(如软著证书详情、商标注册信息、GitHub仓库、开发者账号下的其他应用)形成新的信息节点。通过提取这些节点中的共性字段(如统一社会信用代码、邮箱域名、联系方式),可以进一步关联到更深层次的信息,逐步丰满目标主体的画像。

关键实现逻辑:关键在于构建一个多维度的查询矩阵。例如:

  1. 主体维度:从小程序“关于我们”页面或官方隐私政策中获取开发公司名称 -> 查询国家企业信用信息公示系统 -> 获得统一社会信用代码(USCC)、法人、经营范围 -> 用USCC反向查询知识产权局,获取该公司名下所有软著和商标。
  2. 技术维度:从小程序运行数据中提取服务端API域名 -> 查询域名WHOIS信息 -> 获得注册邮箱和电话 -> 用邮箱搜索关联的代码仓库账号或开发者论坛帖子;同时执行证书透明度日志查询,发现关联子域名。

下图展示了信息如何从多源数据流向目标资产画像,以及共性字段在关联中的核心作用。

图:信息关联与多源印证原理图

设计权衡:该方法论在可用性上较高,因为所有数据源都是公开的;在复杂度上,信息过载和噪音数据是主要挑战,需要通过严格的字段匹配和逻辑推理进行数据清洗;在准确性上,多源交叉验证是提升信息可信度的关键,单一来源的信息需标记为待核实状态。

三、在系统中的位置

本模块是信息收集流程的中枢环节。它承接了前期的基本信息收集(如通过基础网络搜索获取的小程序名称),并将这些信息作为输入,向下游的深度技术分析(如服务端架构探查、API接口分析)输出结构化的目标信息支撑框架。具体而言,前序模块可能提供了目标小程序的名称为“XX生活”,本模块则通过知识产权搜索,明确了其开发主体为“XX科技有限公司”,并通过平台搜索,发现了该公司名下另一款名为“XX商户版”的应用,从而扩展了评估目标的范围,为后续模块提供了更全面的资产列表。下图直观展示了本模块在整体流程中的桥梁作用。

图:信息收集流程中本模块的定位

四、可执行命令或查询方式

以下命令示例仅用于说明技术原理,需在授权范围内使用。

  • 域名WHOIS查询:获取域名注册信息,用于发现关联邮箱、电话。
  # 语法格式 whois [域名]
  # 示例:查询测试站点域名信息
  whois scanme.nmap.org
  # 示例:查询本地测试环境关联域名(假设)
  whois example-vuln-app.com
  • DNS枚举与解析:获取子域名或解析记录,用于发现更多测试目标。
  # 使用dnsrecon进行基础枚举(需提前安装)
  # 语法格式 dnsrecon -d [域名] [补充说明:在实际使用中,可根据需求添加其他参数,如用于枚举的字典文件。依据:dnsrecon手册]
  # 示例:对测试域名进行基础DNS信息收集
  dnsrecon -d vulnweb.com
  • 证书透明度日志查询:通过证书日志查找关联的域名和子域名。
  # 使用curl访问crt.sh查询接口
  # 语法格式 curl -s "https://crt.sh/?q=[域名或组织名]&output=json"
  # 示例:查询与testphp.vulnweb.com相关的证书
  curl -s "https://crt.sh/?q=%.vulnweb.com&output=json" | jq .
五、工具对比表

除了命令方式,使用专业工具能更高效地获取信息。下表对比了常用工具的特点。

工具适用场景优点局限性与行业标准符合度
WHOIS命令行快速获取单个域名的注册信息。系统内置或易安装,结果原始、全面。输出格式不统一,需人工解析;部分域名开启了隐私保护。高,是获取域名信息的标准协议工具。
crt.sh 网站/API通过证书透明度日志发现目标域名相关的子域名。数据源权威,覆盖面广,可获取历史证书信息。查询结果可能包含大量无关或过期的证书,需过滤。高,是查询证书日志的公认公共平台。
国家企业信用信息公示系统核实目标企业官方注册信息,获取统一社会信用代码等。官方权威数据源,信息准确可靠。仅限中国大陆企业,验证码和查询频次可能受限。极高,是企业主体信息的官方发布平台。
中国版权保护中心查询目标软件著作权和版权信息。官方数据源,是确认软件原创性和开发时间的重要依据。检索功能相对基础,数据更新可能存在延迟,需官网查询。此外,小程序本身不属于知识产权保护客体,需查询其背后的软件著作权。极高,是知识产权信息查询的法定机构。
GitHub 代码搜索搜索目标相关的代码片段、开发者信息或泄露的配置。数据量大,可能发现意外信息(如注释中的凭证)。信息噪音大,需精确构造搜索语法,结果有效性依赖判断。高,是开源软件开发与协作的行业标准平台。
六、标准操作步骤

基于上述工具,我们可以按照以下系统化流程收集信息。下图概括了六个核心步骤及其顺序。

图:知识产权与平台信息收集标准操作流程

下面对每个步骤进行详细解释:

定义初始资产锚点:从目标小程序本身提取关键标识。包括:应用名称、AppID、开发者显示名称、服务端API域名(可通过抓包分析获得,如api.vulnweb.com)。

主体信息定向检索:使用上一步获得的“开发者显示名称”或从服务条款、隐私政策页面提取的公司全称,查询国家企业信用信息公示系统。记录下:统一社会信用代码(USCC)、法定代表人、注册资本、经营范围、主要人员信息。

知识产权信息交叉查询:将步骤二获得的“公司全称”和USCC作为关键字,访问中国版权保护中心中国商标网等官方平台。查询该公司名下登记的所有软件著作权、作品著作权及商标信息。重点关注与目标小程序功能相似的其他应用或服务的软著。补充说明:需要注意,小程序本身不属于知识产权保护客体,此处查询的是支撑其运行的软件代码所对应的软件著作权。若查询不到,可能的原因是软件著作权以股东或法人个人名义申请。依据:国樽律所文章

技术资产信息扩展:使用步骤一获得的“服务端API域名”,执行WHOIS查询和证书透明度日志查询。记录WHOIS信息中的注册邮箱、联系电话。记录证书日志中所有关联的二级域名和子域名,这些可能是目标小程序的后台管理系统或未公开的API接口。

开发关联信息挖掘:将步骤一、二、四中收集到的独特字段(如特定邮箱前缀、公司英文名、开发者ID)作为关键词,在代码托管平台(如GitHub、Gitee)进行搜索。查找是否存在相关代码仓库、开发人员个人资料或历史提交记录。这些信息可能暴露内部项目结构或测试代码。

信息归并与初步验证:将所有步骤中收集到的信息汇总到一个结构化文档中(如表格或思维导图)。对存在矛盾或疑问的信息进行标记。例如,若WHOIS邮箱与工商信息中的邮箱不一致,应标记为待验证点。通过不同来源(如知识产权信息与工商信息中的地址比对)对关键字段进行交叉验证。

七、如何验证结果真实性

收集信息后,必须验证其真实性,以确保结论可靠。验证的核心逻辑是多源交叉印证。单一来源的信息仅作为线索,当两个或以上相互独立的数据源提供的信息指向同一结论时,该结论的真实性会显著提升。下图展示了这一基本原理。

图:多源交叉验证原理图

  • 输出判断依据
  1. 主体关联验证:从工商系统获取的USCC与知识产权局软著证书上的USCC一致,则可高度确信该公司是这些软件的权利人。
  2. 资产归属验证:从证书日志发现的子域名admin.vulnweb.com,其对应的IP地址通过IP反查域名,结果同样指向vulnweb.com相关的域名,并且该IP的WHOIS信息与vulnweb.com的WHOIS信息中组织机构名称吻合,则可基本确认该资产归属于目标。
  3. 信息有效性验证:在GitHub上搜索到的疑似配置代码段,其中包含的域名与步骤一中收集的API域名相同,那么这段代码与目标相关的可能性就极大。
八、常见错误与排查方式

实际操作中可能遇到各种问题,了解常见错误及排查方法有助于提高效率。

  • 配置错误/理解误区:误以为所有公开信息都必然真实有效。例如,WHOIS信息中的邮箱可能是代理注册商的隐私保护邮箱,而非真实开发者邮箱。
  • 排查方式:对于隐私保护的WHOIS信息,可尝试通过其提供的匿名转发邮箱或注册商提供的联系方式进行联系(仅限授权场景),或放弃该线索,转向其他数据源。
  • 常见失败原因:在知识产权平台查询时,因企业名称中包含特殊字符(如括号、·)导致查询无结果。
  • 排查方式:尝试使用企业名称的核心关键词(如去除地域名、去掉有限公司后缀)进行模糊查询,或使用USCC进行精确查询。
  • 理解误区:认为找到的所有关联资产都在本次评估范围内。
  • 排查方式:必须严格依据授权书确定的范围。例如,通过证书日志发现的目标IP地址上运行着另一个不相关的小程序,但只要该IP属于授权范围内的资产,其运行的服务仍需纳入评估考量,但需明确其关联性。
九、合规边界说明

在整个过程中,必须始终遵循合规要求,确保操作在授权范围内。

  • 使用范围:本模块所述方法仅适用于经过合法授权的安全评估、渗透测试或红蓝对抗演练的前期信息收集阶段。所有查询操作均针对公开可访问的数据源。
  • 风险限制:严禁将收集到的信息用于任何非法目的,如骚扰、诈骗、恶意竞争。在信息收集过程中,应避免对目标系统进行高频次、大规模的自动化查询,以免对目标或第三方平台造成不必要的负担,这可能被误解为拒绝服务攻击。
  • 安全边界:明确“公开信息”与“非公开信息”的界限。本模块严格限定于前者。任何尝试通过暴力破解、社会工程学或利用平台漏洞获取非公开数据的行为,均已超出本模块的合规边界。
十、本模块阶段性总结

完成信息收集后,我们总结本模块的核心价值。本模块的系统性方法,其核心工程价值在于将无序的公开数据转化为有序的、可验证的目标信息资产。它不仅仅是信息罗列,而是通过建立数据间的关联,构建起一个关于目标小程序及其背后实体的立体化初步画像。该画像包含了技术资产清单、组织架构线索和人员信息,为下一模块“小程序应用深度分析”提供了精准的入口点与丰富的上下文信息,使得后续的技术探查能够有的放矢,极大地提升了整个评估流程的效率与准确性。

十一、关键术语

为便于理解,以下列出本模块涉及的关键术语。

OSINT (Open Source Intelligence)
: 公开源情报,指从公开可获取的信息中合法收集、分析并利用情报的过程。

WHOIS
: 一个用于查询域名注册信息(如注册人、联系方式、注册商、注册日期)的协议和数据库。

Certificate Transparency (CT) Logs
: 证书透明度日志,是一个公开的、可审计的日志系统,用于记录所有颁发的SSL/TLS证书,可用于发现与目标关联的域名。

Unified Social Credit Code (USCC)
: 统一社会信用代码,是中国大陆法人和其他组织的唯一法定身份识别码,是关联不同数据源的关键字段。

Software Copyright
: 软件著作权,指软件的开发者或者其他权利人依据有关著作权法律的规定,对于软件作品所享有的各项专有权利。在中国,是确认软件权利归属的重要法律证明。

Asset Profiling
: 资产画像,指通过收集和分析各类信息,为目标系统或个人构建一个全面的、多维度的描述性模型。

十二、思考与练习

通过以下练习巩固所学知识。

  1. 配置分析题:假设在一次授权测试中,你从小程序的调试信息中发现了服务端域名 api.sample-test.com。请详细描述你将如何利用本模块所学知识,通过WHOIS、证书透明度和代码托管平台,尝试发现与该目标关联的其他技术资产(如子域名、测试环境),并说明每一步的目的。
  2. 结果判断题:你在国家企业信用信息公示系统中查到“XX科技有限公司”的USCC为 A。随后在中国版权保护中心查询该公司名下的软件著作权,发现一份证书上的软件名称与你正在测试的小程序高度相似,但该证书上显示的权利人USCC为 B。请分析可能的原因有哪些?你将如何进一步验证该小程序与“XX科技有限公司”的真实归属关系?补充说明:可能的原因包括该软著是以公司股东或法定代表人个人名义申请的。依据:国樽律所文章
  3. 技术方案选择题:在信息收集过程中,你发现目标小程序开发者的邮箱 dev@example.com 在GitHub上有提交记录。你的目标是确认该开发者是否还参与了其他可能属于目标公司的项目。以下哪种方案最有效且合规?并简述理由。
    A. 直接向该邮箱发送邮件询问其所有项目。
    B. 在GitHub上搜索该邮箱地址,并分析搜索结果中的仓库和提交记录。
    C. 尝试用该邮箱密码进行常用平台登录测试。

信息收集-小程序应用-资产信息-抓包&提取&动态调试

信息收集-小程序应用-资产信息-抓包&提取&动态调试

模块前置结构

学习目标

完成本模块的学习后,学习者将能够:

  • 掌握小程序在运行态下的资产存在形式与静态代码包中的差异。
  • 构建从动态运行的复杂环境中系统化剥离目标资产信息的分析框架。
  • 运用网络抓包与动态调试技术,协同定位并提取小程序运行时的关键数据。
  • 区分动态提取过程中产生的有效资产与临时运行噪声。
  • 制定针对特定小程序应用进行动态资产信息收集的标准操作路径。
重点与难点

核心知识点
本模块的核心在于构建“运行态认知框架”,将小程序的资产信息从“代码文件”的概念中解放出来,视为“运行时数据流”与“内存对象”的集合。技术原理部分将重点剖析小程序双线程架构对资产加载、通信和存储的影响,并阐明网络拦截与JavaScript动态调试在提取这些运行时资产时的互补关系。最终目标是建立一套可复现的方法论,指导学习者从流量和内存中系统性地定位并提取关键资产。

常见理解误区
常见的误区在于将小程序资产信息收集等同于简单的“抓包”,忽视了小程序前端代码在本地运行时动态生成、解密或组装资产的过程。另一个误区是混淆了运行时临时缓存与持久化存储的资产,导致提取的信息过时或无效。此外,对小程序特有的通信协议(如HTTPS/WebSocket)和数据结构(如protobuf、序列化对象)缺乏认知,使得即使捕获了流量也无法有效解析出有意义的资产信息。

模块工程结构

一、模块概念解释

本模块旨在解决一个核心问题:如何从正在运行的小程序运行环境中,获取那些并未以明文形式存在于静态代码包中,或仅在运行时动态产生、加载、解密的资产信息。

在技术体系中,该模块定位于“动态信息收集”阶段。它衔接了“静态代码分析”与“业务逻辑深度分析”。静态分析只能揭示代码的结构和部分硬编码信息,而动态提取则能捕获真实运行时产生的数据,如:

  • 动态请求接口:根据运行时状态(如用户登录、地理位置)构造的API请求路径和参数。
  • 运行时敏感数据:从服务器返回的、或由前端动态计算生成的Token、Session Key、加密密钥片段、用户隐私数据等。
  • 内存中的明文信息:在代码中被加密存储但在运行时因解密操作而短暂存在于内存中的敏感字符串。
  • 实时通信数据:通过WebSocket等长连接传输的实时数据流。

理解这些动态资产的类型后,需要探究其背后的技术原理,以便掌握提取方法。

二、技术原理说明

本模块的技术核心在于理解和利用小程序的双线程架构及其通信机制。(注:以下关于双线程架构的描述已根据微信官方文档修正和补充。)

底层工作机制

小程序运行环境通常由两个独立的线程组成:渲染线程(Webview)和逻辑线程(JsCore或V8等JavaScript引擎)。逻辑线程负责处理业务逻辑、API调用和数据请求,渲染线程负责页面渲染。这两个线程通过 JSBridge 或类似的桥接层进行通信。通信时,数据(如通过 setData 传递的)会被序列化为字符串进行传递。

小程序双线程架构与数据流示意图

关键实现逻辑
  • 网络拦截:通过在设备或代理服务器上配置SSL证书,对小程序的所有进出流量进行中间人代理解析。这可以捕获 wx.request 发出的HTTPS请求和响应体,以及WebSocket的通信帧。
  • 动态代码注入与Hook:利用调试工具(如Chrome DevTools for 小程序)或框架提供的调试能力,在逻辑线程的JavaScript执行环境中注入断点或日志。其核心是Hook关键函数,如 wx.request 的成功回调、setData 方法、数据存储API(wx.setStorage)等,在函数被调用时,拦截并输出其参数或堆栈信息,从而观察资产的实时流向和内容。
设计权衡
权衡维度抓包技术动态调试技术
性能影响对小程序运行时性能影响极小,仅在网络层进行数据镜像。设置断点会暂停JS线程执行,对运行时性能影响显著。
数据完整性能完整捕获网络通信层的所有原始数据,包括加密流量。能捕获内存层面的数据,包括解密后、组装中的信息。
复杂度环境配置相对简单(如代理设置、证书安装)。需要理解小程序调试协议,并具备在复杂异步逻辑中定位关键点的能力。
可用性无法获取非网络传输的内部数据,如本地缓存。可以访问几乎所有的运行态数据,但操作复杂度高。

基于上述原理,我们可以在整体技术体系中定位本模块的作用。

三、在系统中的位置

  • 与前序模块的衔接:本模块建立在已完成的小程序静态代码分析基础之上。静态分析提供的代码结构、API列表、关键词等信息,为动态抓包和调试提供了精确的“狩猎目标”。例如,静态分析中发现的疑似加密函数或敏感API调用,将成为动态调试中断点的首选位置。
  • 与后序模块的衔接:本模块输出的动态资产信息(如真实的API请求格式、动态Token、服务器返回的数据结构)将作为下一阶段“业务逻辑与API安全分析”的核心输入。这些信息帮助后续分析人员理解业务的真实数据流转,从而更准确地识别授权、越权、数据泄露等深层次问题。

明确模块定位后,接下来介绍具体操作中可用的命令和工具。

四、可执行命令或查询方式

以下命令或查询方式用于辅助资产信息提取,均在指定的安全测试环境中演示其技术原理。

  1. 配置代理以捕获流量 # 示例:在Android模拟器或设备上设置代理,指向本机的抓包工具监听端口(如 8080) # 此操作不涉及攻击,仅用于将流量导向分析工具。 # 命令格式为设置全局HTTP代理。 adb shell settings put global http_proxy 192.168.1.100:8080
  2. 启动带调试模式的小程序(以OWASP Juice Shop为例) # 启动一个基于Chromium的调试实例,用于附加到小程序逻辑层 # 路径需替换为对应小程序框架的调试工具路径,例如微信开发者工具的命令行调用。 # /path/to/wechat_devtools --remote-debugging-port=9222 /path/to/project
  3. 在调试控制台Hook敏感函数
    javascript // 在调试工具的Console面板中执行,用于拦截 wx.request 的调用和响应 // 此代码用于技术理解,展示如何观察函数调用。 // 注意:由于wx.request属性是仅包含getter的访问器属性,直接赋值会失败,需使用Object.defineProperty。 const originalRequest = wx.request; Object.defineProperty(wx, 'request', { configurable: true, enumerable: true, writable: true, value: function(options) { console.log('[Hook] wx.request called with:', options); const originalSuccess = options.success; options.success = function(res) { console.log('[Hook] wx.request response:', res); if (originalSuccess) { originalSuccess(res); } }; return originalRequest.call(this, options); } });
    (注:修正了Hook脚本的实现方式。原示例直接对wx.request赋值会失败,因为该属性被设计为不可写。修正后的代码使用Object.defineProperty并设置writable: true来实现正确的Hook,此技术源于对小程序API监控原理的分析。)

掌握这些命令后,可以通过工具对比选择合适的辅助工具。

五、工具对比表

工具适用场景优点局限性与行业标准符合度
Burp Suite全面分析HTTPS流量,重放请求,构造测试用例。业界标准,功能强大,支持拦截、修改、重放、扫描。对WebSocket支持较弱,无法直接调试小程序JS逻辑。高,是Web流量分析的事实标准。
Chrome DevTools动态调试小程序逻辑层JS代码,查看console日志,分析内存。直接集成于浏览器或调试工具,可深度观察JS运行时状态。需要找到并附加到小程序的调试端口,配置相对复杂。高,是Web前端调试的行业标准。
Proxifier / Charles全局流量转发,捕获非HTTP代理流量,或分析Socket通信。能够转发操作系统的所有TCP/UDP流量,不局限于HTTP代理。配置复杂,对HTTPS流量的解析需要安装根证书。中,属于系统级网络代理工具,通用性强。
微信开发者工具开发和调试阶段的小程序分析。官方工具,集成了代码查看、模拟器、网络面板和调试器。仅适用于开发者工具中运行的小程序,无法用于真机环境。高,特定于微信小程序生态的开发调试工具。

选定工具后,遵循标准操作步骤即可开始动态资产提取。

六、标准操作步骤

步骤一:环境准备与流量代理配置
搭建可拦截并解析HTTPS流量的中间人代理环境(如Burp Suite)。在测试设备(真机或模拟器)上安装代理的CA证书,并将网络代理指向代理工具监听地址,确保所有小程序网络请求可被明文查看。(注:对于PC端微信小程序,由于其可能不遵循系统代理,可使用Proxifier等工具进行强制流量转发。)

步骤二:静态分析先行,确定监控目标
对目标小程序的静态代码包进行初步分析,提取关键信息,如:API域名、URL路径关键词(如/api/user/info)、敏感参数(如tokenuid)、可疑的加密函数名或存储API(wx.setStorageSync)。

步骤三:启用动态调试,挂载到逻辑进程
根据目标小程序运行的环境(如Android/iOS模拟器、特定调试工具),开启远程调试端口。使用支持Chrome DevTools的浏览器或客户端连接到该端口,找到小程序的逻辑层Webview并打开调试面板。

步骤四:执行功能操作,同步捕获与拦截
在目标小程序中执行关键功能(如登录、查询、支付)。同时,观察抓包工具中捕获的流量,根据步骤二确定的目标进行过滤,记录所有相关的HTTP/HTTPS请求与响应。对于无法直接解析的请求体或响应体(如二进制、加密数据),进行标记。

步骤五:动态调试,Hook关键函数与断点分析
在Chrome DevTools中,切换到Sources面板,根据步骤四中发现的加密或混淆数据,在相关的JS文件中设置断点。或者,在Console面板执行Hook脚本(如修正后的wx.request Hook代码),拦截 wx.request 的调用和回调,观察数据在发送前和接收后的明文状态。同时,在Console中执行 wx.getStorageInfowx.getStorageSync 等命令,查看本地存储中是否留有资产信息。

步骤六:信息关联与结构化输出
将步骤四抓包获取的原始流量数据与步骤五动态调试获取的内存明文数据进行关联比对,还原资产的完整形态。例如,将抓包看到的加密响应体,与调试时Hook到的解密后数据(或在解密函数处断点获得的数据)进行对应,形成一条完整的资产信息记录(如API地址、请求参数、原始响应、解密后数据)。将所有收集到的资产信息整理成结构化文档。

动态资产提取标准操作流程图

完成信息收集后,需要验证所获资产的真实性。

七、如何验证结果真实性

  • 验证逻辑:采用“交叉验证”原则。通过两种或以上相互独立的途径获取同一份资产信息,如果信息一致,则其真实性较高。
  • 输出判断依据
    1. 一致性校验:将通过抓包工具从网络层获取的响应数据,与通过动态调试在 wx.requestsuccess 回调中断点看到的 res.data 进行比对。两者内容应完全一致。如果抓包数据是加密的,而调试数据是解密的,则解密后的数据即为有效资产。
    2. 可复现性校验:清除小程序数据或重启应用后,再次执行相同的操作步骤,若能再次捕获到相同或符合逻辑变化的资产信息,则证明该信息是程序运行的必然产物,而非偶然出现。
    3. 因果关联校验:在调试工具中修改变量值或手动调用存储API,然后观察是否会影响小程序的后续行为或界面展示。例如,手动修改 wx.getStorageSync('user_token') 的返回值后刷新页面,若页面展示的用户信息发生变化,则证明该Token是真实有效的资产。

资产真实性交叉验证逻辑图

验证过程中可能遇到问题,可参考常见错误排查。

八、常见错误与排查方式

  • 错误一:抓包工具无法解析HTTPS流量
    • 原因:测试设备未正确安装或信任抓包工具的CA证书;小程序使用了证书固定(Certificate Pinning)技术。
    • 排查方式:检查设备证书管理器中是否已安装并启用代理证书。若安装了证书仍无法解析,则可能存在证书固定,需要结合动态调试,在代码中定位并分析证书校验逻辑。
    • (注:绕过证书固定属于高级技术,可能涉及Hook证书验证函数,必须在法律允许的授权测试范围内进行,且成功率取决于具体的实现方式。)
  • 错误二:Chrome DevTools无法找到小程序的调试上下文
    • 原因:未正确配置远程调试端口;小程序运行在真机而非模拟器/调试工具中,导致端口未暴露;连接到了错误的页面。
    • 排查方式:确认启动调试工具时使用了正确的 --remote-debugging-port 参数。在 chrome://inspect 页面中,检查 “Discover network targets” 配置的IP和端口是否正确。确保目标小程序页面处于活跃状态(前台运行)。
  • 错误三:Hook脚本无效或报错
    • 原因:Hook脚本执行的时机太晚,目标函数已经被调用过;Hook的函数名错误(如小程序API有版本差异);小程序的逻辑层执行环境不支持某些ES6特性;未正确处理访问器属性。
    • 排查方式:在应用启动的早期阶段(如在 App.js 或首个页面的 onLoad 生命周期开始前)注入Hook脚本。确认API名称(如 wx.request )是否正确,并使用Object.getOwnPropertyDescriptor检查其属性描述符。简化脚本,使用基础JavaScript语法,避免使用高版本特性。

所有操作必须在合规范围内进行。

九、合规边界说明

  • 使用范围:本模块所述技术方法,仅限用于安全测试人员对已获得合法授权的目标小程序进行安全评估,或用于开发者在调试自有应用时进行问题排查。
  • 风险限制:动态调试和抓包操作可能干扰目标小程序的正常运行,导致程序崩溃或数据异常。对生产环境下的应用进行此类操作需格外谨慎,并评估潜在影响。
  • 安全边界:严禁将本模块所述技术用于任何未经授权的应用。对捕获的流量数据和内存信息,必须遵守《网络安全法》及相关隐私法规,严格保护其中可能包含的用户个人隐私和商业敏感信息,不得泄露、滥用或用于非法目的。

总结本模块的核心价值,并明确后续学习方向。

十、本模块阶段性总结

本模块在技术体系中的核心工程价值在于,建立了一套从动态运行环境中系统化提取资产信息的方法论。它超越了静态代码分析的局限性,使学习者能够捕获真实、鲜活、与业务逻辑紧密耦合的运行时资产。通过整合网络抓包与动态调试两种互补技术,本模块构建了一个完整的“运行时数据观察窗”,为后续深层次的业务逻辑分析和安全风险识别奠定了坚实的数据基础。

本模块与下一模块“业务逻辑与API安全分析”的衔接关系在于:本模块产出的结构化动态资产信息(如真实的API请求链、动态令牌生成规则、敏感数据流经的组件)将成为下一阶段分析的直接对象。下一阶段将基于这些信息,绘制完整的业务数据流转图,并开始分析其中可能存在的逻辑缺陷和权限绕过风险。

十一、关键术语

双线程架构
: 小程序的一种典型运行模型,将页面渲染(渲染层)与逻辑执行(逻辑层)分离在两个独立的线程中,以提高性能与安全性。

中间人代理
: 一种网络技术,通过在客户端和服务器之间设置一个代理点,来拦截、查看或修改双方通信的数据。在安全测试中常用于分析加密流量。

动态调试
: 通过将程序暂停在运行状态,观察其内存、变量、调用栈等信息,以分析程序行为的技术。

Hook
: 一种技术,用于拦截并修改软件或操作系统原有的函数调用、消息或事件,从而改变或监控程序的执行流程。

运行时资产
: 指在应用程序运行期间才产生、加载、解密或存在于内存中的信息,而非静态存储在代码包或文件系统中的数据。

证书固定
: 一种安全机制,应用在发起HTTPS连接时,会验证服务器返回的证书是否与应用内预先捆绑(固定)的证书或公钥一致,以防止中间人攻击。

十二、思考与练习

  1. 配置分析题:在针对本地部署的DVWA进行信息收集时,你通过Burp Suite设置了代理,并成功安装了CA证书,但只能看到CONNECT请求,无法查看具体的HTTP请求头和请求体。请分析可能的原因是什么?应如何调整配置以解决问题?
  2. 结果判断题:假设你在分析一个本地运行的OWASP Juice Shop小程序版。在动态调试中,你在 wx.setStorageSync 函数上设置了断点,当执行“登录”操作后,断点触发,你发现存入缓存的数据是 user_data: "7b226964223a3132337d"。请判断这是否是一项有价值的资产?如果是,下一步你打算如何处理这条信息?
  3. 技术方案选择题:你需要为一个运行在Metasploitable2虚拟机上的Web应用收集动态资产信息。该应用的关键接口返回的数据经过了某种自定义的Base64编码后再进行传输。为了最高效地获取解码后的真实数据,你应该优先选择以下哪种方案?并说明理由。
    A. 仅使用Burp Suite,手动复制响应体到外部工具解码。
    B. 仅使用浏览器开发者工具,在网络面板中查看响应,并手动解码。
    C. 结合使用Burp Suite拦截响应,并编写一个Burp扩展插件自动解码并展示。
    D. 在浏览器开发者工具中定位到处理该响应的JavaScript代码,设置断点,在数据解码后观察其内容。

参考与进一步阅读

微信官方文档 – 小程序运行环境
微信官方文档 – Skyline渲染引擎(含双线程模型说明)
IETF RFC 2818 – HTTP Over TLS
Burp Suite 官方文档
Google Chrome DevTools 官方文档

文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇