且行且远

和上次看的那个计算机等级考试的模拟软件是同一个公司出的,而且都是同一个毛病,就是只有一个主程序,特别的大,很ft。仍然是用VB编的,而且没有加壳,上次因为是用SmartCheck看的,得到的信息很少,这次用Odbg载入分析了一下,原来注册码是用浮点运算计算得到的,而SmartCheck 没有检测到浮点运算,因此SmartCheck里面显示的数都不知道是怎么得到的。

VBExplorer先查看注册按钮的入口点,然后ODBG设断点,具体的程序懒得在这里写了,VB的程序太长太麻烦了,看了好久再加上一些猜测才弄明白点。这里就把最后注册码的计算过程写一下算了。

序列号分为两部分,前面是字符串,后面是一串数,把这串数提取出来,分别取得数的1、3、5、7位。分别在每位后面依次加上2、5、7、6。这样得到四个数。

下面再对每个数进行处理,看一下各个数是在什么区间内,分析的时候记录如下:

ds:[4026C0]=20 再加上ds:[4026B8]=97
ds:[4026B0]=29 再加上ds:[4026A8]=28
ds:[4026A0]=30 这步无意义,末位不可能是9或0
ds:[402698]=55 再加上ds:[402690]=35(相等也加)
ds:[402688]=56 这步比较无意义,小于等于55执行上面的加法,大于55直接和81判断
ds:[402680]=81 再加上ds:[402678]=41
ds:[402670]=82 再减去ds:[402668]=17
实际上也就是按上面的几个数划分了一下区间,数落在不同的区间内进行不同的处理,这样就又可以得到四个数。

把最初得到的四个数求和,判断和处于如下哪个区间内,然后注册码即可求得

属于区间[0,100]:注册码=zgx+第一位+第二位+gf8+第三位+第四位
属于区间(100,200]:注册码=第一位+ygp+第二位+第三位+tx6+第四位
属于区间(200,300]:注册码=第四位+gmu+第一位+第二位+hu6+第三位
属于区间(300,正无穷):注册码=第二位+fre+第一位+kmh+第三位+第四位

注意上面所说的第?位都是以最初得到的数为ASCII码求得的字符。

写的挺凌乱的,基本都是边分析边记录的,还把注册机做了,以后有空补上算法分析吧,最近忙于考试和试验报告,实在没那么多时间,5555



发表评论

昵称:  (必须)
邮件:  (必须)
网址: 
评论: