用PBNI实现软件注册授权控制(一)
来源:互联网 发布:知者行之始 行者知之成 编辑:程序博客网 时间:2024/05/21 10:34
自从PB的程序可以被pbkiller和shudepb反编译以来,程序的安全性,软件的注册授权控制就存在很大的风险,这些核心代码被轻易的暴露出来,从而导致程序很容易被破解,损害软件开发者的利益。因此有人把这部分核心代码,采用VC或Dephi进行重写,并编译为dll的方式给pb的程序调用,以免注册部分的代码被反编译,以防止软件被破解,而不是采用PBNI的方式,其实这样做也是不安全的。下面将通过实例,演示采用dll来进行软件注册控制的不安全性。
首先,使用vc6开发一个TestA的动态连接库工程,这个库文件包含两个函数,CheckKey和Add, CheckKey用于判断输入的字符串,是否等于12345678,相等则返回TRUE,否则返回False, Add函数用于返回两个数相加的结果。代码很简单,如下:
{
if(strcmp(key,"12345678")==0)
return TRUE;
else
return FALSE;
}
int WINAPI Add(int a, int b)
{
return a+b;
}
编译生成TestA.dll文件。然后用PB9新建一个应用程序,并把TestA.dll文件拷贝到这个程序目录下面。
增加一个w_main窗口,在窗口的Local External Function中定义以下两个API函数
Function int Add(int a ,int b ) Library "TestA.dll"
在窗口中增加两个按扭,分别为CheckKey和Add,其中CheckKey按扭的代码如下:
Add按钮的代码如下:
运行程序,点击CheckKey按钮,弹出下面两个窗口
点击Add按钮,弹出下面窗口
下面,我们用pbkiller反编译这个应用生成后的pbd文件,查看w_main窗口的代码,我们可以清楚的看到TestA.dll这个库文件的函数定义,包括函数名称和参数列表。在取得这些信息之后,我们就可以写一个dll文件,来绕开CheckKey这个函数,让其总是返回TRUE,这样就使得注册验证失效了。
还是使用VC6 新建一个TestB的动态连接库的工程,在工程里面增加以下两个函数,其中CheckKey不做任何校验处理,直接返回TRUE,Add函数则调用原来TestA(改名为MyTestA.dll)库文件的函数。
dll,然后把原来pb程序目录下的testA.dll文件改名为MyTestA.dll,然后把TestB.dll文件拷到pb程序目录下,并更名为TestA.dll。
运行程序,点击CheckKey按钮后,弹出以下窗口
编译这个
点击Add按钮后,弹出以下窗口
CheckKey功能已经失效,Add功能与原来的效果一样。
但如果DLL文件中不公开CheckKey函数,而是在调用Add函数的时候,调用CheckKey,则就没办法绕开了.
从上面的程序执行情况看,
- 用PBNI实现软件注册授权控制(一)
- 用PBNI实现软件注册授权控制(二)
- PowerBuilder Native Interface(PBNI)(一)
- 用加密狗控制软件的授权(C#)
- 软件使用的授权与注册
- iOS10通知(一)--申请授权、注册和获取授权信息
- C#实现软件注册
- 基于授权和角色的访问控制的设计和实现(一)
- 一 Jenkins的授权和访问控制
- kubernetes安全控制认证与授权(一)
- 第三章 授权(一)访问控制
- 如何进行通达OA麦枫版软件的授权注册?
- VC实现软件注册CODE
- 根据机器码实现软件注册
- Shiro认证授权业务软件实现流程
- IM-linux一款linux下即时通讯软件实现(一)登陆注册实现
- [收藏]常见木马和未授权控制软件的关闭
- 用户注册实现方案一
- oracle 查看并修改最大连接数
- ORA-00905 与 GRANT ALL
- 用PBNI实现软件注册授权控制(二)
- 3 Perl - 列表
- 如何使用PHP生成动态配置文件
- 用PBNI实现软件注册授权控制(一)
- 各种排序算法java实现
- 得到android的系统信息
- Android software R&D engineer能力模型
- Hibernate知识点总结
- 3 Perl - 列表 - qw
- Mozilla NPAPI(Part 4)
- Word页码随意定
- Android2.2中添加的match_parent和fill_parent没有区别