【问题标题】:How to delete function from DLL binary如何从 DLL 二进制文件中删除函数
【发布时间】:2015-02-27 11:09:53
【问题描述】:

我有一个没有源代码的已编译 dll 文件(dll 二进制文件)。我必须从这个 dll 中删除一些函数。 Dll 是用 C++ 编写的。

例如,我有 Math.dll,其中包含 3 个函数:

int Func1(int x);
int Func2(int x, int y);
double Func3(double x, double y);  

我只需要一个函数来获取新的 dll 文件:

int Func1(int x);

我只有 Math.dll - 一个二进制 dll 文件。

有什么工具或方法可以做到这一点?

更新

由于几个要求,我需要删除一些功能:

  • 新的 dll 只包含我的应用程序需要的功能
  • 必须减小新的 dll 大小

【问题讨论】:

  • 为什么一定要删除这些功能?好吧,您可以更改标头,使它们不再可以从客户端代码中看到。但是按照您要求的方式更改二进制文件是不可能的 AFAIK。
  • 我已经更新了我的问题。可以使用 asm 和低级编程,但我正在寻找更简单和“高级”的解决方案。
  • 常见的过程是从源代码重建DLL。 DLL 是一个常规的可执行文件,因此它包含标头、代码、数据和重定位,并且从中间删除一个片段是行不通的。您可能会将其与 library 文件混淆。
  • 我认为你不能删除DLL中的函数。你可以做的就是导入你需要的函数。
  • 没有文件。我只有 binary .dll 文件。

标签: c++ dll binary decompiling disassembly


【解决方案1】:

想要删除的函数也可能在 DLL 内部使用。由于您没有源代码,因此您必须反汇编整个 DLL 才能检查。

一旦您进行了分析的反汇编,删除未使用的部分、组装剩余部分并将其放入 DLL 应该是一个相当简单的过程。但老实说,没有任何合理的情况会有所帮助。 “必须减小新的 dll 大小”在本世纪不是一个可信的说法。大小只对深度嵌入式系统很重要,而那些不运行 Windows。

【讨论】:

  • 有一些原因:1) 新的 dll 只包含我的应用程序需要的功能 -> 因为我必须证明 dll 中没有恶意软件。 2) 必须减小新的 dll 大小 -> 因为小尺寸会降低认证成本。
【解决方案2】:

朋友们,这里有适合我的解决方案。

解决方案
步骤 1. 创建新的 DLL 项目,例如在 Visual Studio 中
步骤 2. 反汇编 DLL 二进制文件(OllyDbg、IDA Pro 工具)
步骤 3. 在新的 DLL 项目中创建与原始函数同名的新函数。将函数汇编器代码(来自步骤 2)复制到新函数作为内联汇编指令
第 4 步。对新 DLL 必须包含的每个函数重复第 3 步
步骤 5. 构建 DLL

示例

步骤 2.Asm 代码

?Func1@@YAHH@Z proc near    ;GetSquaredNumber

arg_0= dword ptr  8

push    ebp
mov     ebp, esp
mov     eax, [ebp+arg_0]
imul    eax, eax
pop     ebp
retn
?Func1@@YAHH@Z endp

步骤 3. 新的 DLL C++ 代码

__declspec(dllexport) int Func1(int x)    // GetSquaredNumber
{
    int y_res = 0;

    __asm
    {                           
        mov     eax, [x]
        push    ebp
        mov     ebp, esp        
        imul    eax, eax
        pop     ebp
        mov [y_res], eax
    }

    return y_res;
}

第 5 步。构建项目!
结果:新的 dll 只包含我的应用程序需要的功能,并且新的 dll 大小减小了。

【讨论】:

    猜你喜欢
    • 2013-01-29
    • 1970-01-01
    • 1970-01-01
    • 2014-06-12
    • 1970-01-01
    • 2012-06-11
    • 2012-01-18
    • 1970-01-01
    • 2011-09-20
    相关资源
    最近更新 更多