Five Reverse Engineering Tools, From Screenshot to Machine Code
Title: 拆开别人的软件来看,推荐5个主流逆向工具 Author: 狂师 Tags: 开源, 程序员, 安全
今天给大家分享 5 个主流的逆向工具,这 5 个正好从浅到深各管一段,从截图反推页面代码,到拦下流量看接口,再到拆 APK、读回 Java 源码,最深的直接啃机器码。测试同学抓包排障、看闭源 SDK、做安全分析,总有一个在后续某天工作上能用得上。
screenshot-to-code:截图生码
先看最浅的一层,不碰安装包,光看脸。
严格讲 abi/screenshot-to-code 不算传统逆向工具,但它干的事就是逆向的第一步,给你一个成品界面,把背后的实现反推出来。截图、设计稿、Figma、甚至一段操作录屏丢进去,出来一套能跑的前端代码,8 万 star,2023 年 11 月开源,到现在还在活跃更新。

上面是 README 里的 NYTimes 例子,上原图下复刻,拿到的是一套真的能跑的 HTML。

它的实测能力比看起来还要更牛X:
- 六种技术栈输出,HTML+Tailwind、HTML+CSS、React、Vue、Bootstrap、Ionic
- 录屏也能转,把一段网站操作录下来直接生成可交互原型
- 一次生成可以并排对比多个模型,GPT-5.5、Claude Opus 4.8、Gemini 3 同台跑,哪个好用留哪个
- 页面里的 logo 和图片不是模型瞎画的,走资产抽取直接从截图里抠出来复用
仓库地址:
https://github.com/abi/screenshot-to-code
安装方式,有 Docker 两条命令就够,至少配一把模型 key,OpenAI、Anthropic、Gemini 三选一:
echo "OPENAI_API_KEY=sk-your-key" > .env
docker-compose up -d --build
装好浏览器打开 http://localhost:5173 ,左边传截图右边收代码。不想搭环境,官方托管版 https://screenshottocode.com 直接用。
💡 小提示:
- 复刻页面做学习练手、做视觉回归基线没问题,商用别人的设计记得掂量版权;
- 想搞明白「这个效果是怎么实现的」,它比翻别人源码快得多。
mitmproxy:抓接口
第二层,网络层。一个软件在你手机上跑起来,眼睛看不见的地方一直在跟服务器说话,接口长什么样、传了什么参数、返回什么,全在流量里。mitmproxy/mitmproxy 就是在中间架一台代理,把这些对话全部拦下来,TLS 加密的也照拦,4.6 万 star,2010 年开源,到现在十六年还在持续更新,Python 抓包生态里的活化石。

它一张脸三副面孔,装的是一个包,出来的是三个命令:
mitmproxy,终端里的交互界面,方向键在请求列表里翻,回车进详情,能改包能重放mitmdump,命令行版本,官方一句话介绍是「HTTP 界的 tcpdump」,适合挂脚本自动化跑mitmweb,网页版界面,浏览器里看流量

抓 HTTPS 靠的是标准的中间人做法,它在本地签一张 CA 证书,你把证书装进系统、代理指向它的 8080 端口,加密流量到它手里先解开再转发。看真实请求、录制回放、改参数复现 bug,都是它的日常。
仓库地址:
https://github.com/mitmproxy/mitmproxy
官网:https://mitmproxy.org
安装方式,当前版本 12.3.1:
# macOS
brew install mitmproxy
# 任何有 Python 的机器
pipx install mitmproxy
装好之后终端敲 mitmproxy,代理就开在 8080。手机 Wi-Fi 代理指过来,浏览器访问 mitm.it 装证书,流量就进来了。
💡 小提示:
- 接口测试拿它干三件事,看真实请求长什么样、把线上接口录下来回放、写 addon 脚本自动改包;
- 图形界面党用 Reqable 这类工具更顺手,要挂进 CI、脚本化批量跑,mitmproxy 没有对手。
Apktool:拆包
第三层,拆包 Android。APK 本质是个 zip 压缩包,但直接解压出来你什么也看不懂,清单和资源全是编译过的二进制。Apktool 干的就是把这层壳规范地拆掉,2.6 万 star,作者 Connor Tumbleson 从 2012 年维护到现在,Android 逆向圈的入场券。

拆开之后你拿到的是能看、能改、还能装回去的源文件:
- 资源还原到接近原始形态,
AndroidManifest.xml和resources.arsc解码成人读的格式 - 代码拆成 smali,就是 Dalvik 字节码的可读形式,支持单步调试
- 拆完改完一条命令重新打包成 APK
- 汉化、本地化、给老应用做平台适配,是它文档里列的正经用途
仓库地址:
https://github.com/iBotPeaches/Apktool
官网:https://apktool.org
安装方式,当前 3.x:
brew install apktool
Windows 和 Linux 用官网的 wrapper 脚本,Java 8 以上就能跑。装好拆一个试试:
apktool d app.apk
当前目录会摊开一个同名文件夹,清单、资源、smali 全在里面。改完装回去,apktool b 文件夹名。
💡 小提示:
- smali 读起来费劲,只想看 Java 代码的直接用下面的 jadx。两个经常搭配,Apktool 管资源和重打包,jadx 管读代码;
- README 里明确写了不支持盗版用途,只拆自己有权拆的。
jadx:反编译
第四层。Apktool 拆出来的 smali 忠实但难读,毕竟还是字节码。skylot/jadx 再往前一步,把 dex 直接反编译回 Java 源码,5.1 万 star,Android 安全圈的标配,2013 年开源维护至今。
- 输入几乎什么都吃,APK、dex、aab、xapk,连 jar 和 class 也能反
- 反出来的 Java 代码带语法高亮,GUI 里跳转声明、查找引用、全文搜索都有
- 自带反混淆,混淆成 a、b、c 的名字能部分还原
- 附带 smali 调试器,能打断点单步
README 顶部挂着一条警告,大多数情况下它没法 100% 反编译,遇到报错看官方的 Troubleshooting 指南。反编译本来就不是无损的,心里有数就行。

仓库地址:
https://github.com/skylot/jadx
安装方式:
brew install jadx
或者从 GitHub Releases 下 jadx-<version>.zip 解压,bin 目录里 jadx 是命令行、jadx-gui 是图形界面,需要 64 位 Java 11 以上。装好最常用的就一条:
jadx-gui app.apk
拖进来左边资源树右边 Java 代码,按住 Ctrl 点方法名就能跳过去逛。
💡 小提示:
- 测试同学拿它看闭源 SDK 到底收集了什么、埋点上报了哪些字段,比等厂商文档靠谱;
- 混淆重的包反出来变量名还是 a.b.c,配合它自带的反混淆和全文搜索用。
Ghidra:二进制逆向
最后一层,也是最深的。没有源码、没有字节码,手上只有一个 exe 或者一个 so,想知道它到底干了什么,这是 Ghidra 的地盘。

NationalSecurityAgency/Ghidra,美国国家安全局研究理事会出品,2019 年在 RSA 大会上开源,内部锤炼多年的逆向框架直接放了出来,9.5 万 star,是这 5 个里分量最重的,最新版 12.2 上周刚发布。
- 反汇编加反编译,机器码翻回汇编,还能再往上翻成类 C 的伪代码
- 支持的处理器指令集和可执行格式一长串,Windows、macOS、Linux 的程序都吃
- 能人在 GUI 里交互分析,也能写脚本全自动批量跑
- 插件和脚本用 Java、Python 写,生态里现成的扩展一抓一把
安全研究员拿它分析恶意样本、挖漏洞,CTF 逆向题的事实标准。做测试平时用不上这层,但知道它在那,安全测试的深水区就算摸到门了。
仓库地址:
https://github.com/NationalSecurityAgency/ghidra
安装方式,先装 JDK 25 的 64 位版本,再从 GitHub Releases 下载官方 zip(认准 ghidra_<版本>_<build>_<日期>.zip,别下成 Source Code),解压后:
./ghidraRun
Windows 跑 ghidraRun.bat。装好新建工程导入一个 exe,先让它自动跑一遍分析,完了在 CodeBrowser 里看反汇编和伪代码。
💡 小提示:
- 吃内存,小机器跑大样本会卡,工程目录别放系统盘;
- 分析来路不明的样本一定在隔离环境里做,README 的安全警告一节值得先读一遍。
从哪一层开始拆
按深度排,screenshot-to-code 截图转前端代码,mitmproxy 抓接口,Apktool 拆包,jadx 反编译,Ghidra 二进制逆向。
flowchart LR
S(["浅"]) --> A["<b>screenshot-to-code</b><br/>截图转前端代码"] --> B["<b>mitmproxy</b><br/>抓接口"] --> C["<b>Apktool</b><br/>拆包"] --> D["<b>jadx</b><br/>反编译"] --> E["<b>Ghidra</b><br/>二进制逆向"] --> T(["深"])
classDef daily fill:#e8f5e9,stroke:#4caf50,color:#1b5e20
classDef android fill:#e3f2fd,stroke:#2196f3,color:#0d47a1
classDef deep fill:#fff3e0,stroke:#ff9800,color:#e65100
classDef endp fill:#f5f5f5,stroke:#9e9e9e,color:#616161
class A,B daily
class C,D android
class E deep
class S,T endp

大多数测试同学的日常停在前两层,抓包用 mitmproxy,看界面实现用 screenshot-to-code。做 Android 测试的往后加两步,Apktool 配 jadx 基本够用,一个管拆和装回去,一个管读代码。真要碰二进制,再请 Ghidra 出山。
最后啰嗦一句。工具都是中性的,Apktool 的 README 里专门声明了不支持盗版用途。拆自己公司的包排查问题、拆有授权的样本做安全研究、看公开软件的通讯协议学设计,这些都没问题;破解付费、盗版分发,千万别碰。
Top 1 from juejin.cn, machine-translated. The original thread is authoritative.
Can AI directly understand binary?