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安全