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嵌入, 逆向工程