12

我有一个最初用 VS2005 编写的小实用程序。

我需要做一个小改动,但是其中一个 dll 的源代码已经丢失了。

是否有免费或价格合理的工具可以将 dll 反向工程回 C++ 代码。

4

7 回答 7

16

Hex-Rays 反编译器是一个很棒的工具,但是代码会非常难以阅读,并且您将不得不花费大量时间对整个 DLL 进行逆向工程。

于 2009-03-08T12:19:40.223 回答
7

您可能还想看看OllyDbg,它是一个 32 位汇编器级别的分析调试器。它用于在您没有源代码的情况下分析二进制代码。它是轻量级的调试器。OllyDbg是一个共享软件,因此您可以免费下载和使用它..!!

访问 OllyDbg 是这里的主页

PS:过去,破解者使用NuMega 的SoftICE调试可执行文件并获取寄存器值的快照。SoftICE 是一个高级调试器。这绝对是饼干最喜欢的工具。我不知道产品的现状。NuMega 的网站没有关于它的信息。我可能忽略了它,但我找不到它。我建议您使用旧版 (4.0x) SoftICE 并为 SoftICE 应用 WindowsXP 补丁。使用 SoftICE 是一种“体验”。

进一步阅读: 逆向:逆向工程的秘密Eldad Eilam

于 2009-03-08T14:02:16.140 回答
3

我不知道您的确切情况,以及 DLL 为您的应用程序实现了多少功能。但我认为,在大多数情况下,基于已知功能重写丢失的 DLL 会更好。

如果您有一些文档,则尤其如此。

尝试将二进制代码逆向工程为汇编程序,然后是 C++,然后尝试对其进行修改以提供现有功能,在大多数情况下,这将是耗时的,甚至可能是不可能的。

于 2009-03-08T13:03:39.057 回答
1

如果您的小改动是编辑一些文本或跳过一些例程,您可以使用十六进制编辑器或反汇编程序,但您将无法看到原始 C++ 代码,即使您找到了可以转换 DLL 的工具回到代码中,所有变量名都将消失,这将是一团糟。

于 2009-03-08T12:18:26.217 回答
1

根据您的情况,我将保留旧版/二进制 DLL 原样并编写一个包装 DLL,该 DLL 将更改和/或添加任何其他行为。

这个想法是将旧功能聚合到一个新的 DLL 中,该 DLL 导入旧的。

于 2009-03-08T14:13:13.617 回答
1

现在您可以免费使用 ghidra,或者购买 idapro

于 2021-06-15T14:56:52.083 回答
0

你必须像游戏和应用破解者那样做:使用反汇编程序并破解汇编程序代码。

于 2009-03-08T13:26:15.493 回答