明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2980|回复: 53

[经验] 怎样防止对系统函数的监视

[复制链接]
发表于 2023-6-13 10:35 | 显示全部楼层 |阅读模式
本帖最后由 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)          ;调用




本帖子中包含更多资源

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

x

评分

参与人数 3明经币 +2 金钱 +64 收起 理由
nuan1989 + 14 大朋牛叉
dtucad + 1 很给力!
MUSIC-DIE + 1 + 50 很给力!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2023-6-15 08:58 | 显示全部楼层
盗版的人愿意花这么多时间精力来破解,为啥就不花点功夫去创新
回复 支持 2 反对 0

使用道具 举报

发表于 2023-6-13 11:53 | 显示全部楼层
老师没有讲出重点,其实总结下来就是一句话,函数init:AUTOLISP-package的作用是恢复所有系统函数的功能,只要将该函数放到你的程序的首行,即可防止系统函数被修改

点评

结论:比较注册码之前,调用init:AUTOLISP-package这个保留函数,可以初始化系统函数到原始状态,这样自定义的系统函数失效,也就无法监视系统函数了。  发表于 2023-6-13 12:33
回复 支持 2 反对 0

使用道具 举报

 楼主| 发表于 2023-6-13 15:34 | 显示全部楼层
小菜123 发表于 2023-6-13 14:51
如果load也被重定义了,就起不了作用

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

使用道具 举报

发表于 2023-6-13 10:50 | 显示全部楼层
看一下是什么
发表于 2023-6-13 10:52 | 显示全部楼层
看看大师又出了什么杰作,太顶了
发表于 2023-6-13 11:02 | 显示全部楼层
谢谢鹏哥,顶起
发表于 2023-6-13 11:10 | 显示全部楼层
我看不错噢 谢谢楼主!
发表于 2023-6-13 11:15 | 显示全部楼层
看看是什么
 楼主| 发表于 2023-6-13 11:20 | 显示全部楼层
本帖最后由 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" 就是真正的注册码。

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2024-5-8 16:42 , Processed in 0.393705 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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