• 标 题:[转贴]深思3乱弹(一)——口令 (1千字)
  • 作 者:cbhappy
  • 时 间:2002-1-24 1:07:14
  • 链 接:http://bbs.pediy.com

深思3乱弹(一)——口令
  深思3狗,有两套口令,一个叫开发口令,一个叫应用口令,都是由三个整数组成的。我们知道,任何一种加密狗,都不可能对不同的人卖相同的加密狗,这个区别,在圣天诺狗里叫ID号,在HASP狗里是口令,在深思3狗就是这个开发口令了,不同的人或者公司,买到的深思狗的开发口令肯定是不同的,但是,深思狗的开发口令,只是在编辑和写入程序时用,在用户程序中不用,在用户程序中只用应用口令,这是深思狗的一个严重的漏洞!我们可以用不同的开发口令的狗,写入相同的程序和数据(包括应用口令),这就可以完全复制深思狗了!!!
  要破解深思狗或者复制深思狗,第一步就是找到“应用口令”。用狗加密的软件,判断是否有加密狗,第一步就是找狗,在深思狗中就是“打开加密锁”——OpenSense3。这个操作,在大部分反汇编中可以找到“OpenSense3”字符串,在CALL语句的上一行,是PUSH语句,其后的数据就是深思调用函数接口参数表的地址。看一下这个地址,第一个字节是返回值,从第二个字节开始的连续六个字节,就是“应用口令”了。如果在反汇编中找不到“OpenSense3”字符串,可以在动态调试器(如TRW2000)中,下BPIO 378,拦下后,按F12十几次,返回到主程序中,上一行的CALL就是“打开加密锁”的调用了。如果要复制狗,把这三个口令记下来,以后,其他数据收集齐了,就可以写狗了;如果是破解,只需要把深思调用函数接口参数表的第一个字节置为0即可破解掉第一不了。
****说明:本文只是为初学破解加密狗的朋友而做,诸位高手见笑了,如果没有人扔臭鸡蛋之类,还会续下去,否则,献丑到此为止了。****
                             
                              撰写:紫竹  转贴:cbhappy

  • 标 题:[转贴]深思3乱弹(二)——数据 (1千字)
  • 作 者:cbhappy
  • 时 间:2002-1-27 12:32:05

深思3乱弹(二)——数据
  在深思3乱弹(一)——口令中,我们已经谈了深思3的应用口令,可以并且只能在程序中得到。在这里,我们谈一下深思3的数据单元的问题。
  深思3的标准版,提供了128个字节的数据区。除了极个别的软件狗,大多数软件狗都有数据区,如金天地的各种狗,都有100字节的数据区,有人可能会问,为什么是100字节,应该是64、128、256字节才对呀。存储器本身的容量,确实应该是64、128、256等,那么,金天地提供100字节的数据区,少了28个字节,这少的28个字节,被用来做系统数据区了,用来保存序列号、口令之类的东西了。那么深思3为什么没有占用数据区?深思3还有48字节的代码区,与64相比,少了16字节,这就是他存放口令等系统数据的所在了。
  对于狗中的数据,在被加密程序中的使用,各种狗的情况基本上是相同的。一是,读出数据,简单的比较;二是,读出数据,不做比较,而是作为参数或地址,供程序下一步使用。如果被加密程序,处理狗内的数据是前一种情况,则在无狗的情况下,我们从程序中即可得到数据了。对于后一种情况,则必须在有狗的情况下,才可以得到数据,即无狗是无法破解的。
  如果有狗,要复制的话,在知道了“应用口令”后,读出狗中的全部数据,不是很难的事了。
  深思3的狗,读写数据的指令,和打开锁的指令是相同的,只是数据接口的具体参数不同而已。
  深思3狗,打开锁的指令格式是:
  PUSH 地址1
  CALL 地址2
  这里,地址1,是深思3数据接口的首地址(即程序设计中的数据接口的指针),地址2,是深思3狗驱动程序的调用地址。读写数据的指令与此完全相同,所以,找到了一处,就不难找到其他的了。
  这里说明一下,深思3狗的数据接口(前文“深思3乱弹(一)——口令”中的叙述有误,以此为准)
  2字节返回标志,2字节功能代码,6字节应用口令,2字节输出记数,8字节输出内容,2字节接受记数,8字节接受内容,2字节备用输入,64字节系统保留。
  这样,4-9字节为应用口令,20-21为读狗数据的字数,22-29为读狗的数据。


                              --撰写:紫竹

  • 标 题:[转贴]深思3乱弹(三)——代码 (2千字)
  • 作 者:cbhappy
  • 时 间:2002-1-27 12:34:33

深思3乱弹(三)——代码
  可以把程序(代码)写入狗内,是深思3狗引以为荣的特色。也是我们破解或复制深思3狗的难点。
  前两段短文已经将了,我们可以从程序中找到狗的应用口令,可以从狗中读出全部数据区的内容,但代码区是可写不可读的,怎么办呢?
  把代码写入狗中,实际上是一种数据变换,不过就是这个变换可以由用户自己编程而已。
  所谓数据变换,就是向狗发出一个数据,狗则返回一个同样长度的数据,返回的数据就是变换的结果,变换的规则,就是狗内的算法,圣天诺的SUPERPRO狗的算法是固定的,但算法因子可以由用户写入;深思3的算法,就是用户写入的代码。
  既然变换的结果是数据,被加密程序,怎么判断返回值是否正确呢?
  对于深思3而言,有三种情况:
  1、用码表
  所谓码表,就是加密者事先准备的数据变换前后的对照表。这种方法是圣天诺狗必用的方法。这种方法的缺点是,容易被WKPE等仿真类软件拦截,除非准备的码表很长,使得多次拦截后的数据合并起来庞大得无法使用。码表法是深思公司极力反对的。所以,在深思狗加密中很少见,但也不排除有习惯用此方法加密的人,使用深思狗后仍然沿用这种方法。
  2、副本法
  所谓副本法,就是在被加密程序中有一个与狗中代码功能相同的代码的副本存在,被加密程序,做数据变换,采用随机数,把产生的随机数,发到狗内,变换返回的数据1,在把同一个数据送到程序内的副本处,进行变换,得到返回数据2,比较数据1和数据2,判断是否是正版狗。
  这种方法,可以有效防止WKPE等仿真器拦截。但这种方法,为我们复制狗留下了漏洞,我们只要找到这个副本,把他翻译成深思3的汇编语言,就得到了狗内程序代码。
  3、逆变换法
  所谓逆变换法,就是狗内的代码,有变换和逆变换两个入口,被加密程序产生一个随机数,先送到变换区返回一个数据,再把这个返回值送到逆变换区,返回一个逆变换数据,把这个数据与最初的随机数比较,相同就是有正版狗。
  这种方法,也可以有效防止WKPR类仿真器的拦截,而且,无法从程序中得到狗内的代码。但是我们可以在狗内随便写一段代码,只要变换和逆变换的入口与原狗的一致就可以了。
  综上所述,只要有了程序,基本上可以复制出深思3的狗了。只是数据区的问题,如果是把从狗内读到的数据,不进行对比,则我们就无法知道数据区的内容,必须要读狗。
  ****好了,关于深思3狗的一点研究心得,就写这些了,错漏之处在所难免,只是给初学破解加密狗的朋友做参考。现丑到此结束。****



                                  --撰写:紫竹  编辑:cbhappy