明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 88468|回复: 469

[源码] 【源码】程序使用权限

    [复制链接]
发表于 2014-2-4 11:06:37 | 显示全部楼层 |阅读模式
本帖最后由 荒野孤行 于 2021-2-21 18:32 编辑

此贴包含三种加密方式:

第一种:程序只可在规定时间内使用;
第二种:程序在规定时间内自行注册,可永久使用;
第三种:通过对比mac地址进行加密(根据坛友提供的源码而修改)。


  1. (princ "\n若需测试加密程序一,请输入调用命令jm1\n")
  2. (princ "\n若需测试加密程序二,请输入调用命令jm2\n")
  3. (princ "\n请修改程序内的日期参数,程序会根据其与电脑时间的关系比较得出不同的结果,记得先用unload命令(见最后的一个程序)清除注册码\n")

  4. ;;;*****时间限制方法一: 程序只可在规定时间内使用   程序开始
  5. (defun c:jm1 ()                                ;加密主程序
  6.   (vl-load-com)
  7.   (setq rqsj (rtos (* (getvar "cdate") 1E8))) ;获取日期时间
  8.   (setq riqi (atoi (substr rqsj 1 8)))        ;取出日期
  9.   (setq riqi_end 20161230)                ;设置程序的试用截止日期
  10.   (setq wdy_BaseTime (+ (* riqi 11) 10086))
  11.   (setq wdy_EndTime (+ (* riqi_end 11) 10086))
  12.   (setq        reg_BaseTime
  13.          (vl-registry-read
  14.            "HKEY_CURRENT_USER\\SOFTWARE\\Autodesk\\AutoCAD"
  15.            "BaseTime"
  16.          )
  17.   )                                        ;基准日期,用于与截止日期进行比较
  18.   (if (or (= reg_BaseTime nil)
  19.           (< (atoi reg_BaseTime) wdy_BaseTime)
  20.       )
  21.     (setq
  22.       reg_BaseTime
  23.        (vl-registry-write
  24.          "HKEY_CURRENT_USER\\SOFTWARE\\Autodesk\\AutoCAD"
  25.          "BaseTime"
  26.          (itoa wdy_BaseTime)
  27.        )
  28.     )
  29.   )
  30.   (setq        reg_EndTime
  31.          (vl-registry-read
  32.            "HKEY_CURRENT_USER\\SOFTWARE\\Autodesk\\AutoCAD"
  33.            "License1"
  34.          )
  35.   )                                        ;使用截止日期
  36.   (if (= reg_EndTime nil)
  37.     (setq
  38.       reg_EndTime
  39.        (vl-registry-write
  40.          "HKEY_CURRENT_USER\\SOFTWARE\\Autodesk\\AutoCAD"
  41.          "License1"
  42.          (itoa wdy_EndTime)
  43.        )
  44.     )
  45.     (if        (< (atoi reg_EndTime) wdy_EndTime)
  46.       (setq
  47.         reg_EndTime
  48.          (vl-registry-write
  49.            "HKEY_CURRENT_USER\\SOFTWARE\\Autodesk\\AutoCAD"
  50.            "License1"
  51.            (itoa wdy_EndTime)
  52.          )
  53.       )
  54.     )
  55.   )
  56.   (if (or (> (atoi reg_BaseTime) (atoi reg_EndTime))
  57.                                         ;若基准日期转换值大于截止日期转换值
  58.           (/= (strlen reg_EndTime) 9)
  59.                                         ;若截止日期转换值字符不等于9
  60.           (/= (rem (- (atoi reg_EndTime) 10086) 11) 0)
  61.           (/= (rem (- (atoi reg_BaseTime) 10086) 11) 0)
  62.       )
  63.     (wdy_right1)
  64.   )
  65.   (princ)
  66. )

  67. (defun wdy_right1 ()        ;核准验证码
  68.   (setq rqsj (rtos (* (getvar "cdate") 1E8)))
  69.   (setq riqi (atoi (substr rqsj 1 8)))
  70.   (setq UserCode (strcase (getstring "\n请输入验证码:")))
  71.   (setq
  72.     UserCode_OK
  73.      (strcase
  74.        (strcat
  75.          "WDY"
  76.          (itoa
  77.            (* (atoi (substr rqsj 1 5)) (atoi (substr rqsj 6 5)))
  78.          )
  79.          "D963C258B147A"
  80.        )
  81.      )
  82.   )
  83.   (if (= UserCode UserCode_OK)
  84.     (progn
  85.       (setq Year_current  (atoi (substr rqsj 1 4))
  86.             Month_current (atoi (substr rqsj 5 2))
  87.             Time_add          3                ;设定有效区再延长3个月
  88.             Year_next          (+ Year_current
  89.                              (fix (/ (+ Month_current Time_add) 12))
  90.                           )
  91.             Month_next          (rem (+ Month_current Time_add) 12)
  92.             Day_current          (atoi (substr rqsj 7 2))
  93.             Date_new          (+ (* Year_next 10000)
  94.                              (* Month_next 100)
  95.                              Day_current
  96.                           )
  97.       )
  98.       (setq EndTime_new (itoa (+ (* Date_new 11) 10086)))
  99.       (vl-registry-write
  100.         "HKEY_CURRENT_USER\\SOFTWARE\\Autodesk\\AutoCAD"
  101.         "License1"
  102.         EndTime_new
  103.       )
  104.       (alert
  105.         (strcat        "\n恭喜您,验证成功!\n\n已将程序有效期延长至"
  106.                 (itoa Year_next)
  107.                 "年"
  108.                 (itoa Month_next)
  109.                 "月"
  110.                 (itoa Day_current)
  111.                 "日\n"
  112.         )
  113.       )
  114.       (princ)
  115.     )
  116.     (progn (alert "\n很抱歉,验证失败!\n") (exit))
  117.   )
  118.   (princ)
  119. )
  120. ;;;*****时间限制方法一: 程序只可在规定时间内使用   程序结束

  121. ;;;*****时间限制方法二: 在规定时间内程序自行注册,可永久使用   程序开始
  122. (defun c:jm2 ()                                ;加密主程序
  123.   (vl-load-com)
  124.   (setq rqsj (rtos (* (getvar "cdate") 1E8))) ;获取日期时间
  125.   (setq riqi (atoi (substr rqsj 1 8)))        ;取出日期
  126.   (setq        riqi_start
  127.          20160101                        ;设置程序的自动注册起始日期
  128.         riqi_end 20160902                ;设置程序的自动注册截止日期
  129.   )
  130.   (setq        reg_license
  131.          (vl-registry-read
  132.            "HKEY_CURRENT_USER\\SOFTWARE\\Autodesk\\AutoCAD"
  133.            "License2"
  134.          )
  135.   )
  136.   (if (= reg_license nil)
  137.     (if        (and (>= riqi riqi_start) (<= riqi riqi_end))
  138.                                         ;设置权限自动注册日期;
  139.                                         ;缺点:若使用者直接将电脑系统的日期改到此时间内,则可自行破解;
  140.                                         ;若需更完善,可采用方法一添加基准时间去进行比较。
  141.       (vl-registry-write
  142.         "HKEY_CURRENT_USER\\SOFTWARE\\Autodesk\\AutoCAD"
  143.         "License2"
  144.         "A123B654C789D"
  145.       )
  146.       (wdy_right2)
  147.     )
  148.     (if        (/= (strcase reg_license) "A123B654C789D")
  149.       (wdy_right2)
  150.     )
  151.   )
  152.   (princ)
  153. )

  154. (defun wdy_right2 ()                        ;核准验证码
  155.   (setq rqsj (rtos (* (getvar "cdate") 1E8)))
  156.   (setq riqi (atoi (substr rqsj 1 8)))
  157.   (setq UserCode (strcase (getstring "\n请输入验证码:")))
  158.   (setq
  159.     UserCode_OK
  160.      (strcase
  161.        (strcat
  162.          "WDY"
  163.          (itoa
  164.            (* (atoi (substr rqsj 1 5)) (atoi (substr rqsj 6 5)))
  165.          )
  166.          "D963C258B147A"
  167.        )
  168.      )
  169.   )
  170.   (if (= UserCode UserCode_OK)
  171.     (progn (vl-registry-write
  172.              "HKEY_CURRENT_USER\\SOFTWARE\\Autodesk\\AutoCAD"
  173.              "License2"
  174.              "A123B654C789D"
  175.            )
  176.            (alert "\n恭喜您,验证成功!程序可永久使用!")
  177.            (princ)
  178.     )
  179.     (progn (alert "\n很抱歉,验证失败!\n") (exit))
  180.   )
  181.   (princ)
  182. )
  183. ;;;*****时间限制方法二: 在规定时间内程序自行注册,可永久使用   程序结束

  184. ;;;通过管理员密码计算得出验证码 程序开始
  185. (defun c:admin ()
  186.   (vl-load-com)
  187.   (setq rqsj (rtos (* (getvar "cdate") 1E8)))
  188.   (setq
  189.     ProveCode
  190.      (strcase
  191.        (strcat
  192.          "WDY"
  193.          (itoa
  194.            (* (atoi (substr rqsj 1 5)) (atoi (substr rqsj 6 5)))
  195.          )
  196.          "D963C258B147A"
  197.        )
  198.      )
  199.   )
  200.   (setq password (strcase (getstring "\n请输入管理员密码:")))
  201.   (if (= password "WDY123456789")
  202.     (princ
  203.       (strcat "\n管理员权限验证成功,您的注册码为:"
  204.               ProveCode
  205.               "\n"
  206.       )
  207.     )
  208.     (alert "\n管理员密码错误!")
  209.   )
  210.   (princ)
  211. )
  212. ;;;通过管理员密码计算得出验证码 程序结束

  213. ;;;注册码清除 程序开始
  214. (defun c:unload        ()
  215.   (vl-registry-delete
  216.     "HKEY_CURRENT_USER\\SOFTWARE\\Autodesk\\AutoCAD"
  217.     "License"
  218.   )
  219.   (vl-registry-delete
  220.     "HKEY_CURRENT_USER\\SOFTWARE\\Autodesk\\AutoCAD"
  221.     "License1"
  222.   )
  223.   (vl-registry-delete
  224.     "HKEY_CURRENT_USER\\SOFTWARE\\Autodesk\\AutoCAD"
  225.     "License2"
  226.   )
  227.   (vl-registry-delete
  228.     "HKEY_CURRENT_USER\\SOFTWARE\\Autodesk\\AutoCAD"
  229.     "BaseTime"
  230.   )
  231.   (vl-registry-delete
  232.     "HKEY_CURRENT_USER\\SOFTWARE\\Autodesk\\AutoCAD"
  233.     "EndTime"
  234.   )
  235.   (alert "\n恭喜你,注册码信息清除成功!")
  236.   (princ)
  237. )
  238. ;;;注册码清除 程序结束


第三种加密方式:
采用获取电脑的mac地址,与时间通过换算后组成序列号。请见附件(两个文件)!
这里的时间是软件使用的初始时间,以及软件试用到期的时间(通过时间对比判断软件是否到期,我还未写,有兴趣的同志可进行改进)。注册码是通过序列中的部分数据(即mac地址的部分数据)获取得来的,里面的crack是针对管理员而开放的,只要只要序列号,管理员输入正确的密码后,直接计算出注册码即可。
以上思路就是那样了,还需改进,有兴趣的可自行修改。

说明:
1.两个文件需要放在同一个位置
2.请将CAD文档也放在与两个文件一个位置,因为没有编译,只能通过相对路径读取
3.因为是采用的mac地址,所以需要联网才可测试(只有联网了电脑才可以读取mac)
4.如果不想用mac地址来加密,也可以通过硬盘ID、CPU ID来进行加密,论坛里面都有源码的。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

评分

参与人数 6明经币 +6 收起 理由
1028882406@qq.c + 1
lishucheng96 + 1
kingofauto + 1 很给力!
ucuc2003 + 1 赞一个!
zctao1966 + 1 很给力!
革天明 + 1 赞一个!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下

本帖被以下淘专辑推荐:

发表于 2019-1-19 14:08:06 | 显示全部楼层
謝謝樓主!下載學習。
回复 支持 1 反对 0

使用道具 举报

发表于 2024-7-31 12:51:30 | 显示全部楼层
本帖最后由 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)



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2018-9-25 16:20:39 | 显示全部楼层
toproc 发表于 2018-9-9 13:28
不连线和连线虽然都能获取一堆MAC地址,但是连网后你通过判断,能直接获取当前连网的MAC地址。

如果用联网的网卡,那么有线、无线、VPN都不一样。注册后还限制联网方式,用户体验不佳。可以采用注册时绑定网卡的方式加密。为防止改时间破解,可以采用每一个工具命令执行时将当前时刻以加密的方式写入注册表,新命令执行时总是比较系统时间和注册表时间。
发表于 2024-8-2 22:10:00 | 显示全部楼层
红豆沙煎焖子 发表于 2024-8-2 10:01
嗯呐,了解了,还想请教下这个注册程序可以加上时间限制吗

你仔细看代码,里面有的
发表于 2024-8-2 10:01:07 | 显示全部楼层
baitang36 发表于 2024-8-2 05:42
把那部分单独拿出来就是注册机,注册机是自己用,不要给用户

嗯呐,了解了,还想请教下这个注册程序可以加上时间限制吗
发表于 2024-8-2 05:42:24 | 显示全部楼层
红豆沙煎焖子 发表于 2024-8-1 15:43
哦哦 刚才仔细阅读了下代码,看到了末尾的注册码计算部分

把那部分单独拿出来就是注册机,注册机是自己用,不要给用户
发表于 2024-8-2 00:01:54 | 显示全部楼层
感谢作者的分享!
发表于 2024-8-1 15:43:56 | 显示全部楼层
红豆沙煎焖子 发表于 2024-8-1 15:36
您好,按照您说的尝试了下果然弹出了注册码对话框,我还有个问题这个注册码是在哪个程序算出来的?如果我 ...

哦哦 刚才仔细阅读了下代码,看到了末尾的注册码计算部分
发表于 2024-8-1 15:36:19 | 显示全部楼层
baitang36 发表于 2024-7-31 16:41
它的主函数是 c:timelimit,你可以把你的主函数加到这个里面。
你直接在命令行敲timelimit试试

您好,按照您说的尝试了下果然弹出了注册码对话框,我还有个问题这个注册码是在哪个程序算出来的?如果我想和我的小插件绑定使用,用于插件的限期或者加密,这个应怎么操作呢,是编译在一起即可吗
发表于 2024-7-31 16:41:49 | 显示全部楼层
红豆沙煎焖子 发表于 2024-7-31 15:30
您好,看到了您新上传的这个插件,我用CAD加载了一下没有弹出什么内容,请问这个是应该如何使用呢,菜鸟 ...

它的主函数是 c:timelimit,你可以把你的主函数加到这个里面。
你直接在命令行敲timelimit试试
发表于 2024-7-31 15:30:09 | 显示全部楼层
baitang36 发表于 2024-7-31 13:03
下载这个试试
http://bbs.mjtd.com/plugin.php?id=imc_attachplug:attachdown&aid=MTM2MjEzfGFiMTEwYjNh ...

您好,看到了您新上传的这个插件,我用CAD加载了一下没有弹出什么内容,请问这个是应该如何使用呢,菜鸟一枚,还请不吝赐教!
发表于 2024-7-31 13:03:38 | 显示全部楼层
红豆沙煎焖子 发表于 2024-7-31 11:57
为啥加载之后显示“; 错误: 输入的字符串有缺陷”呢

下载这个试试
http://bbs.mjtd.com/plugin.php?i ... zMwMjUyMHwxMDkxNDM=
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-12-23 08:12 , Processed in 0.203721 second(s), 37 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表