TGViewer
开发者工具箱|编程·开发工具·资源 开发者工具箱|编程·开发工具·资源 @devtoolboxhub · 779 subscribers
Post #1512 8
ARET:将Windows x86二进制转为原生Linux ELF

ARET(Automatic Reverse Engineering Toolkit)是一个用 Rust 编写的开源项目。输入一个 Windows .exe,它返回一个可以直接在 CPU 上运行的原生 Linux ELF —— 不需要 Wine、QEMU 或任何运行时虚拟化。

ARET 的工作方式是将机器码通过类型化 SSA IR 翻译为 C 语言,再用原生 shim 层重新实现系统调用,最后编译为普通原生二进制。输出可以是 ELF 或 WebAssembly 模块。

架构流程:Windows PE → x86 解码器 → 类型化 SSA IR → C 后端 / WASM 后端 → ELF 二进制 / WebAssembly + 原生 Win32/CRT HLE 层。

HLE 层不模拟 Windows 内核或 CPU,而是为程序所需的 Win32/CRT API 提供原生 C 实现(如 kernel32、msvcrt、user32)。文件路径做 Windows→POSIX 转换,线程通过 ucontext 协作式纤程实现,GUI(开发中)使用 SDL2 和 FreeType 渲染原生控件。

关键设计:共享栈模型——不做函数签名恢复,直接保留显式机器栈状态,通过传值方式传递栈指针 esp,确保 cdecl/stdcall/regparm 等调用约定下参数安全传递。

正确性原则:所有机制要么通过独立参考(Unicorn 指令、Wine API、Z3 SMT 重写)验证,要么在无法建模时明确中止,避免静默错误。

同一 IR 支持:透明编译到 C/LLVM/WASM、反编译为可读伪 C、控制流图分析、墙检测(静态发现未建模指令和缺失导入)。在 27 MB 游戏二进制上恢复了约 43k 个函数。

验证方式:差分测试,仓库包含 21 个二进制回归测试集,以 Wine 为参考。已验证 Lua 5.4.7、sqlite3.exe、NASM 2.16.01、busybox-w32、strings.exe 等,输出与 Wine 字节一致。


当前局限:仅支持 x86 32 位,64 位尚未实现;GUI 栈不完整;无 DirectX 支持;无内核驱动;依赖未文档化 Windows 内部的程序可能触发“中止”墙。

GitHub

#开发者 #工具 #ARET #Rust #逆向工程 #二进制翻译 #Linux #Windows #静态翻译
@DevToolboxHub
More from @devtoolboxhub
  1. Sep 27, 2026竞品关键词调研的自动化流程 从竞品差距分析导出两万个关键词,约一半只是同一词换了词序。真正的瓶颈在导出之后那一小时:一个好问题变成一堵近似重复词组成的墙,外加三种不同口径的搜索量。…
  2. Sep 26, 2026PostgreSQL 复制槽上限参数 max_replication_slots 解析 max_replication_slots 决定共享内存中复制槽数组的长度,仅此而已。它不决…
  3. Sep 26, 2026五仓库架构踩坑:Gitlink 与双 CI Flude 团队复盘了多仓库架构的实践代价。项目从第一分钟起就选择拆分成独立仓库,Pipeline、engine、design-docs…
  4. Sep 26, 2026Xeno Core:TypeScript 后端架构框架 Node.js 复杂系统的架构选型往往决定代码的长期命运。开发者常在两条路之间纠结:要么依赖重度使用实验性装饰器和反射(如…
  5. Sep 25, 2026用 SLO 给 AI Agent 的行为定个预算 Grafana Labs 提出把可靠性工程里的错误预算(error budget)思路用到 AI Agent 上。延迟、token…
  6. Sep 25, 2026Xcode 27.2 改用 JSON 项目格式 Xcode 27.2 用基于 JSON 的 project.xcproj 取代了沿用多年的 project.pbxproj。新建项目…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →