ViRb3/applescript-tools

GitHub: ViRb3/applescript-tools

用 Go 编写的 AppleScript .scpt 文件反汇编、反编译和去混淆工具,支持将编译后的二进制脚本还原为可读源代码。

Stars: 0 | Forks: 0

# AppleScript 工具 `applescript-tools` 是一个用 Go 编写的 AppleScript 编译脚本 (`.scpt`) 反汇编器、反编译器和去混淆器。它支持只读脚本、嵌入式 `scpt` 描述符、精确的 Apple 事件代码、应用程序术语、嵌套脚本对象,以及对受损序列化数据的尽力恢复。 其实现使用了类型化的 FAS 值图、由两个工具共享的解码指令层、类型化的 AST、显式的转换 pass,以及独立于二进制解析的格式化程序。 ## 构建与使用 需要 Go 1.24 或更高版本。 ``` go build -o applescript-tools ./cmd/applescript-tools ./applescript-tools decompile example.scpt ./applescript-tools decompile --strict --pass strings example.scpt ./applescript-tools disassemble example.scpt ./applescript-tools disassemble --json example.scpt ``` 这两个命令都接受 `-` 作为 stdin。反编译的源代码或反汇编结果将写入 stdout;诊断信息写入 stderr。除非提供 `--strict`,否则恢复操作将是尽最大努力的。默认情况下会解开嵌入的编译脚本,并且可以通过 `decompile --no-unwrap` 保留它们。 可用的 AST pass 包括: - `strings`:当作用域、类型和控制流能证明其值时,折叠 ASCII 字符调用、已验证文本连接中的字面量序列,以及局部分配的常量字符串。包含未类型化操作数的列表结构和连接将被保留。 ## Go API ``` result, err := applescript.Decompile(ctx, reader, applescript.DecompileOptions{ Strict: true, }) listing, err := applescript.Disassemble(ctx, reader, applescript.DisassembleOptions{ Strict: true, }) ``` 公开的 `ast`、`terminology` 和 `passes` 包支持结构化的 AST 处理、自定义 SDEF 字典和自定义转换。库操作返回诊断信息,并且从不写入进程输出。 ## 验证 快速、独立于平台的测试包括全部 58 个重点编译测试固件: ``` go test -short ./... go vet ./... go test -race -short ./... ``` 在 macOS 上,标准测试套件会自动使用本地的 `osacompile` 命令来编译并往返测试每个重点固件和嵌入式示例: ``` go test ./... ``` 设置 `APPLESCRIPT_COMPILER_ORACLE_DIR` 可以在任何平台上选择外部编译器服务。如果没有设置,macOS 将使用本地的 `osacompile`;其他平台将跳过编译器预言机测试。 ``` APPLESCRIPT_COMPILER_ORACLE_DIR=/path/to/shared/workdir go test ./... ``` 代码库在 `tools/osacompile-service/watch.py` 中包含一个 macOS 主机端目录服务。在运行 Go 测试的机器上,针对与其共享的文件夹运行它: ``` python3 tools/osacompile-service/watch.py /path/to/shared/workdir ``` 然后从测试机器上选择该文件夹: ``` APPLESCRIPT_COMPILER_ORACLE_DIR=/path/to/shared/workdir go test ./... ``` 监视器会以原子方式发布 `.scpt` 和 `.log` 文件。`.log` 文件是外部预言机后端使用的完成信号。 已提交的编译测试固件和经过审查的 Go 源码 golden 文件提供了独立于平台的回归测试。当编译器预言机可用时,每个编写的预言机源码都必须编译为相同的规范 Go 输出,并在第二次编译/反编译周期中保持稳定。 仅在有意更新编译器基线时才重新生成已提交的编译器固件。维护命令在 macOS 上会自动使用本地的 `osacompile`,否则需要 `APPLESCRIPT_COMPILER_ORACLE_DIR`: ``` go run ./tools/generate-fixtures ``` 通过相同的编译/反编译/重编译不动点检查来审计源码语料库: ``` go run ./tools/corpus-audit /path/to/corpus report.md ``` 一些示例: - https://github.com/kevin-funderburg/AppleScripts - https://github.com/abbeycode/AppleScripts ## 参考 基于以下作者的工作: - https://github.com/Jinmo/applescript-disassembler - https://github.com/pberba/applescript-decompiler
标签:Amass, AppleScript, EVTX分析, Findomain, Go语言, 云资产清单, 动态分析, 反汇编器, 反编译器, 日志审计, 程序破解, 自动化payload嵌入, 逆向工程