2

我一直在制作一个 C# DLL,该 DLL 将被注入到同样用 C# 编写的特定目标应用程序中。目标是操纵 .NET 框架的几个函数的输出。我通过挂钩底层 Windows API 函数成功地更改了读取注册表项的值,但我在读取系统硬盘签名和序列号的方式上遇到了麻烦。

它大致以这种方式使用 System.Management:

using System.Management;

internal static string GetHarddiskIdentifier()
{
    string[] properties = new string[] {"Signature", "SerialNumber"};
    var class = new ManagementClass("Win32_DiskDrive");
    var instances = class.GetInstances();
    foreach (ManagementObject mo in instances) {
        foreach (string w in properties) {
            object o = mo[w];
            if (o != null)
                return o.ToString();
        }
    }
    return string.Empty;
}

我浏览了 ManagementObject 类的.NET 参考源,寻找可以挂钩的 winapi 调用,但没有发现任何有用的东西。我还在一个测试程序上使用了一个api 监视器,只有这个代码,但即使过滤它就像大海捞针一样。

我的问题是,我将如何改变这种方法的结果?我无法挂钩目标应用程序的方法,因为程序集被混淆了,因此每次更新时名称都会更改。

4

0 回答 0