下面几处引用来自明俊cad
;图纸简单加密(Lisp) by sailorcwx
;程序原理:
;利用多重引用块不能解散和匿名块不可编辑的原理,通过程序创建匿名多重引用块
;从而达到简单加密的目的
(defun c:JM(/ BLOCKNAME SELECTIONSET)
;定义函数
(vl-load-com)
;加载Vlisp函数
(if (setq Selectionset (ssget))
;选择加密对象
(progn
(setq BlockName (getvar "CDATE"))
;以当前时间作为块名
;因为我们要用多重引用块进行加密,在制作多重引用块之前我们必须将我们需要
;加密的图元制作成块,为避免与图档内块名冲突,引用了当前时间作为块名
(command "block" BlockName '(0 0 0) Selectionset "" "minsert"
BlockName '(0 0 0) 1 1 0 2 2 0 0)
;用block命令制作块,然后用minsert命令制作多重引用块
(vla-put-name (vla-item (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) (vla-get-name (vlax-ename->vla-object (entlast)))) "*U")
;将多用引用块改成匿名多重引用块。匿名块不是无名块,它是以*U命名的,在块
;编辑框中不现实匿名块的块名,从而无法编辑。
(princ "\n加密完成")
)
(princ "\n没有选中图元")
)
(princ)
)
;程序原理:
;利用多重引用块不能解散和匿名块不可编辑的原理,通过程序创建匿名多重引用块
;从而达到简单加密的目的
(defun c:JM(/ BLOCKNAME SELECTIONSET)
;定义函数
(vl-load-com)
;加载Vlisp函数
(if (setq Selectionset (ssget))
;选择加密对象
(progn
(setq BlockName (getvar "CDATE"))
;以当前时间作为块名
;因为我们要用多重引用块进行加密,在制作多重引用块之前我们必须将我们需要
;加密的图元制作成块,为避免与图档内块名冲突,引用了当前时间作为块名
(command "block" BlockName '(0 0 0) Selectionset "" "minsert"
BlockName '(0 0 0) 1 1 0 2 2 0 0)
;用block命令制作块,然后用minsert命令制作多重引用块
(vla-put-name (vla-item (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) (vla-get-name (vlax-ename->vla-object (entlast)))) "*U")
;将多用引用块改成匿名多重引用块。匿名块不是无名块,它是以*U命名的,在块
;编辑框中不现实匿名块的块名,从而无法编辑。
(princ "\n加密完成")
)
(princ "\n没有选中图元")
)
(princ)
)
首先,不能说“加密”,因为这种方法没多少技术含量,一破就开
MINSERT插入的图块叫“多重插入块”,有点象列阵一样。这种“多种插入块”是不能被分解的。
用它还不能解决问题,因为插入图块后,图块就留在图形文件中,别人不能分解,但照样可以重新利用图块插入,所以,单纯的“多重插入块”起不到所谓的“加密”作用。
接下来就是如何消除图形文件上的块,让别人无图块好插。
“匿名块”,好像也叫“无名块”具有这个特性。
于是,匿名块+多重插入块 ,也就是 多重插入匿名块 之“加密”出笼了。
这起到作用了吗?
对只会用命令画图的人来说,只想到用已有的命令去解决,自然对它束手无策,同时,也正是这类用户,似乎拣了个金元宝,“加密”之风到处刮,比台风还起劲。
对稍有编程常识的用户来说,ACAD命令不能解决,很自然就会去查这个对象的特性,也就是它的数据列表,哈哈~~,一查,原形毕露了。
尾巴露出来了,对付的办法也就有了。编个小程序,对付它不费吹灰之力。
看下面贴图,普通图块与多重插入块差别在哪不是一目了然了吗?
再想想,这种骗骗小孩的“加密”把戏值得推荐吗?
稍有常识的人都知道,图纸都给人家了,不管什么形式不管什么格式文件,反正人家看到图形了,还有什么“密”可言?PDF文件格式的发明,也只是降低文件大小和不希望随便编辑而已,没有“保密”成分,何况,PDF的文章照样能转成WORD文件,只要有相应的工具。
MINSERT插入的图块叫“多重插入块”,有点象列阵一样。这种“多种插入块”是不能被分解的。
用它还不能解决问题,因为插入图块后,图块就留在图形文件中,别人不能分解,但照样可以重新利用图块插入,所以,单纯的“多重插入块”起不到所谓的“加密”作用。
接下来就是如何消除图形文件上的块,让别人无图块好插。
“匿名块”,好像也叫“无名块”具有这个特性。
于是,匿名块+多重插入块 ,也就是 多重插入匿名块 之“加密”出笼了。
这起到作用了吗?
对只会用命令画图的人来说,只想到用已有的命令去解决,自然对它束手无策,同时,也正是这类用户,似乎拣了个金元宝,“加密”之风到处刮,比台风还起劲。
对稍有编程常识的用户来说,ACAD命令不能解决,很自然就会去查这个对象的特性,也就是它的数据列表,哈哈~~,一查,原形毕露了。
尾巴露出来了,对付的办法也就有了。编个小程序,对付它不费吹灰之力。
看下面贴图,普通图块与多重插入块差别在哪不是一目了然了吗?
再想想,这种骗骗小孩的“加密”把戏值得推荐吗?
稍有常识的人都知道,图纸都给人家了,不管什么形式不管什么格式文件,反正人家看到图形了,还有什么“密”可言?PDF文件格式的发明,也只是降低文件大小和不希望随便编辑而已,没有“保密”成分,何况,PDF的文章照样能转成WORD文件,只要有相应的工具。
破解程序:
(Defun C:Unlockup (/ CmdEcho Index SSet SName Model Paper)
(setq CmdEcho (getvar "CmdEcho"))
(setvar "CmdEcho" 0)
(if (null (wcmatch (getvar "ACADVer") "14*"))
(alert (strcat
"\n AutoCAD版本匹配错误"
"\n *****************************************"
"\n 在当前的AutoCAD版本下无法完成解锁"
"\n 当前图形的命令"
"\n 如果要解锁当前图形, 请手动修改"
"\n 无名块的行列数据从2到0"
"\n 保存成R14.0格式的图形文件"
"\n 使用AutoCAD R14.0打开并炸开"
"\n 或在AutoCAD R14.0下使用本命令"
"\n *****************************************")
)
(progn
(princ "\n 正在解锁当前图形,请等候...")
(command "_.Layer" "_T" "*" "_ON" "*" "_UNLOCK" "*" "")
(while (setq SSet (ssget "x"
(list (cons 0 "INSERT")
(cons 70 2)
(cons 71 2)
)
)
)
(setq Index -1
Model nil
Paper nil
)
(repeat (sslength SSet)
(setq SName (entget (ssname SSet (setq Index (1+ Index)))))
(if (= (substr (cdr (assoc 2 SName)) 1 2) "*U")
(progn
(setq SName (subst (cons 70 0) (assoc 70 SName) SName)
SName (subst (cons 71 0) (assoc 71 SName) SName)
)
(entmod SName)
(if (= 1 (cdr (assoc 67 SName)))
(setq Model (cons (cdr (assoc -1 SName)) Model))
(setq Paper (cons (cdr (assoc -1 SName)) Paper))
)
)
)
)
(cond ((= (getvar "TileMode") 0)
(foreach Item Paper (command "_.Explode" Item))
(setvar "TileMode" 1)
(foreach Item Model (command "_.Explode" Item))
)
((= (getvar "TileMode") 1)
(foreach Item Model (command "_.Explode" Item))
(setvar "TileMode" 0)
(foreach Item Paper (command "_.Explode" Item))
)
)
(princ "完成!")
)
)
)
(setvar "CmdEcho" CmdEcho)
)
(Defun C:Unlockup (/ CmdEcho Index SSet SName Model Paper)
(setq CmdEcho (getvar "CmdEcho"))
(setvar "CmdEcho" 0)
(if (null (wcmatch (getvar "ACADVer") "14*"))
(alert (strcat
"\n AutoCAD版本匹配错误"
"\n *****************************************"
"\n 在当前的AutoCAD版本下无法完成解锁"
"\n 当前图形的命令"
"\n 如果要解锁当前图形, 请手动修改"
"\n 无名块的行列数据从2到0"
"\n 保存成R14.0格式的图形文件"
"\n 使用AutoCAD R14.0打开并炸开"
"\n 或在AutoCAD R14.0下使用本命令"
"\n *****************************************")
)
(progn
(princ "\n 正在解锁当前图形,请等候...")
(command "_.Layer" "_T" "*" "_ON" "*" "_UNLOCK" "*" "")
(while (setq SSet (ssget "x"
(list (cons 0 "INSERT")
(cons 70 2)
(cons 71 2)
)
)
)
(setq Index -1
Model nil
Paper nil
)
(repeat (sslength SSet)
(setq SName (entget (ssname SSet (setq Index (1+ Index)))))
(if (= (substr (cdr (assoc 2 SName)) 1 2) "*U")
(progn
(setq SName (subst (cons 70 0) (assoc 70 SName) SName)
SName (subst (cons 71 0) (assoc 71 SName) SName)
)
(entmod SName)
(if (= 1 (cdr (assoc 67 SName)))
(setq Model (cons (cdr (assoc -1 SName)) Model))
(setq Paper (cons (cdr (assoc -1 SName)) Paper))
)
)
)
)
(cond ((= (getvar "TileMode") 0)
(foreach Item Paper (command "_.Explode" Item))
(setvar "TileMode" 1)
(foreach Item Model (command "_.Explode" Item))
)
((= (getvar "TileMode") 1)
(foreach Item Model (command "_.Explode" Item))
(setvar "TileMode" 0)
(foreach Item Paper (command "_.Explode" Item))
)
)
(princ "完成!")
)
)
)
(setvar "CmdEcho" CmdEcho)
)
[本日志由 tiancao1001 于 2008-07-12 09:43 PM 编辑]
|
sxlyzsl 于 2010-12-07 09:07 AM 发表评论:
本人提供各种专业cad技术服务,cad文件转换,dwf转dwg,pdf转dwg,dwg转pdf,转dwf,dwg文件密码破解,dwg多重块破解,天正文件tch-pro破解。需要请联系qq408786826,13416168515
发表评论 - 不要忘了输入验证码哦! |