【源码】程序使用权限
本帖最后由 荒野孤行 于 2021-2-21 18:32 编辑此贴包含三种加密方式:
第一种:程序只可在规定时间内使用;
第二种:程序在规定时间内自行注册,可永久使用;
第三种:通过对比mac地址进行加密(根据坛友提供的源码而修改)。
(princ "\n若需测试加密程序一,请输入调用命令jm1\n")
(princ "\n若需测试加密程序二,请输入调用命令jm2\n")
(princ "\n请修改程序内的日期参数,程序会根据其与电脑时间的关系比较得出不同的结果,记得先用unload命令(见最后的一个程序)清除注册码\n")
;;;*****时间限制方法一: 程序只可在规定时间内使用 程序开始
(defun c:jm1 () ;加密主程序
(vl-load-com)
(setq rqsj (rtos (* (getvar "cdate") 1E8))) ;获取日期时间
(setq riqi (atoi (substr rqsj 1 8))) ;取出日期
(setq riqi_end 20161230) ;设置程序的试用截止日期
(setq wdy_BaseTime (+ (* riqi 11) 10086))
(setq wdy_EndTime (+ (* riqi_end 11) 10086))
(setq reg_BaseTime
(vl-registry-read
"HKEY_CURRENT_USER\\SOFTWARE\\Autodesk\\AutoCAD"
"BaseTime"
)
) ;基准日期,用于与截止日期进行比较
(if (or (= reg_BaseTime nil)
(< (atoi reg_BaseTime) wdy_BaseTime)
)
(setq
reg_BaseTime
(vl-registry-write
"HKEY_CURRENT_USER\\SOFTWARE\\Autodesk\\AutoCAD"
"BaseTime"
(itoa wdy_BaseTime)
)
)
)
(setq reg_EndTime
(vl-registry-read
"HKEY_CURRENT_USER\\SOFTWARE\\Autodesk\\AutoCAD"
"License1"
)
) ;使用截止日期
(if (= reg_EndTime nil)
(setq
reg_EndTime
(vl-registry-write
"HKEY_CURRENT_USER\\SOFTWARE\\Autodesk\\AutoCAD"
"License1"
(itoa wdy_EndTime)
)
)
(if (< (atoi reg_EndTime) wdy_EndTime)
(setq
reg_EndTime
(vl-registry-write
"HKEY_CURRENT_USER\\SOFTWARE\\Autodesk\\AutoCAD"
"License1"
(itoa wdy_EndTime)
)
)
)
)
(if (or (> (atoi reg_BaseTime) (atoi reg_EndTime))
;若基准日期转换值大于截止日期转换值
(/= (strlen reg_EndTime) 9)
;若截止日期转换值字符不等于9
(/= (rem (- (atoi reg_EndTime) 10086) 11) 0)
(/= (rem (- (atoi reg_BaseTime) 10086) 11) 0)
)
(wdy_right1)
)
(princ)
)
(defun wdy_right1 () ;核准验证码
(setq rqsj (rtos (* (getvar "cdate") 1E8)))
(setq riqi (atoi (substr rqsj 1 8)))
(setq UserCode (strcase (getstring "\n请输入验证码:")))
(setq
UserCode_OK
(strcase
(strcat
"WDY"
(itoa
(* (atoi (substr rqsj 1 5)) (atoi (substr rqsj 6 5)))
)
"D963C258B147A"
)
)
)
(if (= UserCode UserCode_OK)
(progn
(setq Year_current(atoi (substr rqsj 1 4))
Month_current (atoi (substr rqsj 5 2))
Time_add 3 ;设定有效区再延长3个月
Year_next (+ Year_current
(fix (/ (+ Month_current Time_add) 12))
)
Month_next (rem (+ Month_current Time_add) 12)
Day_current (atoi (substr rqsj 7 2))
Date_new (+ (* Year_next 10000)
(* Month_next 100)
Day_current
)
)
(setq EndTime_new (itoa (+ (* Date_new 11) 10086)))
(vl-registry-write
"HKEY_CURRENT_USER\\SOFTWARE\\Autodesk\\AutoCAD"
"License1"
EndTime_new
)
(alert
(strcat "\n恭喜您,验证成功!\n\n已将程序有效期延长至"
(itoa Year_next)
"年"
(itoa Month_next)
"月"
(itoa Day_current)
"日\n"
)
)
(princ)
)
(progn (alert "\n很抱歉,验证失败!\n") (exit))
)
(princ)
)
;;;*****时间限制方法一: 程序只可在规定时间内使用 程序结束
;;;*****时间限制方法二: 在规定时间内程序自行注册,可永久使用 程序开始
(defun c:jm2 () ;加密主程序
(vl-load-com)
(setq rqsj (rtos (* (getvar "cdate") 1E8))) ;获取日期时间
(setq riqi (atoi (substr rqsj 1 8))) ;取出日期
(setq riqi_start
20160101 ;设置程序的自动注册起始日期
riqi_end 20160902 ;设置程序的自动注册截止日期
)
(setq reg_license
(vl-registry-read
"HKEY_CURRENT_USER\\SOFTWARE\\Autodesk\\AutoCAD"
"License2"
)
)
(if (= reg_license nil)
(if (and (>= riqi riqi_start) (<= riqi riqi_end))
;设置权限自动注册日期;
;缺点:若使用者直接将电脑系统的日期改到此时间内,则可自行破解;
;若需更完善,可采用方法一添加基准时间去进行比较。
(vl-registry-write
"HKEY_CURRENT_USER\\SOFTWARE\\Autodesk\\AutoCAD"
"License2"
"A123B654C789D"
)
(wdy_right2)
)
(if (/= (strcase reg_license) "A123B654C789D")
(wdy_right2)
)
)
(princ)
)
(defun wdy_right2 () ;核准验证码
(setq rqsj (rtos (* (getvar "cdate") 1E8)))
(setq riqi (atoi (substr rqsj 1 8)))
(setq UserCode (strcase (getstring "\n请输入验证码:")))
(setq
UserCode_OK
(strcase
(strcat
"WDY"
(itoa
(* (atoi (substr rqsj 1 5)) (atoi (substr rqsj 6 5)))
)
"D963C258B147A"
)
)
)
(if (= UserCode UserCode_OK)
(progn (vl-registry-write
"HKEY_CURRENT_USER\\SOFTWARE\\Autodesk\\AutoCAD"
"License2"
"A123B654C789D"
)
(alert "\n恭喜您,验证成功!程序可永久使用!")
(princ)
)
(progn (alert "\n很抱歉,验证失败!\n") (exit))
)
(princ)
)
;;;*****时间限制方法二: 在规定时间内程序自行注册,可永久使用 程序结束
;;;通过管理员密码计算得出验证码 程序开始
(defun c:admin ()
(vl-load-com)
(setq rqsj (rtos (* (getvar "cdate") 1E8)))
(setq
ProveCode
(strcase
(strcat
"WDY"
(itoa
(* (atoi (substr rqsj 1 5)) (atoi (substr rqsj 6 5)))
)
"D963C258B147A"
)
)
)
(setq password (strcase (getstring "\n请输入管理员密码:")))
(if (= password "WDY123456789")
(princ
(strcat "\n管理员权限验证成功,您的注册码为:"
ProveCode
"\n"
)
)
(alert "\n管理员密码错误!")
)
(princ)
)
;;;通过管理员密码计算得出验证码 程序结束
;;;注册码清除 程序开始
(defun c:unload ()
(vl-registry-delete
"HKEY_CURRENT_USER\\SOFTWARE\\Autodesk\\AutoCAD"
"License"
)
(vl-registry-delete
"HKEY_CURRENT_USER\\SOFTWARE\\Autodesk\\AutoCAD"
"License1"
)
(vl-registry-delete
"HKEY_CURRENT_USER\\SOFTWARE\\Autodesk\\AutoCAD"
"License2"
)
(vl-registry-delete
"HKEY_CURRENT_USER\\SOFTWARE\\Autodesk\\AutoCAD"
"BaseTime"
)
(vl-registry-delete
"HKEY_CURRENT_USER\\SOFTWARE\\Autodesk\\AutoCAD"
"EndTime"
)
(alert "\n恭喜你,注册码信息清除成功!")
(princ)
)
;;;注册码清除 程序结束
第三种加密方式:
**** Hidden Message ***** 謝謝樓主!下載學習。 本帖最后由 baitang36 于 2024-7-31 13:05 编辑
发现这个老帖子被人顶上来了,可能有人喜欢,稍微改了一下,把dcl和lsp文件合并成了一个,改了mac地址的读取模块,让它能用。
这个程序对于初学注册的人还是一个很好的样本,但它有很多漏洞,很容易破解,不能用于保护值钱的软件的。
;;; *****获取本机的MAC地址 程序开始*****
(defun wdy_mac ()
(vl-load-com)
(vl-catch-all-apply
'(lambda ()
(vlax-for item (setq query (vlax-invoke
(vlax-invoke (vlax-create-object "WbemScripting.SWbemLocator") 'ConnectServer "." "root\\cimv2")
'ExecQuery
(strcat "select * " "from Win32_NetworkAdapterConfiguration " "where IPEnabled = True")
)
)
(setq retval (vlax-get item 'MACAddress))
)
)
)
(if query
(vlax-release-object query)
)
(setq macip retval)
)
;;; *****获取本机的MAC地址 程序结束*****
http://bbs.mjtd.com/plugin.php?i ... zMwMjUyMHwxMDkxNDM=
合并工具在这里:一键合并DCL和LSP文件 - AutoLISP/Visual LISP 编程技术 - AutoCAD论坛 - 明经CAD社区 - Powered by Discuz! (mjtd.com)
toproc 发表于 2018-9-9 13:28
不连线和连线虽然都能获取一堆MAC地址,但是连网后你通过判断,能直接获取当前连网的MAC地址。
如果用联网的网卡,那么有线、无线、VPN都不一样。注册后还限制联网方式,用户体验不佳。可以采用注册时绑定网卡的方式加密。为防止改时间破解,可以采用每一个工具命令执行时将当前时刻以加密的方式写入注册表,新命令执行时总是比较系统时间和注册表时间。 红豆沙煎焖子 发表于 2024-8-2 10:01
嗯呐,了解了,还想请教下这个注册程序可以加上时间限制吗
你仔细看代码,里面有的 baitang36 发表于 2024-8-2 05:42
把那部分单独拿出来就是注册机,注册机是自己用,不要给用户
嗯呐,了解了,还想请教下这个注册程序可以加上时间限制吗 红豆沙煎焖子 发表于 2024-8-1 15:43
哦哦 刚才仔细阅读了下代码,看到了末尾的注册码计算部分
把那部分单独拿出来就是注册机,注册机是自己用,不要给用户 感谢作者的分享! 红豆沙煎焖子 发表于 2024-8-1 15:36
您好,按照您说的尝试了下果然弹出了注册码对话框,我还有个问题这个注册码是在哪个程序算出来的?如果我 ...
哦哦 刚才仔细阅读了下代码,看到了末尾的注册码计算部分 baitang36 发表于 2024-7-31 16:41
它的主函数是 c:timelimit,你可以把你的主函数加到这个里面。
你直接在命令行敲timelimit试试
您好,按照您说的尝试了下果然弹出了注册码对话框,我还有个问题这个注册码是在哪个程序算出来的?如果我想和我的小插件绑定使用,用于插件的限期或者加密,这个应怎么操作呢,是编译在一起即可吗 红豆沙煎焖子 发表于 2024-7-31 15:30
您好,看到了您新上传的这个插件,我用CAD加载了一下没有弹出什么内容,请问这个是应该如何使用呢,菜鸟 ...
它的主函数是 c:timelimit,你可以把你的主函数加到这个里面。
你直接在命令行敲timelimit试试 baitang36 发表于 2024-7-31 13:03
下载这个试试
http://bbs.mjtd.com/plugin.php?id=imc_attachplug:attachdown&aid=MTM2MjEzfGFiMTEwYjNh ...
您好,看到了您新上传的这个插件,我用CAD加载了一下没有弹出什么内容,请问这个是应该如何使用呢,菜鸟一枚,还请不吝赐教! 红豆沙煎焖子 发表于 2024-7-31 11:57
为啥加载之后显示“; 错误: 输入的字符串有缺陷”呢
下载这个试试
http://bbs.mjtd.com/plugin.php?id=imc_attachplug:attachdown&aid=MTM2MjEzfGFiMTEwYjNhfDE3MjI0MDIxNTF8NzMwMjUyMHwxMDkxNDM=