社区
非技术版
帖子详情
求PB的给自己的程序增加注册机制的源代码
Goshawkx
2004-01-14 05:29:00
自己用pb做了个程序,想增加注册码机制来控制一下。
哪位高手能赐予pb的代码。非常感谢。
...全文
72
7
打赏
收藏
求PB的给自己的程序增加注册机制的源代码
自己用pb做了个程序,想增加注册码机制来控制一下。 哪位高手能赐予pb的代码。非常感谢。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
ld2099
2004-01-18
打赏
举报
回复
不过还存在一些问题,
1、可通过下载一个dll文件来取序列号
2、这个源码不是很好。作者在98下能够运行,而我在2000下运行就会出错,而且对字母也无效。
ld2099
2004-01-17
打赏
举报
回复
huoyan21(hy) 的代码很好。
ld2099
2004-01-16
打赏
举报
回复
学习!
Goshawkx
2004-01-15
打赏
举报
回复
好
我先试试。
huoyan21
2004-01-14
打赏
举报
回复
// 以下参数由RSA加密算法得来
integer li_e, li_d, li_n
li_e = 3 // 设置指数e,加密密钥
li_d = 7 // 设置指数d,解密密钥
li_n = 33 // 设置N:两个素数得乘积
string ls_str
ls_str = Trim(sle_1.text) // 将明文转换成字符串,以便随后进行分组
ulong lul_temp
lul_temp = 0
ulong lul_x, lul_y // lul_x: 加密明文; lul_y: 加密密文
int I
do until ls_str = ""
lul_temp = Integer(left(ls_str, 2))
if lul_temp >= li_n then // 将明文分组,且每组均小于N(N=33)
lul_temp = Integer(left(ls_str, 1))
ls_str = right(ls_str, len(ls_str)-1)
else
ls_str = right(ls_str, len(ls_str)-2)
end if
lul_y = 1
for I = 1 to li_e // 进行乘方运算
lul_y = lul_y * lul_temp
next
lul_y = mod( lul_y, 33) // 根据加密公式计算密文
sle_2.text = trim(sle_2.text) + string(lul_y) // sle_2.tex中存放的是加密后的密文
loop
/******************** 结束 *****************/
/**************** 解密程序代码 ***************/
ls_str = Trim(sle_2.text) // 与加密同理,将密文转换成字符串,以便随后进行分组
ulong lul_x0, lul_x1
do until ls_str = ""
lul_temp = Integer(left(ls_str, 2))
if lul_temp >= li_n then // 将密文分组,且每组均小于N(N=33)
lul_temp = Integer(left(ls_str, 1))
ls_str = right(ls_str, len(ls_str)-1)
else
ls_str = right(ls_str, len(ls_str)-2)
end if
// 由于考虑到乘方运算得结果可能会超出数值所允许得最大取值,
// 因此对解密公式进行适当转换,lul_x = lul_x0 * lul_x1
lul_x0 = 1
lul_x1 = 1
// 假如解密密钥是7,则先进行数的4次方运算取模,在进行数的3次方运算取模
for I = 1 to 4
lul_x0 = lul_x0 * lul_temp
next
lul_x0 = mod( lul_x0, 33)
for I = 1 to li_d - 4
lul_x1 = lul_x1 * lul_temp
next
lul_x1 = mod( lul_x1, 33)
lul_x = mod(lul_x0 * lul_x1, 33) // 根据解密公式计算明文
sle_3.text = trim(sle_3.text) + string(lul_x) // sle_3.tex中存放的是解密后的明文
loop
/******************** 结束 *****************/
总结,文中所提供的程序代码已经在PowerBuilder 7.0,Windows 98环境下运行通过。本文所讨论的通过读取硬盘序列号方法来实现程序加密技
术同样可以运用到其它程序语言中,只是具体的实现方法略有差异罢了。由于本人水平有限,错误和不足之处再所难免,因此还敬请同行们给予指
教。
huoyan21
2004-01-14
打赏
举报
回复
一、如何读取硬盘序列号
要读取硬盘序列号我们可以用汇编来实现,但毕竟不容易,况且也不能有效的结合到PB脚本中。在PB中我们可以通过调用Windows提供的外部函数
GetVolumeInformationA()来实现。这相对来说比较简单。
该函数的原型为:
BOOL GetVolumeInformation(
LPCTSTR lpRootPathName,
LPTSTR lpVolumeNameBuffer,
DWORD nVolumeNameSize,
LPDWORD lpVolumeSerialNumber,
LPDWORD lpMaximumComponentLength,
LPDWORD lpFileSystemFlags,
LPTSTR lpFileSystemNameBuffer,
DWORD nFileSystemNameSize
上述原型中,参数类型只要是以"LP-"开头的表明该参数用的是长指针(Long Pointer)类型,即在PB中调用时的参数传递是通过引用传递。在8
个参数中对我们真正有用的只有两个LPCTSTR lpRootPathName和LPDWORD lpVolumeSerialNumber。其中参数lpRootPathName是指向文件系统根目录的
地址,我们需要用它来指明所要获取序列号的硬盘盘符;参数lpVolumeSerialNumber是返回的硬盘序列号的地址,这正是我们需要的。
众所周知,PB在调用任何外部函数前都要首先进行函数声明,可以将声明放在全局或局部函数声明中。具体声明如下:
Function Boolean GetVolumeInformationA( &
ref String ls_Rootpath, &
ref String ls_volumnename, &
Ulong lul_VolumeNameSize, ref Ulong lul_VolumeSerialNumber, &
ref Ulong lul_MaximumComponentLength, &
ref Ulong lul_FileSystemFlags, &
ref String ls_FileSystemNameBuffer, &
Ulong lul_FileSystemNameSize &
) Library "Kernel32.dll"
上述声明中,"ref"指明是该参数是通过引用传递的,有关函数引用的详细内容请参见有关教程。声明完毕我们不能马上进行调用,还必需确保已
为它分配足够的内存空间,即使是参数引用传递也是这样,否则的话将会出现调用错误,这跟C语言的引用调用不同,这一点往往被忽视,希望读者能
够注意。也就是为什么我在调用该函数前将有些字符串参数给它预先分配了多达256个字符空间以及给一些整型类型的参数赋初始值256。完整的读取
硬盘序列号的程序代码如下:
/******************* 程序代码 ************************/
String ls_Rootpath, ls_volumnename
ls_Rootpath = "C:" // 指定要得到序列号的硬盘,
// 一般情况都是C盘,除非你能保证用户存在其它逻辑盘或物理盘
ls_volumnename = Space(256) // 分配足够的空间,下同
Ulong lul_VolumeNameSize
lul_VolumeNameSize = 256
Ulong lul_VolumeSerialNumber, lul_MaximumComponentLength, lul_FileSystemFlags
lul_MaximumComponentLength = 256
String ls_FileSystemNameBuffer
ls_FileSystemNameBuffer = space(256)
Ulong lul_FileSystemNameSize
lul_FileSystemNameSize = 256
beep(1)
boolean lb_rtn
lb_rtn = False
lb_rtn = GetVolumeInformationA(ls_Rootpath, ls_volumnename, lul_VolumeNameSize,
lul_VolumeSerialNumber, lul_MaximumComponentLength, lul_FileSystemFlags,
ls_FileSystemNameBuffer, lul_FileSystemNameSize)
if lb_rtn = true then
MessageBox("提示","函数调用成功!")
else
MessageBox("提示","函数调用失败!")
end if
sle_1.text = String(lul_VolumeSerialNumber) // 得到硬盘序列号
/********************* 结束 *************************/
yanghongfeng
2004-01-14
打赏
举报
回复
我用的是提取硬盘的物理id号,得到十进制的值后与一个字符的十进制的值进行取余后,得到的一串字符中的后面的几个字符为注册码。
只供参考。源代码我现在手里没有。
PowerBuilder反编译器:实用工具解读
PB
程序
PowerBuilder (简称
PB
) 是一种领先的快速应用开发工具,广泛用于开发跨平台的客户端服务器应用
程序
。
PB
反编译器,作为一种特殊的软件工具,它能够将已经编译完成的PowerBuilder应用
程序
代码还原成更为接近原始编码的形态。这种工具对维护和升级老旧的
PB
应用具有极大的价值,尤其是当
源代码
丢失或不完整时,能够提供显著的便捷性。在本章中,我们将对
PB
反编译器的作用、重要性以及它的市场地位和应用前景进行全面介绍。
PB
(
PB
ox):打造灵活的跨语言插件平台
PB
(
PB
ox):打造灵活的跨语言插件平台
PB
,全称为
PB
ox,是一个基于DLL的模块化开发平台,旨在以最小限度或不修改原有
源代码
的原则下,将Delphi、VC和QT的应用
程序
转化为可插入式模块。这个强大的工具箱不仅简化了多语言环境下的集成开发,还为软件的扩展性和灵活性开辟了新的可能。 项目介绍 在软件开发的浩瀚宇宙中,
PB
犹如一颗启明星,照亮了跨技术栈整合的道路。它支持基于Delphi的DLL...
PowerBuilder反编译工具实战:从.
pb
d和.dll到
源代码
一。Powerbuilder是如何编译成可执行文件的?二。Powerbuilder的可执行文件是哪些?PowerBuilder编译后的主
程序
文件,通常通过或模式生成,需搭配动态库(.dll或.
pb
d)运行17。三。Powerbuilder的开发优势四。反编译的主要用途五。
pb
decompiler 即
pb
反编译大师的优势。
Java
源代码
和字节代码操作
Java虚拟机平台代码的编译,运行流程: 1、用户编写、或运行时动态编译 => Java
源代码
2、javac、或使用工具动态创建 => Java字节码 3、Java字节码在被虚拟机执行前,修改代码内容来改变
程序
行为。 一、Java字节代码格式 大部分Java
源代码
在编译之后生成,保存在class文件中。(当然字节代码也可以通过网络从远程服务器下载,或运行时动态生成) 字节代
PB
与TreeView集成的
源代码
实现
TreeView控件是一种非常实用的界面元素,用于在树状结构中展示信息,尤其适用于需要层次化显示项目的数据场景。每个节点可以展开或折叠,便于用户快速浏览和操作。CTreeCtrl类的自定义绘
制
允许开发者在控件中绘
制
自定义内容,包括文本、图像等。此外,通过响应通知消息,可以实现复杂的节点选择行为。// 自定义绘
制
节点文本break;// 设置文本颜色为自定义颜色// 使用新的字体break;// 为节点选择行为添加自定义处理。
非技术版
401
社区成员
11,495
社区内容
发帖
与我相关
我的任务
非技术版
PowerBuilder 非技术版
复制链接
扫一扫
分享
社区描述
PowerBuilder 非技术版
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章