如何更正WinAPI调用?

时间:2014-02-20 17:22:05

标签: winapi

上次我严重描述了我的问题。 现在我试着更清楚地解释我的问题。

我试图进行硬盘序列检查以防止程序分发。我没有src,所以我在.code部分找到了一些空格并在那里注入了代码。

Screenshot

您可以看到模块间通话。例如,call kernel32.GetDriveTypeA匹配call 75738D98。但重启后,此地址会发生变化。但是我的代码调用了不正确的75738D98地址。

我需要修复它(解析新的GetDriveTypeA地址并将75738D98替换为正确的地址)

1 个答案:

答案 0 :(得分:2)

LoadLibraryGetProcAddress将为您提供DLL函数的地址。接下来的一个自然问题是:如果您不知道他们的地址,您如何致电LoadLibraryGetProcAddress

所有用户进程都加载了kernel32。您不需要在kernel32中动态加载任何内容。

通常你的链接器& OS加载器通过链接到导入库(例如kernel32.lib)为您完成所有这些操作。这将告诉操作系统您希望kernel32加载您的DLL。你的DLL有一个import address table,它包含一堆真实导入函数的存根。加载模块时,操作系统会修补这些存根以指向实际的功能地址。

你可能也应该这样做。如果你试图过于讨厌,你的应用甚至可以被检测为恶意软件。

你有充分的理由不直接链接到导入库吗?