我一直致力于制作一个C#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;
}
我已经通过管理对象类的.NET reference source,寻找我可以挂钩的winapi调用,但我没有找到任何有用的东西。我还在测试程序中使用api monitor只使用了这个代码,但即使过滤也就像在大海捞针一样。
我的问题是,我如何更改此方法的结果?我无法挂钩目标应用程序的方法,因为程序集被混淆,因此名称会随着每次更新而改变。