优秀的编程知识分享平台

网站首页 > 技术文章 正文

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

nanyue 2024-08-26 18:08:15 技术文章 5 ℃

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

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

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

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

如何用DLL实现注册认证

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

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

library CheckD11;
uses
SysUtils,Classes,Base64Unit;
{SR*.res}
//如果验证成功就返回 TRUE
function CheckUser(UerName,Registor:PChar):Boolean;stdcall;
begin
try
if StrPas(UerName)=Base64Decryption(StrPas(Registor)) then
Result:=True
else
Result:=False;
except
Result:=False;
end;
end;
法号到DL付
exports
CheckUser;
begin
end.
主程序调用DLL进行认证的示例代码如下:
procedure TForm1.Button1Click(Sender:TObject);
var
。ser:function(UerName,Registor:PChar):Boolean;sdcall;
hD1l:HMODULE;
begin
hDll:=LoadLibrary ( 'CheckD11.dll') ;
if hDll <> 0 then
begin
@CheckUser:=GetProcAddress(hDll, 'CheckUser');
if @CheckUser <> nil then
begin
if CheckUser(PChar(Edit1.Text),PChar(Edit2.Text)) then
ShowMessage('注册成功!')
else
end
showmessage('注册失败!');
else
ShowMessage('加载功能模块出错!);
FreeLibrary(hD11);
end
else
ShowMessage('无法加载DLL!');
end;
最近发表
标签列表