在过去的几个月里,我负责分析和逆向旧的未知 EXE。该二进制文件适用于 NEC-PC98(复古 PC)的 MS-DOS,旧的(20 多年前),没有人知道它是如何制作的。
我完成了这项工作,并且知道二进制文件是由未知供应商的基本编译器生成的。二进制有有趣的技术;精心设计的 VM,像 DLL 一样部分重定位覆盖,数据段压缩和自熔。它给我留下了深刻的印象。所以我想知道编译器生成二进制文件。
现在我猜供应商可能是微软。我会尝试使用 QuickBasic 的编译器(BC.EXEQB.EXE) 并且会生成小的二进制文件,但不幸的是我不是旧工具链的所有者。
所以我很想请人帮忙,如果你有任何微软的基本编译器,那就去挖你的车库,把这样一个编译器生成的旧二进制文件放在我身上。我会看到它并想确定编译器和供应商。
该二进制文件具有以下特点:
- 在其 exe 标头的 reloc 表偏移地址字段上表示 magicWORD,0x1e
- 启动代码/地址位于较高地址(exe 的后向)
- 包括可在单个二进制文件上重定位的公共库(例如 libc)
- 生成完全本机代码而不是 P 代码。a
call匹配(未知)VM-OP-code - 字符代码为 ASCII/Shift-JIS big endian(cp932,日语多字节代码)
- 浮点 IEEE754 不是 MS-FP
- rodata 部分很容易压缩(可选?)
EXE地址映射:
00000: MZ HEADER
00200: module1-header
00230: module1-code
00xxx: module1-data (compressed)
: (repeats by module-N)
yyyyy: native libraries
zzzzz: startup code
ZZZZZ: relocation table (for calling a library)
BC.EXE,Microsoft PDS,是我感兴趣的产品之一。请编译一个像这样的简单代码:
X = 0.5 * 100.0
PRINT X
FOR I=0 TO 16
PRINT "Hello, World"
NEXT I
如果您向我发送输出可执行文件,我将不胜感激。