一般说来,在软件的第一次安装时(或是在第一次运行时),它会以当前的日期时间作为基准,作为试用期的开始,记录在案。以后的每一次运行都会在启动前先取出这个记录,再和当前的时间作一比较,如果在试用期内,那还好,您可以继续使用;反之,那便罢也,软件过期了。要继续使用,Money!所以前面所提到的修改系统时间的方法,在这里只是治标不治本。要解决这个问题,关键还是从根源抓起。
那么如何修改这个时间记录呢?您可别急。要改还不太简单,首先您得要先找到它吧。这也是本文的关键之所在,您可要看仔细了。
动动脑筋,想一想这个记录会放在哪儿呢?在Windows下,软件配置信息放在什么地方?对!就在注册表里(Registry),这个注册表是一个庞大而又很复杂的数据库,所以对于一般用户来说很神秘,不敢越雷池一步。这正好为一些软件加密提供了藏身之处,许多软件在第一次使用时,都会将当前的时间放在注册表里的某一个位置。以后的每次运行先从这儿取出时间,再和当前的作比较,从而判断出是否过期。而且这个记录在软件卸载后也不会自动清除掉,这就是为什么我们在软件过期后重装一遍时它还会说过期的原因。 既然知道了这个记录就在注册表里,那我们怎么去找到它呢?
有人会问,我怎么用注册表编辑器(RegEdit)的搜索功能找不到这个时间呢?
笨蛋!有这么玩捉迷藏的吗?既然是藏,难道能那样随随便便就让您给找到的?这个时间记录它都是以加密后的数据存放的,您看到的一般都是诸如A4ECFA57-D0A3-9FF3-8481-A492EB945058之类的古怪而无实际意义的字符串。想用Regedit去查找诸如2000-1-1之类的日期格式,白费心机。所以在注册表中您看到一串古怪的数据,如果它越古怪就越值得怀疑。
其实想在注册表中找到它们也不难。方法有两种:一是在软件还未安装前(第一次安装),先备份一下整个注册表,然后再装。将安装前后的两份注册表作一比较,找出新增加或改动了的地方,缩小可疑范围,然后再进一步判断。这儿我们可以借助Regsnap来完成此项工作。不过这种方法有很大缺点那就是工作量较大,而且一旦事先已安装过该软件了,此法便无效了。所以在这种情况下只能借助于第二种方法了。借助于一些相关的工具来监视软件对注册表的操作,如大名鼎鼎的RegMon(注册表监视器)。利用regmon,监视到软件启动时从注册表读取这个记录的事件,从而找到它的藏身之地。
具体操作方法下面我以Paint Shop Pro 6.0 为例来说明:
修改之前您得先安装好Paint Shop Pro(废话) 。准备好之后,那我们开始出发。打开Regmon,在过滤设置中填上psp(Paint Shop Pro 的执行文件名),表示只对PSP文件进行监视。设好过滤之后,开始监视。打开PSP,在出现启动画面和显示已使用时间的时候停止监视。想想在这一段时间里,PSP会从注册表中读取哪些信息呢?然后仔细分析一下监视到的结果(重点在后一部分,想一想这是为什么?)。由于软件把这个时间是以加密的形式存放在注册表中,所以regmon监视到的数据中有一串很奇怪的字符便是这时间了。虽然我们并不知道它具体的加密算法,但最简单的一个方法——删除不就解决问题了吗?双击监视到的这个数据,直接让RegMon打开RegEdit,定位到HKEY_CLASSES_ROOT/CLSID/{ ADBB2D80-5DFD-11D2-A00C-00104B65AAF5 }/MS,将右窗口中的iPID60u值删掉。重启PSP,这时您便会发现它又从第一天开始计时了。
怎么样?改起来并不难吧?其实要手工去除一些软件的时间限制就是这么简单,关键就是在于首先要找到这个时间记录的藏身之处,之后的步骤就是轻轻的一个Del 键。搞定!
当然也并非所有的软件都是这么简单就可以解决的,它们自身也似乎明白了这一点,光只在注册表中藏上一个值,是很容易被别人发现了。所以它们便再加上了一层保护。单独的一个记录也许您会瞎猫碰到死耗子,歪打正着地让您给撞上了。两个记录您还有那么好的运气吗?不过这也难不倒RegMon,只要是程序要读写注册表,那一切都逃不过它的监视。您只要仔细一点,多试试,N个记录也能给找出来!哈哈…….。要想人不知,除非已莫为。你做的任何每当都会留点儿蛛丝马迹的。嘿嘿…….。像藏有两个记录的软件有Turbo Browser98,它的两个记录分别藏在:
[HKEY_LOCAL_MACHINE/Security]
"Tool1."=hex:e0,59,9b,87,fd,d5,be,01
[HKEY_LOCAL_MACHINE/Software/Microsoft/Windows/CurrentVersion/]
"Q. Status"=hex:e0,59,9b,87,fd,d5,be,01。
不过,难道它们仅仅只会在注册表里捉迷藏吗?硬盘空间那么大,哪儿不好躲?所以还有相当一部分软件的加密方法并不仅仅局限于注册表里,在硬盘上某个位置往往还有几条漏网之鱼。
经过一番苦战,我终于找到了如何将这群在逃分子揖拿归案的绝佳秘计,您可听好了,此法乃我精心研究数十载,取众家之所长,独成一派,传子不传女的修改大法。在做法之前,我还得再请个助手。而且这位兄台也正是前面所提到的 Regmon 娘家 Sysinternal 公司的又一同胞兄弟——Filemon。一听大名,便知其是如何了得。果不其然,任何软件对文件的各种操作(无论是读,写,修改)都一一逃不过它那双火眼眼睛。
比如对Zipmagic2000,采用Regmon和Fiemon珠壁联合、共同合作的方式进行监视。通过RegMon可知Zipmagic2000启动时从注册表中读出了 [HKEY_CLASSES_ROOT/CLSID/{ 187b1580-324b-11d0-9398-0020aff0e034 }] at ="GYSupport"
"Data28"="BIPJBPIGFSLHGKDULONNMOMPJNIUMLDM" 的值,而FileMon发现了启动时也动了一下C:/windows/control dot ini 文件,仔细分析一下Winini文件中的内容,发现有一段可疑字符串:
[screens data]
screens28=CJQKCQJHGTMIHLEVMPOONPNQKOJVNMEN
估计启动时就是要从这儿读取一个记录,然后再同上面注册表中的另一个记录进行一番互相校验,从而得出第一次安装的时间,再判断软件是否过期。
所以,为了验证一下我们推测是否正确,我们先调整系统时间,使之超出30天的试用期限。然后删除注册表中该键值和中这段字符。启动一下,这时,它便告之您,软件的试用时间记录已经遭到破坏,请重新安装。重新安装之后便又可使用了。哈哈,上述推断正确,加10分!
结束之前,我想也该稍做总结。
软件试用的加密常用的一种,就是比较简单的在注册表中的某一个位置藏上第一次使用的时间记录,以后的每次运行就是先取出这个记录,再同当前时间作一比较。从而判断是否过期。
注1、 何时藏入这个记录各个软件不相同。有的是在您第一次安装时,安装程序取当前日期写进注册表。所以有时直接删除这个记录不管用,您还需重新安装一遍。而有的软件是在程序第一次运行时加入的,这也就是说在安装时它并没有写入时间。这些软件在运行前先要在注册表中查询这个记录,如果没有的话便以为这是第一次安装,自作聪明地再取当时时间写入注册表。所以对于这一类软件,我们只需删除这些记录就行了。
注2、 注2、不一定是只有一个记录,有的软件会在注册表中写入两个位置,互为校验。一旦其中一个被破坏,那么便会出错,无法继续使用。所以这一类软件,您要打扫彻底了,将所有的时间记录都清干净了。
另一种就是采取文件加密的方法。软件将时间记录写入一个文件(或者多个文件)中,并且这些文件藏得都是很隐蔽。一般是在初始文件中或者是以二进制文件的方式存放,藏在Windows 子目录或Windows/system 等不易被人发现的目录下,同时文件也具有隐藏或只读属性。总之一句话,就是不能让您轻易地就发现。不过这个我们也不怕,只要它启动时要读出这个记录,那就能把它揪出来。
当然还有些软件同时采用这两种方法,注册里藏几个值,系统目录里藏几个文件,它们之间互为校验,缺一不可。只要其中一个破坏,便会出错,所以这类软件您一定一定要弄干净了。如Quick View Plus 5.0,像它竟然一下子在注册表藏了两个值 HKEY_LOCAL_MACHINE/Software/CLASSES/.wav/{ A4ECFA57-D0A3-9FF3-8481-A492EB945058 } 和 HKEY_LOCAL_MACHINE/Software/CLASSES/CLSID/{ D60EB4AA-B69E-BA5C-88FE-CEFE4F8EECC7 } 系统目录下有2个文件
C:/os067271.bin 、C:/WINDOWS/SYSTEM/ws476828.ocx 和一个目录 C:/WINDOWS/SYSTEM/Viewers! 可谓是层层加密,绞尽脑汁。不过它最终还是让我给解决了,嘻嘻……
不知一下说了这么多,您能明白了多少。“授人以鱼,不如授之以渔”,希望本文能对您起个抛砖引玉的作用。
本文来自:我爱研发网(52RD.com) - R&D大本营
详细出处:http://www.52rd.com/Blog/Detail_RD.Blog_zyj963258_16242.html