更改 DOS 可执行文件中的文本
工具
任何十六进制编辑器都可以。在DOS下,NC和VC都有自己的就足够了。非常好的DOS工具是 HIEW(十六进制编辑器 + x86 反汇编器)。
该怎么办
确定可执行形式
将其作为文本/十六进制打开,如果不存在程序字符串,则它们位于不同的文件中,或者文件已打包/加密。一些可执行文件是由PKLITE工具打包的,所以解压它们。如果文件已加密,则必须先尝试对其进行解密。
找到要更改的文本
编辑文本
字符串大小必须保持不变!!!如果程序使用任何类型的CRC,那么您必须覆盖调用
nop/jump或将比较值更改为新的CRC那应该只是
如果程序以特定方式使用这些文本,那么某些事情可能会被破坏,例如在字符串中搜索特定字符/模式以产生一些疯狂的效果等。因此,如果编辑被窃听,请返回原始可执行文件并尝试逐个编辑字符串。 .. 检测哪些字符串会破坏 exe。之后,只需保留原样,然后将其余部分编辑为您需要的内容
如果一切都失败了
然后为您的程序编写 TSR 启动器(终止并保持程序),它将为您更改文本屏幕。在 DOS 中没有访问冲突,所以你可以做任何事情......
例如:
检测程序呈现的实际屏幕
文本模式VideoRAM是
B800:0000h,如果我没有记错以及每个字符表示为2字节(一个是ASCII,一个是颜色属性)。DOS 中使用的标准文本模式是80x25字符,因此读取屏幕的特定位置并检测与程序每一页匹配的字符串。如果检测到页面
然后用你的新页面重写它(可能会闪烁一点)
在某个计时器中继续此扫描...(PIT 中断或键盘中断)
您可以将其与键盘击键检测结合使用
这样你就知道如果你点击F1那么页面F1会出现等等。这可以用于难以检测的页面(没有标题)。
视窗
您可以编写窗口应用程序来显示 DOS 程序。只是您需要将鼠标移动和键盘事件传递给 DOS 程序(可以作为隐藏进程运行)并在您的窗口中显示(不可见的)DOS 屏幕。在Windows中使用DLPORTIO驱动程序或任何其他方式来获得内核模式的访问权限,所以你其实可以读/访问DOS VRAM或访问命令行或DOSBox中后备缓冲通过WinAPI的在GFX。将其解码回文本(字体通常是固定的,因此应该很容易)并将其重新编码为您的新文本并重新显示在您的窗口应用程序中。
[笔记]
图形 DOS 程序意味着它使用图形视频模式而不是文本模式。NC 是文本模式程序而非图形程序的示例!!!一些基于文本模式的应用程序使用不同的文本模式,因此您应该检测实际的文本模式分辨率。我认为对 EGA/VGA BIOS 的一些调用int 13h应该可以解决问题,或者您可以为此连接整个中断。如果你有对齐的线条和表格边框,那么它也可以用于分辨率检测。您应该不时执行此操作,因为在操作期间分辨率可能会发生变化,例如在VC 中尝试ALT+F9。