nazywam/AutoIt-Ripper
GitHub: nazywam/AutoIt-Ripper
一款用于从 PE 可执行文件中提取和解密 AutoIt 脚本源码的 Python 工具,支持多种 AutoIt 版本及 AutoHotKey。
Stars: 225 | Forks: 43
# AutoIt-Ripper
## 这是什么
这是一个短小的 Python 脚本,用于从 PE 可执行文件中提取“已编译”的 AutoIt 脚本。
## 参考
该脚本**主要**基于 3 个资源,如果你想在 AutoIt 方面深入研究,请务必查看它们:
* http://files.planet-dl.org/Cw2k/MyAutToExe/index.html
* [Github 镜像 I](https://github.com/dzzie/myaut_contrib)
* [Github 镜像 II](https://github.com/PonyPC/myaut_contrib)
* https://github.com/sujuhu/autoit
* https://github.com/Cisco-Talos/clamav-devel/blob/31824a659dff37ae03e3419395bb68e659c2b165/libclamav/autoit.c
## 支持的 AutoIt 版本
### 已就绪:
* `EA05` AutoIt3.00
* `EA06` AutoIt3.26
* `JB01` AutoHotKey v1
### 未知:
* `JB01` AutoIT2
## 安装
```
python3 -m pip install autoit-ripper
```
或者,如果你想从源码安装版本:
```
git clone https://github.com/nazywam/AutoIt-Ripper.git
cd AutoIt-Ripper
pip install .
```
## 运行
从 Python 脚本中运行:
```
from autoit_ripper import extract, AutoItVersion
with open("sample.exe", "rb") as f:
file_content = f.read()
# EA05 用于 v3.00+,EA06 用于 v3.26+
# 省略 `version` 或传递 None 将尝试两个版本
content_list = extract(data=file_content, version=AutoItVersion.EA06)
```
从命令行运行:
```
autoit-ripper sample.exe out_directory
```
帮助信息:
```
autoit-ripper --help
usage: autoit-ripper [-h] [--verbose] [--ea {EA05,EA06,guess}] file output_dir
positional arguments:
file input binary
output_dir output directory
optional arguments:
-h, --help show this help message and exit
--verbose, -v
--ea {EA05,EA06,JB01,guess}
extract a specific version of AutoIt script (default: guess)
```
## 格式文档
#### (编写中)
### AU3 头部
| 字段 | 长度 | 加密 (EA05) | 加密 (EA06) | 备注 |
|:----------------:|:-------------:|:-----------------:|:-----------------:|:---------------------------:|
| "FILE" | 4 | MT(0x16FA) | LAME(0x18EE) | 静态字符串 |
| flag | 4 | xor(0x29BC) | xor(0xADBC) | |
| auto_str | flag (* 2) | MT(0xA25E + flag)|LAME(0xB33F + flag)| UTF-8/UTF-16 |
| path_len | 4 | xor(0x29AC) | xor(0xF820) | |
| path | path_len (* 2)|MT(0xF25E + path_len)|LAME(0xF479 + path_len) | 已编译脚本的路径 |
| compressed | 1 | None | None | 脚本是否被压缩 |
| data_size | 4 | xor(0x45AA) | xor(0x87BC) | 压缩后数据大小 |
| code_size | 4 | xor(0x45AA) | xor(0x87BC) | 解压后数据大小 |
| crc | 4 | xor(0xC3D2) | xor(0xA685) | 压缩数据 crc 校验和|
| creation date | 4 | None | None | 文件创建日期 (高位) |
| creation date | 4 | None | None | 文件创建日期 (低位) |
| last update date | 4 | None | None | 最后编辑日期 (高位) |
| last update date | 4 | None | None | 最后编辑日期 (低位) |
| data | data_size |MT(checksum + 0x22af)|LAME(0x2477) | 脚本数据 |
### v3.00 和 v3.26+ 之间的差异
| | v3.00 | v3.26 |
|--------------------- |-------------------- |--------------------------------------- |
| 代码存储 | 通过特征值抓取 | "SCRIPT" 资源 (/通过特征值抓取?) |
| 字符串编码 | UTF-8 | UTF-16 |
| 加密 | xor/自定义 MT19937 | xor/LAME crypt |
| 代码加密密钥 | 动态 | 静态 |
| 压缩 | 是 | 是 |
| 代码“编译” | 否 | 是 |
| 特征值 (Magic) | EA05 | EA06 |
标签:AutoHotKey, AutoIt, _extract, PE文件解析, Python, Unpacker, 二进制安全, 云安全监控, 云资产清单, 恶意代码分析, 文件格式, 无后门, 脚本提取, 解密, 逆向工具, 逆向工程, 配置文件, 静态分析