龙空技术网

软件开发中,如何使用DLL模式实现软件注册认证?

流逝在键盘下的记忆 107

前言:

而今我们对“易语言编写dll文件”大体比较重视,咱们都想要了解一些“易语言编写dll文件”的相关知识。那么小编同时在网上搜集了一些有关“易语言编写dll文件””的相关内容,希望兄弟们能喜欢,大家一起来了解一下吧!

本文介绍如何实现把算法写到DLL文件中,同时在DLL文件中进行注册认证。

用DLL实现注册认证的优点与缺点

软件作者可能使用多种语言进行软件开发,不同的开发语言完成了一个或是几个产品,并且只使用了其中一种语言进行了注册认证和注册认证算法的实现,那另外的语言开发的产品又要重新写注册认证功能吗?回答是:不需要。只要把你已写好的这种语言里面的注册验证和验证算法修改一下,封装成一个DLL提供给其他的产品调用就可以了,这样既能节省时间又能提高效串:还有就是注册认证算法不在主程序中,破解者要分析注册认证算法调试起来也很困难。

使用DLL实现注册认证的缺点就是DLL文件会被解密者分析出验证函数以及验证函数的参数、然后根据验证函数名及参数自己设计一个DLL,导出一个与真正的验证函数相同的函数接口,让这个函数接口直接返回注册验证正确的那个值。这样不需要了解软件使用什么算法就把软件破了。所以在使用DLL实现注册认证的时候,需要对这个DLL进行加壳,然后在主程序中对这个DLL进行校验,看是否是自己的验证DLL,并且在DLL中还可以对主程序进行校验,检测主程序是否被脱壳。

如何用DLL实现注册认证

在DL中实现注册认证和在程序本身中实现注册认证是一样,都是训用注册认证域换采规方注册认口,然后判新认证结果进行相应的操作。在使用DIL进行注册认证的时候,需要检测的完整性,以防止DLL被替换掉。

注册认证DLL的完整示例代码如下:

library CheckD11;usesSysUtils,Classes,Base64Unit;{SR*.res}//如果验证成功就返回 TRUEfunction CheckUser(UerName,Registor:PChar):Boolean;stdcall;begintryif StrPas(UerName)=Base64Decryption(StrPas(Registor)) thenResult:=TrueelseResult:=False;exceptResult:=False;end;end;法号到DL付exportsCheckUser;beginend.主程序调用DLL进行认证的示例代码如下:procedure TForm1.Button1Click(Sender:TObject);var。ser:function(UerName,Registor:PChar):Boolean;sdcall;hD1l:HMODULE;beginhDll:=LoadLibrary ( 'CheckD11.dll') ;if hDll <> 0 thenbegin@CheckUser:=GetProcAddress(hDll, 'CheckUser');if @CheckUser <> nil thenbeginif CheckUser(PChar(Edit1.Text),PChar(Edit2.Text)) thenShowMessage('注册成功!')elseendshowmessage('注册失败!');elseShowMessage('加载功能模块出错!);FreeLibrary(hD11);endelseShowMessage('无法加载DLL!');end;

标签: #易语言编写dll文件