阻止调用dll

来源:百度知道 编辑:UC知道 时间:2024/06/09 05:06:10
如过我写了一个DLL文件,又写了一个exe文件,我用exe文件调用DLL中的函数,但是不能直接调用,而是要通过验证(注册码)才能调用。该怎么做,最好能有源程序,或者描述的尽量详细。可以发我邮箱hxf297385708@126.com,谢谢。语言C++

几种方法供参考:
1、存储注册码的加密版本到注册表,而后在DLL成员函数的一开始读取加密的注册码,解密后验证,不正确就退出,错误超过一定次数直接卸载DLL并删除。
2、在DLL的内部定义一个标志变量,没有鉴权时为0;而后添加一个鉴权的函数,每次使用DLL的方法前调用这个函数,验证成功注册码后把变量执1,在所有其他函数中检查这个变量的值,为1继续,0退出。

上面这两个方法都必须导出所有的函数,下面这个方法可以隐藏关键功能的函数,实现复杂度稍大,但是也不难,就是实现一个简单的工厂:

3、DLL对外只保留一个“工厂”接口,比如

//全局变量,用来存储每个接口的鉴权密码
std::string g_strPassword[16];

//不需要导出的功能函数1
int func1(...)
{
//第一句
if (false==fbCheckPassword(g_bPasswordOK[0].c_str()))
return ;
//做一些工作
...
// 清除鉴权,防止其他程序偷偷使用
g_bPasswordOK[0] = "";
return 1;
}
//不需要导出的功能函数2
void func2(...)
{
//第一句
if (false==fbCheckPassword(g_bPasswordOK[1].c_str()))
return ;

//做一些工作
...
// 清除鉴权,防止其他程序偷偷使用
g_bPasswordOK[1] = "";
return ;
}
...

extern "C" void * QueryFuncByName(int nFuncID,const char * pstrPwd) ;
//工厂
v