Sita-Technologies/Sita
GitHub: Sita-Technologies/Sita
Gupta Team Developer 应用程序解编译器,支持多种输出格式。
Stars: 3 | Forks: 1
# 开源 Sita Team Decompiler
一个用于 [opentext Gupta Team Developer](https://community.opentext.com/portfolio/gupta-team-developer) 应用程序的解编译器。读取编译后的 `.exe` 程序和二进制 `.app` / `.apl` 源文件,并将其写回源形式的 SAL(`.apt` 形状的文本,或重构的二进制 `.app` / `.apl`)。
### 仓库布局
```
. Makefile, README.md, this file
src/ C++ sources, headers, COPYING (GPLv3) and generated SAL constant tables
build/ compile artifacts (.o, .d) and the final Sita binary (gitignored)
```
### 依赖
Linux 构建:
- 支持 C++11 的 C++ 编译器 — 默认使用 `g++`
- GNU `make`
- `iconv` — Linux 上的 glibc 提供的;在 musl/Alpine 上安装 `libiconv-dev`
除了 C 库之外,没有其他第三方库。Windows 特定的头文件(`windows.h`、`shlwapi.h`、`direct.h`、`malloc.h`)由 `_WIN32` / `_WIN64` 宏保护,并且仅在 Windows 上构建时才引入。
### 构建
从仓库根目录:
```
make
```
这将生成 `build/Sita`。
有用的覆盖:
```
make CXX=clang++ # use a different compiler
make CXXFLAGS='-O0 -g' # debug build
make -j # parallel build
make clean # remove build/
```
或者,创建一个新的 Visual Studio C++ 项目,并将 `src/` 中的 cpp 源文件和 hpp/inc 头文件添加到该项目中。
### 安装
```
make install # installs to /usr/local/bin (needs sudo)
make install PREFIX=$HOME/.local # user-local install
make install DESTDIR=/tmp/stage # stage into a packaging tree
make uninstall
```
### 使用
```
build/Sita [option [option [...]]]
```
`` 是 Team Developer 编译的 `.exe` 或 `.app` / `.apl` 源文件(Sita 通过扫描 `MGDR` 魔术数自动检测)。
除了解编译外,Sita 还可以将专有二进制格式转换为可读文本格式。
解编译后的 SAL 源以 `.apt` 形式写入 stdout:每个大纲项带有 `.head - ` 前缀,多行续行(应用程序描述正文、代码中的多行 SAL 字符串)作为裸行出现。版本横幅写入 stderr,因此 stdout 是干净的文本流。
stdout 编码为 UTF-8,以 LF 结尾。要生成 TD-IDE 兼容的 `.apt` 文件,准备用于 Team Developer 而无需进一步处理,请使用 `-t `(Sita 将自身写入 UTF-16LE + BOM + CRLF)。或者,`iconv -f UTF-8 -t UTF-16LE` 加上前导 `0xFF 0xFE` BOM 可以等效地转换 stdout 流。
选项(输出标志 `-a` / `-t` / `-p` / `-P` 互斥):
| 标志 | 执行的操作 |
|---------------------|-------------------------------------------------------------------------------|
| `-a ` | 写入单个重构的二进制 `.app` 文件。 |
| `-t ` | 直接写入单个文本 `.apt` 文件,以 Team-Developer 准备的编码(UTF-16LE + BOM + CRLF)。 |
| `-p ` | **项目模式(二进制)**:写入 `/.app`(二进制主文件,库内容与 `File Include:` 指令内联)以及每个 `File Include:` 对应一个 `/.apl`,以便以源样式查看/编辑。在 includes 中命名的子目录将自动创建;库路径将与目录遍历(无 `..`,无绝对路径,无驱动器字母)进行验证。如果没有 `-r`,嵌入式资源也将提取到 `` 中。 |
| `-P ` | **项目模式(文本)**:与 `-p` 相同的拆分,但主文件是 `.apt`。所有 Sita 编写的 `.apt`/`.apl` 文件都是 UTF-16LE + BOM + CRLF。 |
| `-r ` | 将每个嵌入式资源(图标、位图、RTF 等)作为原始文件写入 ``。可以与任何输出标志一起使用,或单独使用以提取资源而不进行解编译。与 `-p`/`-P` 和没有 `-r` 一起使用时,资源将写入项目目录。`.exe` 中嵌入的资源文件名将被清理 — 不安全的名字(`..`,绝对路径,驱动器字母)将回退到 `resource_SSSSHHHH.bin`。 |
| `-d ` | 调试:将每个 tag-OSEG 段落作为 `item_.bin` 写入。对于二进制级别的调查很有用;不适用于正常使用。 |
| `-v` | 详细/调试输出:在每个行前添加项目-id、类型和标志信息;还在线内输出完整的 ItemBody 内容。在此模式下,输出不再是干净的 `.apt` 流。 |
| `--` | 选项结束;下一个参数是输入文件名,即使它以 `-` 开头。 |
示例:
```
# 反编译.exe到标准输出为.apt形状的UTF-8文本
build/Sita app.exe > app.apt.txt
# 单文件输出(不分割库)
build/Sita -a decompiled.app app.exe # binary .app
build/Sita -t decompiled.apt app.exe # text .apt (UTF-16+BOM+CRLF)
# 项目模式:将文件包含:库拆分到自己的文件中
# (资源也位于同一目录,除非-r覆盖)
build/Sita -p decompiledProject app.exe # binary main + .apl libs + resources
build/Sita -P decompiledProject app.exe # text main + .apl libs + resources
ls decompiledProject/ # → app.app + lib1.apl + button.bmp + ...
# 解码专有.app格式源文件(Sita原生读取——相同的标志有效)
build/Sita some.app
build/Sita some.apl # binary .apl files are MGDR too
# 导出嵌入式资源以供检查(不进行反编译)
build/Sita -r /tmp/resources app.exe
# 项目+单独的资源目录(-r覆盖项目目录默认值)
build/Sita -p decompiledProject -r decompiledProject/res app.exe
# 详细模式用于调试每个项目携带的ItemBody类型
build/Sita -v app.exe | less
```
运行 `build/Sita` 而不带任何参数以查看完整的用法提示。
### 项目状态
实验性,处于积极开发中。输出质量足够好,典型的编译程序可以解编译为可读、可用的 SAL 源。
**支持的目标:**
- TD 5.1 – 7.5 输入二进制(`.exe`)和源文件(`.app` / `.apl`,二进制 MGDR 或文本 `.apt` 形式)
- 官方支持 32 位应用程序;64 位支持已测试并基本工作,与 32 位输出相比有一些细微差别,32 位输出仍在追查
- 较大的生产应用程序仍然出现长尾残留。
标签:Linux安全