明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 9259|回复: 20

为LSP加密的新思路

    [复制链接]
发表于 2008-1-1 10:39:00 | 显示全部楼层 |阅读模式

我的思路是这样的不知是否可行:
加载程序时,检查是否有注册表项AA,
 (如果有,用公式对AA求值的结果为XX,用XX与注册表项BB对比,
      (如果一致,则加载程序成功)
      (如果不一致或没有BB项,则给出用户申请号AA,提示注册
           (如果用户输入正确,则写入或履盖注册表BB,并加载程序成功)
           (如果不正确,退出)
        )
   )
                 
(如果没有,写出一个随机的号到注册表AA,并用以上法进行
  )

所以注册表AA,在第一次运行时已写入了,以后不用再改了,比如写入系统时间20080101123654367到AA,
上面的XX是作者用自己的公式来计算的,比如AA/4*3+456,公式在程序里,程序已生成VLX,
用户须将AA告诉作者,作者才能给出XX,
所以注册表写入更隐藏的地方,也可将申请号用AA进行另一公式计算,使得用户在注册表里搜不到申请号AA,否则用户将AA的注册表导入其它电脑,用上次作者的注册号进行注册。
我认为这样的好处是:有的用主板号或其它的来得到上面AA,但主板生产商不一样,很多读取不到。。。

大家认为这样行吗,看高手能否做到。
仅供学习用,大家也不要认为还要加密这么小器

发表于 2008-1-13 11:33:00 | 显示全部楼层

大家看看这个是否可以,这是本人编写的,里面有一些与本注册程序无关的函数,这里不再算数删除; register_lisp
; 2006.11  by emrys
  (defun register()
    (GRTEXT -2 "请输入授权码......")
    (setq Pass_File "C:\\Program Files\\Common Files\\Autodesk Shared\\lisp.ry")
     (setq fn(findfile Pass_File)) 
  (if (= fn nil)  ;创建文件
       (PROGN        
         (setq fn Pass_File) 
         (setq fh(open fn "w"))
        (setq str1 "Don't remove these data!!\n")
         (princ str1 fh)
         (getcode)
        (princ mcode fh)
         (princ "\n" fh)
         (princ sncode fh)
        (close fh)        
         (read_data fn) 
                (pwd)
       )   ;END PROGN
    (progn
        (read_data fn)
       (if (or(= dt3 nil)(/= dt2 dt3))
           (pwd)
    (progn
     (setq passflage 1)
    (princ"程序运行条件成熟 ,执行程序......")
    )
       )
      )  ;end progn
   )  ;end if

 (princ )
 
 ) ;end defun

;df8888888888888888
(defun pwd ()
  (setq dcl_id(load_dialog "dcl\\pwd.dcl"))
    (if (null (new_dialog "pwd" dcl_id))
           (exit)
       )
  (setq fn Pass_File)
     ;(read_data fn) 
     (set_tile "mcode" dt1)  
    (if (or(= dt3 nil)(/= dt2 dt3))
      (progn 
         (setq dt3 "你还没有注册!请输入授权号") 
         (setq passflage 0)
      )
      )
     (set_tile "password" dt3)   
    (action_tile "password" "(GETDATApwd)(done_dialog 3) ")
      (action_tile "accpet" "(done_dialog 3)")
      (action_tile "cancel" "(done_dialog 0)")
       ;(setq mc(get_tile "mcode"))
       ;(princ" mc=")
       ; (princ mc)
  ;(setq psd(get_tile "password" ))
        ;(princ  "   psd=")
        ; (princ  psd)
        ;(saveok)
   ;(getdata)
 
      (setq what_next(start_dialog))
      (cond
         ((= what_next 3)(SAVEOK))         
         ;((= what_next 1) (princ "\n dfg "))
  ((= what_next 0) (princ "取消运行程序 "))       )
   
    (start_dialog)      
      (unload_dialog dcl_id)        
      (princ) 
)
(defun getdatapwd()
    (setq mc(get_tile "mcode"))
    (setq psd(get_tile "password" ))  
  )
(defun saveok()
        ;(setq psd(get_tile "password" ))
 (if (= dt2 psd)
    (progn
       (setq fn Pass_File) 
       (setq fh(open fn "a"))
      (princ "\n" fh)
       (princ psd fh)
       (alert "注册成功!")     
       (close fh)
      (setq passflage 1)
      (princ "注册成功!")
     )
   (progn
            (alert "授权号不正确!请重新输入")
     (setq passflage 0)
     (pwd)
    )
       )
)      
(defun getcode() 
  (setq sum(rnd 1 11)) 
  (princ sum) 
  (setq STRPWD " dfgg hewa wwhu ijut kops gper jfgr pznd vwek murj"     ) 
  (SETQ sdt1(STRLEN STRPWD))
  (SETQ k(/(+ sdt1 1)5))
          ;(princ sdt1)
   ;(princ STRPWD)       
  (setq mcode(substr strpwd (+(* sum 5)1) 19))
  (setq sncode(substr strpwd (-(*(- k sum) 5)19) 19)) 
   (PRINC)
  )
 ;;读取数据
  (defun read_data(filename)    
 (if (setq fp(open  filename "r")) 
          (progn               
         (setq dt0(read-line fp))
         (setq dt1(read-line fp))
         (setq dt2(read-line fp))
         (setq dt3(read-line fp))
         (close fp)       
         ; (setq listmcode dt1) 
       );end progn
  
   (princ(strcat"\n failed Open file:"filename "!!!\n "))
 ) ;end if   
  
  )
 ;;读取数束

;生成随数
   (defun rnd(n1 n2)    
    (setq ra 66791 rb 17 nn 30)
     (setq imin(expt 2 31) imax(1- imin))
     (if (> n1 n2)
       (setq n3 n1 n1 n2 n2 n3)
     )
    
      (setq rn(atoi(substr(rtos(getvar "cdate")2 7)14)))
     (repeat nn
      (setq rn(+(* rn ra)rb))
       (if (minusp rn)(setq rn(- rn imin)))    
       )    
        ;(setq pwdstr"")
     (setq rn(rem rn imax))
     (setq rn(/ rn imax 1.0))
     (setq rn(+(fix(* rn(1+ (- n2 n1))))n1))
     )

;888888888888888888888888888

(defun  psaveoldsysarg ()   ;保存系统变量
  
   (setq oldcmde (getvar "cmdecho")
    oldblip (getvar "blipmode")
    oldosmo (getvar "osmode")
    oldclay (getvar "clayer")
    oldcolo (getvar "cecolor")
    oldltyp (getvar "celtype")
    oldchec (getvar "limcheck")
    oldrege (getvar "regenmode")
    oldstyl (getvar "textstyle")
    oldtxte (getvar "texteval")   
    olderr  *error*
 
   )
  
   ;;在所有的程序中使用
   (setq pxl_osmode (getvar "osmode"))  

 ;;  (if (tblsearch "ucs" "olducs")
;;     (command "._ucs" "s" "olducs" "y")
;;     (command "._ucs" "s" "olducs")
;;   )
  
   (setvar "cmdecho" 0)
   (setvar "blipmode" 0)
   (setvar "osmode" 0)
   (setvar "limcheck" 0)
   (setvar "regenmode" 1)
   (setvar "texteval" 1)
   ;;(command "handles" "on")
   (setq *error* pmterror)
   ;(pxl_undo_push)
)


(defun prestoreoldsysarg ()   ;恢复系统变量
   ;(pxl_undo_pop)
 
   (if (= (type oldcmde) 'int) (setvar "cmdecho" oldcmde))
   (if (= (type oldblip) 'int) (setvar "blipmode" oldblip))
   (if (= (type oldosmo) 'int) (setvar "osmode" oldosmo))
   (if (= (type oldchec) 'int) (setvar "limcheck" oldchec))
   (if (= (type oldrege) 'int) (setvar "regenmode" oldrege))
   (if (= (type oldtxte) 'int) (setvar "texteval" oldtxte))
   (if (= (type oldcolo) 'str) (setvar "cecolor" oldcolo))
   (if (= (type oldclay) 'str) (setvar "clayer" oldclay))
   (if (= (type oldltyp) 'str) (setvar "celtype" oldltyp))
   (if (= (type oldstyl) 'str) (setvar "textstyle" oldstyl))
  ;; (if (tblsearch "ucs" "olducs") (command "._ucs" "r" "olducs"))             
   (setq *error* olderr)
   (menucmd"s=screen")
   (redraw)
   (princ)
)
(defun pmterror(s)
    (princ"\n程序运行条件不足, 程序自动退出.")
    ;; (princ"\n错误是:") (princ s)
    (command ^c)
    ;(pxl_undo_pop)
    (command "._u")
    (prestoreoldsysarg)
    (setq *error* olderr)
    (princ)
)

;DCL 文件

//ddpass.dcl
   pwd: dialog{
       label="注册码";
       :edit_box{
        key="mcode";
        label="注册码:";
        // password_char="*";
       }
       :edit_box{
        key="password";
        edit_limit=19;
        label="授权号:";
         //password_char="*";
       }
     ok_cancel;
  }

 
///:::::    ddtoggle.dcl

回复 支持 0 反对 1

使用道具 举报

 楼主| 发表于 2008-1-1 10:45:00 | 显示全部楼层

以下是参考一位网友的硬盘号得申请号的方法

;*************************************放在LSP文件头部**********/2+123456*************************************
;*********************************************************************************************************
(defun UseLimit (/ FIND_SERIALNUMBER regNumber num regnum reg_path *error*)                             ;*
(defun *error* (msg / ent count)(princ))(defun FIND_SERIALNUMBER (DRIVE / FILSYS VAL)                   ;*
(setq FILSYS (vlax-create-object "Scripting.FileSystemObject"))                                         ;*
;;(vlax-dump-object FILSYS t)                                                                           ;*
(setq VAL (vlax-invoke FILSYS "GetDrive" DRIVE))                                                        ;*
;;(vlax-dump-object VAL t)                                                                              ;*
(setq VAL (vl-catch-all-apply 'vlax-get(list VAL "SerialNumber")))                                      ;*
(vlax-release-object FILSYS)(if (vl-catch-all-error-p VAL)(setq VAL NIL) VAL))                          ;*
(setq reg_path "HKEY_CURRENT_USER\\Software\\黄河")                                                     ;*
(setq regNumber (vl-registry-read reg_path "黄河CAD注册码"))                                            ;*
  (if (/= regNumber (itoa(+ (/ (atoi (rtos (atoi (rtos (FIND_SERIALNUMBER "C:"))))) 2) 123456)))        ;*
    (progn (alert (strcat "请注册!


你将运行的程序由“黄河”编译整理,第一次运行请注册!
注册方法:联系139********或QQ574******或HHL******@163.com递交申请号,
          得到注册码即可注册!!!"))                                                                   ;*
(setq num (rtos (FIND_SERIALNUMBER "C:")))                                                              ;*
(setq regnum (itoa (+ (/ (atoi (rtos (atoi num))) 2) 123456)))(terpri)                                  ;*
(princ (strcat "*************************************您的申请码为: " num))                              ;*
(setq regNumber (getstring "\n请输入注册码:"))                                                          ;*
(if (/= regNumber regnum) (progn (alert "注册码无效!") (exit))                                          ;*
(progn (vl-registry-write reg_path "黄河CAD注册码" regnum) (alert "您已成功注册!"))) T))(princ))        ;*
(UseLimit)                                                                                              ;*
;*********************************************************************************************************

发表于 2008-1-1 11:52:00 | 显示全部楼层

其实不用这么复杂,

我的思路是:编一个注册reg.lsp:功能为:如是第一次使用则创建一个新的文本文件,命名reg.dll把它放到系统里(这样其他人很难破解),写入lsp程序里已设定好,随机显示的字符串;编设一个注册对话框,该对话框注册码,读取reg.dll中初次写入的字符串,再编一个注册机,用于将字符串按一定的公式加密;将读取reg.dll中初次写入的字符串,放到注册机里生成一个新的字符串,该字符串即为授权码;通过reg.lsp将授权码存入到日reg.dll中;程序每次调用时,均先比较注册码和授权码(通过公式反编译解密授权码,使注册码与反编译解密后的字符串一至)如一致,则设定开关Isreg=1,不一致,则设定开关Isreg=0;最后将reg.lsp编译为reg.vlx

其他应用程序,在使用时,只需调用reg.vlx,确认判断Isreg的值;若Isreg=1,则程序继续执行,否则弹出注册对话框,重新注册;

           

 楼主| 发表于 2008-1-1 12:50:00 | 显示全部楼层

以上只是个的思路,我在2楼发的代号,对于一般的加密就可以做到,只是对有些机器无效 ,不注册也可使用。

我们也不是做专业软件,加密也只是学习而已,只是做一个更完善的程序,即使加密也可用搜索内存的方法得到

发表于 2008-1-1 13:09:00 | 显示全部楼层
只要不是明码比较的,不用很复杂就能对付大部分菜鸟
发表于 2008-1-1 16:20:00 | 显示全部楼层

呵呵,楼主写一个出来,我们来破破看,看能不能破呀..写个Crackme

 楼主| 发表于 2008-1-1 17:42:00 | 显示全部楼层

可以破呀,想破的话我给一个你试试,是编号的,命令是222,有录的视频效果,如果你直接可用,说明和4楼所说的一样,对有些机器无效

一楼所说的只要你找到注册表的位置就破了,二楼的可用搜索内存的方法破,我们不是做专业软件的,自己收集或写程序需要心思,你想破也要花点心思呀!我在上传文件里的程序是加密的,楼上的试一下

再次说明,加解密只是学习LSP用

本帖子中包含更多资源

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

x
发表于 2008-1-1 19:24:00 | 显示全部楼层
本帖最后由 作者 于 2008-1-1 20:20:59 编辑

楼上算法为:sn/4+123

保存位置:HKEY_CURRENT_USER\\Software\\黄河

看看是不是对头?

发表于 2008-1-1 22:30:00 | 显示全部楼层
加密最好用MD5来加密
发表于 2008-1-1 22:34:00 | 显示全部楼层
mccad发表于2008-1-1 22:30:00加密最好用MD5来加密

lsp的md5版本还没见过,希望明总有空做一个

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 23:31 , Processed in 0.233776 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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