#include
被调用的程序集必须具备以下签名: static int pwzMethodName (String pwzArgument) 参考地址:) 通过此方法可以在一定程度上阻止它人对.NET程序破解的难度(某些菜鸟看到此程序不是.NET的就会死心)。但是通过PEID可以看出我们调用了.NET的某个核心的DLL中的函数(CLRCreateInstance): 我们要把它从导入表中去除。可以通过LoadLibrary动态加载并调用它里面的导出函数,这样就不会在EXE的导入表中看到这个函数了。然后再把被调用的真正程序集隐藏某个地方(如'在运行时把程序还原成文件并存储到某个目录下,并且锁定目录阻止其它程序读写。用完再删除')。这样就更好了! 1 //定义函数指针类型 2 typedef HRESULT (WINAPI *MyCLRCreateInstance)(REFCLSID clsid, REFIID riid, LPVOID *ppInterface); 3 4 //将此行改为以下三行内容:CLRCreateInstance(CLSID_CLRMetaHost, IID_ICLRMetaHost, (LPVOID*)&pMetaHost); 5 HMODULE clrmd=LoadLibrary(L"mscoree.dll"); 6 MyCLRCreateInstance func=(MyCLRCreateInstance)(GetProcAddress(clrmd,"CLRCreateInstance")); 7 HRESULT hr = func(CLSID_CLRMetaHost, IID_ICLRMetaHost, (LPVOID*)&pMetaHost); 8 9 //略...10 11 //最后FreeLibrary12 FreeLibrary(clrmd);
|