我最近听说.dd一旦加载就可以运行代码,例如,当加载引用.dll的应用程序时.事件虽然我做了一些我自己的测试,并尝试在这里寻找答案,在谷歌我无法找到一些方法来生成.dll的初始化方法.
我想知道是否真的可以在应用程序加载时从.dll运行代码.
如果是这样,我该怎么办?
警告(感谢Ben Voigt的捕获:)):以下代码仅适用于C#,它保证生成的类不会在beforefieldinit之前.但是使用C++/CLI不应该那么容易:在.net4中没有调用托管C++静态构造函数
因此,如我的评论中所述,您可以使用以下内容:
using System;
class MyAwesomeLibrary
{
static MyAwesomeLibrary()
{
Console.WriteLine(string.Format("Hey {0} is using me!", Environment.UserName));
}
public static int GetTheAnswer()
{
return 42;
}
}
class Client
{
static void Main()
{
Console.WriteLine("The answer is: " + MyAwesomeLibrary.GetTheAnswer());
}
}
Run Code Online (Sandbox Code Playgroud)
在静态构造函数中,您可以执行高级操作,例如检查注册表,与服务器通信......
如果你是一个坏人(或者只是想要保护其权利的开发者/公司),你可以抛出异常:
throw new Exception("The library has not been correctly registered...");
Run Code Online (Sandbox Code Playgroud)
这将导致TypeInitializationException阻止使用整个库类.
或者你可以实现一个CheckMe方法,并要求所有用户在使用库之前调用它,甚至要进行身份验证并获取他们每次使用时都会使用的安全令牌......
编辑:
无论您使用何种保护措施,确定的攻击者都可以通过反编译库来绕过所有管道,如果可以的话,您应该对您的库进行模糊处理(稍微)一点点保护.
| 归档时间: |
|
| 查看次数: |
7273 次 |
| 最近记录: |