使用 x64dbg 存储字符串

逆向工程 x64dbg
2021-06-17 09:24:13

我想用 x64dbg 修补 Windows 二进制文件(实际上是一个 ocx)。更具体地说,我想存储一个 60 字节的字符串,并在某个点将其地址存储在 EAX 中。

我是否只需要将它添加到内存转储中的空闲位置并将其地址存储在 EAX 中?或者应该使用十六进制编辑器打开文件并将我的字符串添加到末尾,然后以某种方式引用该地址?

问题是我并没有真正掌握这些转储窗口的含义。为什么有 5 个,里面是什么?

1个回答

我不知道如何在 x64dbg 中做到这一点,但这是实现它的另一种方法。

Resource Hacker 中打开您的 ocx (dll) 文件,您应该会看到dll 文件中的资源然后点击从空白脚本创建资源按钮并在那里输入:

your_res_name RCDATA
{
   "the_very_long_string_you_want_to_add\0"
}

然后单击“编译脚本”按钮(或F5改为)。然后保存文件,现在你的 dll 应该包含你刚刚创建的资源。此外,将使用名称创建原始 dll 的副本nameOfYourDllFile_original.dll

现在,您只需要获取之前插入的字符串的地址——为此您可以使用 IDA(和许多其他工具)。

这样做之后,是时候修补二进制文件了 - 只需找到您想要将字符串地址移动到 eax 的位置,然后用mov eax, address指令替换字节即可

注1:我想您只想更改mov eax, addr_of_some_stringmov eax, addr_of_your_string- 在这种情况下,您可以更改指令操作码的最后 4 个字节,以便它们包含相关地址。但是,如果不是这种情况,则在修补时必须非常小心,以免覆盖任何重要说明。

注意 2:如果您愿意,您可能希望添加多个字符串作为资源 -有关更多信息,请参阅链接