跪拜 Guibai
← Back to the summary

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:

仓库地址:

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 终端界面

它一张脸三副面孔,装的是一个包,出来的是三个命令:

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 装证书,流量就进来了。

💡 小提示:

Apktool:拆包

第三层,拆包 Android。APK 本质是个 zip 压缩包,但直接解压出来你什么也看不懂,清单和资源全是编译过的二进制。Apktool 干的就是把这层壳规范地拆掉,2.6 万 star,作者 Connor Tumbleson 从 2012 年维护到现在,Android 逆向圈的入场券。

拆开之后你拿到的是能看、能改、还能装回去的源文件:

仓库地址:

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 文件夹名。

💡 小提示:

jadx:反编译

第四层。Apktool 拆出来的 smali 忠实但难读,毕竟还是字节码。skylot/jadx 再往前一步,把 dex 直接反编译回 Java 源码,5.1 万 star,Android 安全圈的标配,2013 年开源维护至今。

README 顶部挂着一条警告,大多数情况下它没法 100% 反编译,遇到报错看官方的 Troubleshooting 指南。反编译本来就不是无损的,心里有数就行。

jadx-gui 界面

仓库地址:

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 点方法名就能跳过去逛。

💡 小提示:

Ghidra:二进制逆向

最后一层,也是最深的。没有源码、没有字节码,手上只有一个 exe 或者一个 so,想知道它到底干了什么,这是 Ghidra 的地盘。

NationalSecurityAgency/Ghidra,美国国家安全局研究理事会出品,2019 年在 RSA 大会上开源,内部锤炼多年的逆向框架直接放了出来,9.5 万 star,是这 5 个里分量最重的,最新版 12.2 上周刚发布。

安全研究员拿它分析恶意样本、挖漏洞,CTF 逆向题的事实标准。做测试平时用不上这层,但知道它在那,安全测试的深水区就算摸到门了。

仓库地址:

https://github.com/NationalSecurityAgency/ghidra

安装方式,先装 JDK 25 的 64 位版本,再从 GitHub Releases 下载官方 zip(认准 ghidra_<版本>_<build>_<日期>.zip,别下成 Source Code),解压后:

./ghidraRun

Windows 跑 ghidraRun.bat。装好新建工程导入一个 exe,先让它自动跑一遍分析,完了在 CodeBrowser 里看反汇编和伪代码。

💡 小提示:

从哪一层开始拆

按深度排,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 里专门声明了不支持盗版用途。拆自己公司的包排查问题、拆有授权的样本做安全研究、看公开软件的通讯协议学设计,这些都没问题;破解付费、盗版分发,千万别碰。

Comments

Top 1 from juejin.cn, machine-translated. The original thread is authoritative.

汪汪队首席上单

Can AI directly understand binary?