【不死猫出品】原创 Lisp破解 (核心代码解密) 提供思路
本帖最后由 nonsmall 于 2013-4-24 17:36 编辑 <br /><br /><P>关于加密 Lisp : VLX FAS 格式 破解的讨论由来已久 最近尝试了利用Lisp本身来解密Lisp 小有所得 与各位分享下:</P><P>注:我所发布的多个原创思路,均在明经通道首发,之前未曾参考其他文章.转载请注明出处和我的名字 谢谢.</P>
<P>本文发表前,心里也做了一些思想斗争,想来代码开源对国产CAD事业的发展助益很大,但是支持原创正版和劳动成果也是必须,好在我提供的思路不足以解密全部Lisp,希望大家抱着学习的目的来看看别人的代码即可.</P>
<P>声明:对于任何使用本人文章作品对他人造成心灵伤害和钱包的损失,本人概不负责,请大家尊重他人的劳动成果,不要突破别人的心里防线.o(∩_∩)o...</P>
<P>PS:大家可以讨论看看怎么反破解</P>
<P>nonsmall 20090318 于深圳</P>
<P>=============================================</P>
<P>方法1: 查看所有Lisp调用的命令和系统变量</P>
<P>一个命令或系统变量能做很多事情的 学习这些很重要</P>
<P></P>
<P>不用多说,当然是反应器了</P>
<P></P>
<P>然后随便拿个带命令或setvar函数的Lisp来试试看吧</P>
<P>不要想着用(vlr-remove-all)来反破解 因为我用一句(setq vlr-remove-all nil)就行了</P>
<P></P>
<P>此代码加载后,其他程序的命令和系统变量的修改都显示出来了.</P>
<P>----------------------------</P>
<P>方法2: 查看大部分函数的调用和基本过程</P>
<P></P>
<P></P>
<P>配合(atoms-family )函数可批量修改</P>
<P></P>
<P>先使用命令GOGO 再使用命令test</P>
<P>也可以试试其他包含有该函数的程序</P>
<P>=================================================</P>
<P>这么简单? 恩 的确不难 但是不够完美</P>
<P>因为setq if repeat progn等特殊函数无法查看(自己可以动手试试)</P>
<P>但是借助ARX重新定义这些函数不知道可不可以(要是可以的话......那....)</P>
<P>但是本思路可以解密很多"高深"程序的核心秘密 足够了!</P>
<P>下面看2楼7楼的加密Vlx破解实战!</P> 非常的高大上 但是小白完全看不懂 先收藏下,猫老师的水平毋庸置疑 不得不服啊 本帖最后由 作者 于 2009-3-19 18:07:17 编辑 <br /><br /> <p>实例:</p><p>;监视加密程序使用外部例程</p><p>(defun c:gogo()<br/> (setq vlax-createobject vlax-create-object)<br/> (defun vlax-create-object (a)<br/> (print (strcat "使用函数(vlax-create-object " (vl-princ-to-string a) ")"))<br/> (vlax-createobject a)<br/> )<br/> (print "vlax-create-object 函数透明")<br/> (princ)<br/>)</p><p>;监视程序写出/读取外部文件</p><p>(defun c:go()<br/> (setq open1 open)<br/> (defun open (a b)<br/> (print (strcat "使用函数(open " (vl-princ-to-string a) " " (vl-princ-to-string b) ")"))<br/> (open1 a b)<br/> )<br/> (print "open 函数透明")<br/> (princ)<br/>)</p><p>程序原文(解密自己以前的一篇文章):</p><p><a href="http://www.mjtd.com/bbs/dispbbs.asp?BoardID=3&replyID=111159&id=71194&skin=0">http://www.mjtd.com/bbs/dispbbs.asp?BoardID=3&replyID=111159&id=71194&skin=0</a></p><p>上面的2个函数执行后再执行我的函数</p><p>------------------------</p><p>命令: gogo</p><p>"vlax-create-object 函数透明"</p><p>命令:<br/>命令: (rundos (list "del d:\\2.mp3"))</p><p>"####修改变量:CMDECHO为"<br/>"####修改变量:CMDECHO为" 00<br/>"使用函数(vlax-create-object Scripting.FileSystemObject)"<br/>"使用函数(vlax-create-object WScript.Shell)"<br/>("====发送命令:" ("DELAY"))<br/>"####修改变量:CMDECHO为"<br/>"####修改变量:CMDECHO为" 00<br/>"Complete"</p><p>命令: *取消*</p><p>-------------------------</p><p>哦 原来程序用了这两个外部例程Scripting.FileSystemObject和WScript.Shell !</p><p>我们再看看Getdos是什么原理?</p><p>-------------------------</p><p>命令: (getdos "ver")</p><p>"####修改变量:CMDECHO为"<br/>"####修改变量:CMDECHO为" 00<br/>"使用函数(vlax-create-object Scripting.FileSystemObject)"<br/>"使用函数(vlax-create-object WScript.Shell)"<br/>("====发送命令:" ("DELAY"))<br/>("====发送命令:" ("DELAY"))<br/>"使用函数(open C:\\DOCUME~1\\ZHANGTN\\LOCALS~1\\Temp\\tmpget.tmp R)"<br/>"使用函数(open C:\\DOCUME~1\\ZHANGTN\\LOCALS~1\\Temp\\tmpget.tmp R)"</p><p>-------------------------</p><p>恩 原来有个文件藏在了这里</p><p>怎么样? 程序核心的秘密是不是已经显露出来了呢?</p><p>通过一些核心函数的破解 我们可以看到一些看似高深的文章 其实是很简单的</p><p>只要自己多写一写这类的破解函数 核心的代码秘密将被一点点的发掘出来.</p><p>=================================</p><p>对了 实际上要想看Command命令的具体操作可以这样:</p><p>(defun study_sysVarChanged(a b)<br/> (princ (vl-princ-to-string (getvar (car b))))<br/> (if (= (getvar "cmdecho") 0)(setvar "cmdecho" 1))<br/> (princ)<br/>)</p> 顶! 學習好帖 支持原创,破解思路值得深思 又学到了一个知识~<br/>谢谢~~ 本帖最后由 作者 于 2009-3-19 18:08:16 编辑 <br /><br /> <p>呵呵 大家似乎还没有理解我的方法的厉害是吧?</p><p>那么再看一个实例</p><p>解密无痕前辈的大作 "<b>[原创] !将vbscript移植到lisp!</b>"</p><p>PS:(这个文章已经不是秘密了 所以拿来试试吧!)</p><p><a href="http://bbs.mjtd.com/forum.php?mod=viewthread&tid=62106&replyID=&skin=1">http://bbs.mjtd.com/forum.php?mod=viewthread&tid=62106&replyID=&skin=1</a></p><p>http://bbs.mjtd.com/forum.php?mod=viewthread&tid=62106&replyID=&skin=1</p><p>猜猜看前辈用了哪些外部例程?</p><p></p><p>首先获得外部例程大概有这么几个函数:createobject getobject getinterface</p><p>(defun c:go1()<br/> (setq vla-eval1 vla-eval)<br/> (defun vla-eval (a b)<br/> (print (strcat "使用函数(vla-eval " (vl-princ-to-string a) " " (vl-princ-to-string b)")"))<br/> (vla-eval1 a b)<br/> )<br/> (print "vla-eval 函数透明")<br/> (princ)<br/>)<br/>(defun c:go2()<br/> (setq vlax-get-acad-object1 vlax-get-acad-object)<br/> (defun vlax-get-acad-object ()<br/> (print (strcat "使用函数(vlax-get-acad-object " ")"))<br/> (vlax-get-acad-object1)<br/> )<br/> (print "vlax-get-acad-object 函数透明")<br/> (princ)<br/>)<br/>(defun c:go3()<br/> (setq vlax-getobject vlax-get-object)<br/> (defun vlax-get-object (a)<br/> (print (strcat "使用函数(vlax-get-object " (vl-princ-to-string a) ")"))<br/> (vlax-getobject a)<br/> )<br/> (print "vlax-get-object 函数透明")<br/> (princ)<br/>)<br/>(defun c:go4()<br/> (setq vla-GetInterfaceObject1 vla-GetInterfaceObject)<br/> (defun vla-GetInterfaceObject (a b)<br/> (print (strcat "使用函数(vla-GetInterfaceObject " (vl-princ-to-string a) " " (vl-princ-to-string b)")"))<br/> (vla-GetInterfaceObject1 a b)<br/> )<br/> (print "vla-GetInterfaceObject 函数透明")<br/> (princ)<br/>)</p><p>执行go1 go2 go3 go4</p><p>然后加载无痕前辈的程序</p><p>----------------------</p><p>执行函数命令</p><p><font color="#0f0fce">(setq str "<br/>Function GetValue() <br/> Dim arrX(3 , 3 , 2)<br/> Dim i,j,k <br/> For i = 0 To 3 <br/> For j = 0 To 3<br/> For k = 0 To 2 <br/> arrX (i , j , k) = i * j + k<br/> Next<br/> Next<br/> Next <br/> GetValue = arrX <br/> End Function"<br/>)<br/>(xxvbs str "getvalue")</font></p><p></p><p><font color="#0f0fce">关键的来了 看看返回值吧</font></p><p>命令: (xxvbs str "getvalue")</p><p> (xxvbs str)=移植vbs程序的函数 c:xxvbs? 显示帮助--v2.2---by 梁雄啸.2007.7</p><p>"使用函数(vlax-get-acad-object )"<br/><font style="BACKGROUND-COLOR: #ff0000;">"使用函数(vla-GetInterfaceObject #<VLA-OBJECT IAcadApplication 00c2db8c> <br/>ScriptControl)"</font><br/>"使用函数(vla-eval #<VLA-OBJECT IScriptControl 05a9ecc0> isarray(getvalue))"<br/>"使用函数(vla-eval #<VLA-OBJECT IScriptControl 05a9ecc0> getvalue)" (((0 1 2) <br/>(0 1 2) (0 1 2) (0 1 2)) ((0 1 2) (1 2 3) (2 3 4) (3 4 5)) ((0 1 2) (2 3 4) (4 <br/>5 6) (6 7 8)) ((0 1 2) (3 4 5) (6 7 8) (9 10 11)))</p><p>-----------------------------</p><p><font style="BACKGROUND-COLOR: #ff0000;">ScriptControl</font><br/>是个什么东东? 上网一搜不就知道了么?原来是脚本解释器!</p><p>知道了原理 自己去找找相关知识学习即可 解密成功!</p><p>("谁敢打我的主意!!!" 啊!不好!有杀气! 我先撤了!)</p> 破解思路值得学习 本帖最后由 作者 于 2009-3-19 10:09:32 编辑 <br /><br /> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;">。。。。。不会吧<span style="mso-spacerun: yes;"> </span>又是你老猫搞出来的精华........</p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;">下载16次了,继续突破....搞得我没心思正常工作了,上个论坛还偷偷摸摸的,发这种贴会让我全神贯注而忘记巡逻BOSS的。。。</p> <p>重新定义VLISP函数,输出函数的参数信息</p>