更改 DOS 可执行文件中的文本

逆向工程
2021-06-21 08:13:38

我们有一个像NC一样的 DOS 可执行程序我们如何查找和更改其中的文本或 ASCII 艺术?

我是反向新手。

1个回答

工具

任何十六进制编辑器都可以。DOS下,NC和VC都有自己的就足够了。非常好的DOS工具是 HIEW(十六进制编辑器 + x86 反汇编器)。

该怎么办

  1. 确定可执行形式

    将其作为文本/十六进制打开,如果不存在程序字符串,则它们位于不同的文件中,或者文件已打包/加密。一些可执行文件是由PKLITE工具打包的,所以解压它们。如果文件已加密,则必须先尝试对其进行解密。

  2. 找到要更改的文本

  3. 编辑文本

    字符串大小必须保持不变!!!如果程序使用任何类型的CRC,那么您必须覆盖调用nop/jump或将比较值更改为新的CRC

  4. 那应该只是

    如果程序以特定方式使用这些文本,那么某些事情可能会被破坏,例如在字符串中搜索特定字符/模式以产生一些疯狂的效果等。因此,如果编辑被窃听,请返回原始可执行文件并尝试逐个编辑字符串。 .. 检测哪些字符串会破坏 exe。之后,只需保留原样,然后将其余部分编辑为您需要的内容

  5. 如果一切都失败了

    然后为您的程序编写 TSR 启动器(终止并保持程序),它将为您更改文本屏幕。在 DOS 中没有访问冲突,所以你可以做任何事情......

    例如:

    1. 检测程序呈现的实际屏幕

      文本模式VideoRAMB800:0000h ,如果我没有记错以及每个字符表示为2字节(一个是ASCII,一个是颜色属性)。DOS 中使用的标准文本模式80x25字符,因此读取屏幕的特定位置并检测与程序每一页匹配的字符串。

    2. 如果检测到页面

      然后用你的新页面重写它(可能会闪烁一点)

    3. 在某个计时器中继续此扫描...(PIT 中断或键盘中断)

    4. 您可以将其与键盘击键检测结合使用

      这样你就知道如果你点击F1那么页面F1会出现等等。这可以用于难以检测的页面(没有标题)。

视窗

您可以编写窗口应用程序来显示 DOS 程序。只是您需要将鼠标移动和键盘事件传递给 DOS 程序(可以作为隐藏进程运行)并在您的窗口中显示(不可见的)DOS 屏幕。在Windows中使用DLPORTIO驱动程序或任何其他方式来获得内核模式的访问权限,所以你其实可以读/访问DOS VRAM或访问命令行DOSBox中后备缓冲通过WinAPI的GFX将其解码回文本(字体通常是固定的,因此应该很容易)并将其重新编码为您的新文本并重新显示在您的窗口应用程序中。

[笔记]

图形 DOS 程序意味着它使用图形视频模式而不是文本模式。NC 是文本模式程序而非图形程序的示例!!!一些基于文本模式的应用程序使用不同的文本模式,因此您应该检测实际的文本模式分辨率。我认为对 EGA/VGA BIOS 的一些调用int 13h应该可以解决问题,或者您可以为此连接整个中断。如果你有对齐的线条和表格边框,那么它也可以用于分辨率检测。您应该不时执行此操作,因为在操作期间分辨率可能会发生变化,例如VC 中尝试ALT+F9