逆向工程师 C++ DLL
我有一个最初是用 VS2005 编写的小实用程序。
我需要做一点小小的改变,但是其中一个 dll 的源代码已经丢失在某处。
是否有免费或价格合理的工具可以将 dll 逆向工程回 C++ 代码。
I have a small utility that was originally written in VS2005.
I need to make a small change, but the source code for one of the dlls has been lost somewhere.
Is there a free or reasonably priced tool to reverse engineer the dll back to C++ code.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
Hex-Rays 反编译器是一个很棒的工具,但是代码会很难阅读完之后,您将不得不花费大量时间对整个 DLL 进行逆向工程。
Hex-Rays decompiler is a great tool, but the code will be quite hard to read and you will have to spend a lot of time to reverse engineer the whole DLL.
您可能还想看看 OllyDbg,它是一个 32 位汇编程序级分析调试器。 它用于在没有源代码的情况下分析二进制代码。 它是轻量级调试器。 OllyDbg 是一个共享软件,因此您可以下载并使用它。 免费使用它..!!
访问 OllyDbg 主页此处
PS:回到使用破解器的日子SoftICE 来自 NuMega,用于调试可执行文件和文件 抓取寄存器值的快照。 SoftICE 是一种高级调试器。 这绝对是破解者最喜欢的工具。 我不知道该产品目前的状况。 NuMega 的网站没有相关信息。 我可能忽略了它,但我找不到它。 我建议您使用 SoftICE 和 SoftICE 的旧版本 (4.0x)。 应用 SoftICE 的 WindowsXP 补丁。 使用 SoftICE 是一种“体验”。
进一步阅读: 逆向:逆向工程的秘密 埃尔达德·埃拉姆
You might also want to have a look at OllyDbg which is a 32-bit assembler level analysing debugger. It is used to analyze binary code in scenarios where you do not have a source code. It is light weight debugger. OllyDbg is a shareware so you can download & use it for free..!!
Visit OllyDbg is home page here
PS: Back in the day crackers used SoftICE from NuMega for debugging into an executable & grab a snapshot at the values of registers. SoftICE was an advanced debugger. It was definitely the favorite tool for the crackers. I don't know about the present status of the product. NuMega's site had no information about it. I may have overlooked it but I could not find it. I recommend that you get your hands on a legacy version (4.0x) of SoftICE & apply the WindowsXP patch for SoftICE. Working with SoftICE is something of an "experience".
Further Read: Reversing: Secrets of Reverse Engineering by Eldad Eilam
我不知道你的具体情况,以及DLL为你的应用程序实现了多少功能。 但我认为,在大多数情况下,最好根据已知功能重写缺失的 DLL。
如果您有一些相关文档,则尤其如此。
尝试将二进制代码逆向工程为汇编程序,然后为 C++,然后尝试修改它以提供现有功能,在大多数情况下将非常耗时,甚至可能是不可能的。
I don't know the exact situation you have, and how much the functionality the DLL implements for your application. But I would argue that in most cases it would be better to rewrite the missing DLL based on the known functionality.
This is especially true if you have some documentation for it.
Trying to reverse engineer the binary code to assembler, then to C++ and then try to modify it to provide the existing functionality will be in most cases to time consuming, and maybe even impossible.
现在您可以免费使用 ghidra,或购买 idapro
Now you can use ghidra for free, or buying idapro
如果你的小改动是编辑一些文本或跳过一些例程,你可以使用十六进制编辑器或反汇编程序,但你将无法看到原始的 C++ 代码,即使你找到了一个可以转换 DLL 的工具回到代码中,所有变量名都会消失,这将是一团糟。
If your small change is to edit some text or to skip some routines, you could use a hex editor or a disassembler, but you won't be able to see the original C++ code, and even if you find a tool that turns the DLL back into code, all the variable names would be gone and it would be a big mess.
根据您的情况,我会按原样保留旧版/二进制 DLL,并编写一个包装器 DLL,以更改和/或添加任何其他行为。
这个想法是将旧的功能聚合在一个新的 DLL 中,该新的 DLL 导入旧的功能。
A little depending on your situation I would keep the legacy/binary DLL as-is and write a wrapper DLL that will change and/or add any additional behavior.
The idea is to aggregate the old functionality in a new DLL which imports the old one.
你必须像游戏和应用程序破解者那样做:使用反汇编器并破解汇编器代码。
You have to do it like game and app crackers do: Use a disassembler and hack the Assembler code.