跳转至

Windows 软件逆向

开发是先写代码再编译成软件,逆向反过来:到手的只有软件,要从二进制推回它在做什么、改它的行为、或判断某个需求靠改客户端到底能不能成。这个 skill 面向 Windows x86/x64 的本地软件(PE 文件:.exe / .dll / .sys / .msi)。

它最要紧的一点:被写成带门禁的流程,不是建议。因为观察到的失败模式不是无知,是模型读完全文、表示同意、然后仍然凭第一直觉推理 —— 所以每条规则都是动作加通过判据,计划和规则冲突时规则赢,直到有证据推翻。

这一页是概要地图,不是操作手册。 它讲清这个 skill 怎么把问题分类、靠什么纪律收口;真正动手的逐层技术细节和脚本在上游。

它把逆向分成哪些情况

动手前先沿三个轴把目标归位,每个轴都换一套做法,归错不会报错 —— 它产出一个能跑、却做错事的产物。

按目标是什么 —— 决定整条工具链。

目标 换成什么活
原生 PE 反汇编、字节补丁、特征码
托管 .NET CIL 加元数据,十六进制改了没用,走托管工具链
运行时打包(Unity IL2CPP、打包的 Python、Flutter/Dart) 名字和代码常在另一个文件,先认打包器和版本
加壳 / 受保护 先脱壳才谈读代码,有的还被代码虚拟化
驱动 / 内核 用户态工具到边界就停

按行为住在哪一层 —— 决定本地改动能不能成。 客户端逻辑(改得动)· 客户端只负责渲染的服务端数据(改了只是看起来成)· 服务端权威的决定(改不动)。这是这里最贵的错误转向,早点定。

按交付物是什么 —— 决定怎么验证。 磁盘上打补丁的文件 · 内存里的实时补丁 · 独立注册机 · 一份分析报告 —— 四个问题、四套验证,其中一个常常才是诚实的答案。

覆盖的方法层:初筛、等长字节补丁、特征码/AOB、调试与硬件断点、注入与 hook、转储与修复、反分析对抗、授权机制归类、算法恢复、符号执行与脱虚拟化,以及软件工具链替代不了的硬件观测层(指令追踪、硬件断点、hypervisor 辅助)。

它要解决的问题,和收口的纪律

目标只有一句:拿到一个验证过的产物,或一个验证过的结论 —— 避开那一类失败:文件能编、能加载、能跑,然后做错了事。崩溃会自己喊,这类不会,所以它靠一套纪律硬收口:

  • 先把终点写成一句别人能检验的话,每个检查点重读
  • 五道门按序清:交付物形态、宿主能力、代码在哪、基线对照、执行前隔离 —— 每道是动作加判据,「我懂这个思路」不算通过
  • 每条断言带标签:observed(有命令和输出)/ inferred(推理)/ unverified;缺的覆盖是 unknown,不是「不存在」
  • 一次只改一个变量,留一个对照(没改过的原件);不能解释的症状就是停止信号;同一形状失败两次,回去重新分类,不试第三个变体
  • 「完成」有六条(产物带哈希、在指定环境演练过、改的行为验证确实变了、动过的还能用、残留局限带成因、没留在损坏状态);日志干净不算完成

边界

面向你自己的软件、你被授权分析的样本、竞赛沙箱,仅供学习、研究与授权测试。破服务端授权、通用自动脱虚拟化、把「攻破某个具名商业保护」当产品级宣称、对没测过的 Windows 版本作保证 —— 都不在范围,这个 skill 的写法是如实说明并停下。

这里只有地图,引擎在上游

分类和纪律在这页读就够;要真跑(探宿主、读 PE、打补丁、特征码),上游那套才是引擎 —— 约 40 篇逐层技术 reference、17 个脚本约 9000 行、整套测试与 CI 都在那里,这页一样没收。

  • 克隆 https://codeberg.org/reverse-skill-lab/exe-reverse,skill 在 skills/exe-reverse/;脚本在裸 Python 3.10+ 上即可运行
  • 最便宜的第一条命令是 python scripts/doctor.py:一次回答三件事 —— 这台机器支持哪些能力、每个脚本能否原样运行、哪些宿主事实会让实验静默失效;scripts/hwprobe.py 是更深的硬件级探测
  • 脚本在本地跑第三方代码,执行前让用户知情;工具不在 PATH 用 EXEREV_TOOLS 指路

维护记录:从哪来、改了什么。正常使用不用看,出问题再看。