明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: 黄河

为LSP加密的新思路

    [复制链接]
发表于 2008-1-2 20:39:00 | 显示全部楼层
哪怕不是明码对比也十分容易破解,内存跟踪器加上一点时间,容易的,当然对付菜鸟不需要加什么密,只要随意一个写文件、注册表之类的就足够了,关键是怎样写得更好的程序。当然适当保护也是需要的。
 楼主| 发表于 2008-1-2 22:13:00 | 显示全部楼层
8楼所答的正确,我要的效果也只是稍稍加一下密,就是说不要一加载就可用,至于能不能破解不管,我想但是要对所有机器有效。
发表于 2008-1-2 23:23:00 | 显示全部楼层
本帖最后由 作者 于 2008-1-2 23:27:20 编辑

vb的,网上搜的.没试过

MD5的VB类模块源码,可支持中文

http://bbs.office-cn.net/dispbbs.asp?boardid=150&id=31806

MD5加密的VB类模块源码  
 

http://blog.csdn.net/lucaslynn/articles/475596.aspx

MD5加密器源码(16/32)

http://d.download.csdn.net/down/150918/dxef

转帖一个忘了出处的精华[MD5加密的javascript实现例子]

http://www.testage.net/html/12/n-89412.html

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

11楼所说的“内存跟踪器”指的是??时间是必须要的

12楼黄河:程序不被解密更重要

13楼无痕刀:对lsp安全上来说,全部代码用lsp写有时候更安全

发表于 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-13 20:35:00 | 显示全部楼层

[注意]从程式表面上看,加密存在一些漏洞

楼上的加密,相信花了不少时间研究...只是有些函数没有提供...无法断定好坏....

(先声明:说实话,解密工具我不会用,只是了解有这么一种东东,例如:winHEX之类的=>不知道是不是这样写)

(1) 先排除专业解密的工具不说,只要成功注册了你的程式,用最基本的硬盘备份工具(如GHOST之类),就有[可能]不再需要你提供注册码,就能无限制使用,但上面也提到过了,有些函数没有提供,无法断定好坏/无法断定加密是否有效/是否能排除硬盘备份这类功能....

(2) 如果你的程式很重要,加密技术最好由自己创新,毕竟自己写的加密技术,只有自己最了解是否存在漏洞,才能把漏洞机率降至最低......

(3) 另外,从加密程式的严密性来说,重要的变量没有考虑清空/用第3方软件可以拦截得到,例如变量dt2,是全局变量吗?这个应该是用来比较的注册码,而且是正确的注册码,要是我在对话框那,按ESC取清,那dt2变量应该还存在值,那么用(princ dt2),就能得到注册码,你说是不?

以上几点仅供参考, 希望对你的加密程式有所帮助....

对了,上次多亏[lidejun_55]兄的指点,对lisp加密技术这块,有深入的研究,实在很感谢呀...

发表于 2008-1-14 16:14:00 | 显示全部楼层

佩服!佩服!

原来LSP还可以这样玩!

受教了

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

好东东,但是我不懂,学习中..............

发表于 2010-4-13 22:08:00 | 显示全部楼层
我也在学习中
发表于 2011-12-31 16:08:18 | 显示全部楼层
又学习好东西了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-26 02:03 , Processed in 0.167640 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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