baitang36 发表于 2023-6-13 10:35:09

怎样防止对系统函数的监视

本帖最后由 baitang36 于 2023-6-16 11:16 编辑

autolisp可以重定义系统函数,这样可以通过重定义系统函数来进行监视,比如可以通过重定义=函数来监视明码比较的注册码,导致真正的注册码泄露给盗版者。
以下是试验过程:
命令: (defun + (a b) (princ a))
+

命令: (+ 1 2)
11

命令: (load "c:/00/trf_9.fas")
T

命令: (tranf "init:AUTOLISP-package")
T

命令: (init:AUTOLISP-package)
nil

命令: (+ 1 2)
3

命令: (defun c() (princ 3))
C

命令: (c)
33

命令: (init:AUTOLISP-package)
nil

命令: (c)
33
结论:比较注册码之前,调用init:AUTOLISP-package这个保留函数,可以初始化系统函数到原始状态,这样自定义的系统函数失效,也就无法监视系统函数了。

用法:

(load "trf_9.fas")      ;加载
(tranf "init:AUTOLISP-package") ;保留函数转成普通函数
(init:AUTOLISP-package)          ;调用




菜卷鱼 发表于 2023-6-15 08:58:42

盗版的人愿意花这么多时间精力来破解,为啥就不花点功夫去创新

tryhi 发表于 2023-6-13 11:53:18

老师没有讲出重点,其实总结下来就是一句话,函数init:AUTOLISP-package的作用是恢复所有系统函数的功能,只要将该函数放到你的程序的首行,即可防止系统函数被修改

baitang36 发表于 2023-6-13 15:34:16

小菜123 发表于 2023-6-13 14:51
如果load也被重定义了,就起不了作用

还有个办法,用独立名称空间。空间内用的系统函数都是干净的,只有vlx内部的fas才能起作用

机械工程师 发表于 2023-6-13 10:50:56

看一下是什么

taoyi0727 发表于 2023-6-13 10:52:40

看看大师又出了什么杰作,太顶了

cghdy 发表于 2023-6-13 10:58:24

看不懂

vink8023 发表于 2023-6-13 11:02:59

谢谢鹏哥,顶起

ljfzx 发表于 2023-6-13 11:10:47

我看不错噢 谢谢楼主!

loveu515 发表于 2023-6-13 11:15:51

看看是什么

baitang36 发表于 2023-6-13 11:20:21

本帖最后由 baitang36 于 2023-6-13 12:38 编辑

有的朋友说,看不懂。举个简单的例子吧
郎大侠的经典注册程序,http://bbs.mjtd.com/forum.php?mo ... hlight=%D7%A2%B2%E1,简洁、小巧,有很多人在用,也有很多人修改后在用。
;;; ==============================================
;;; lsp注册模块
;;; 使用方法,将(jiany0001)插到你的程序中即可使用
;;; ==============================================
(defun jiany0001(/ bb dcl_re f fname fsys jqm n zcm)
   (vl-load-com)
   (defun jy (jqm)         ; 算法:注册码=(机器码+144356842)^0.89取整,可自己修改
    (itoa (fix (expt (+ (atoi jqm) 144356842) 0.89))))
   (setq fsys (vlax-create-object "Scripting.FileSystemObject"))
   (if (/= (vlax-invoke-method fsys "DriveExists" "C") :vlax-false)
   (setq jqm (itoa (vlax-get-property (vlax-invoke-method fsys "GetDrive" "C") "SerialNumber"))))
   (setq zcm (vl-registry-read "HKEY_CURRENT_USER\\Software\\TH++\\" "Number"))
   (if (/= zcm (jy jqm))
   (progn
       (setq fname (vl-filename-mktemp "zhuc.dcl") f (open fname "w"))
       (write-line "zhuc:dialog{ label=\"注册信息\";" f)
       (write-line ":edit_box{label=\" 机器码\";key=\"e01\";edit_width=18;}" f)
       (write-line ":edit_box{label=\" 授权码\";key=\"e02\";edit_width=18;}" f)
       (write-line ":row{:button {label=\"注册\";key=\"e03\";is_default=true;}" f)
       (write-line ":button {label=\"取消\";is_cancel=true;}}}" f)
       (close f)
       (new_dialog "zhuc" (setq dcl_re (load_dialog fname)))
       (set_tile "e01" jqm)
       (set_tile "e02" "联系QQ:XXXXXX")
       (action_tile "e03" "(setq zcm(get_tile \"e02\")) (done_dialog 1)")
       (if (= (start_dialog) 1)(vl-registry-write "HKEY_CURRENT_USER\\software\\TH++\\" "Number" zcm))
       (unload_dialog dcl_re)
       (vl-file-delete fname)
       (if (/= zcm (jy jqm))
(progn(alert "注册失败!") (exit))
(alert "注册成功!"))))
   (princ)
)

对于这个程序,只要监视系统函数 /=,重定义它,就可以轻松拿到注册码。
用于监视的程序代码很简单,就这两句:
(setq o/= /=)
(DEFUN /=( A B ) (PRINT A ) (PRINT B ) (o/= A B ))

调用(init:AUTOLISP-package)后,监视程序失效, /=这个函数恢复原始状态,注册码就拿不到了。

试验过程:


命令: (LOAD "D:/监视不等于程序.lsp")
命令: (LOAD "D:/jian.lsp")
:vlax-true
:vlax-false
"12345"
"-725518847"
"1234567"
"-725518847" ; 错误: quit / exit abort



在注册框中随便输入"12345",这里的"-725518847" 就是真正的注册码。

黄翔 发表于 2023-6-13 11:44:26

学习一下...
页: [1] 2 3 4 5
查看完整版本: 怎样防止对系统函数的监视