【VB开源代码栏目提醒】:本文主要为网学会员提供“VB程序的克星SmartCheck及重启验证型破解实例 doc - 技术总结”,希望对需要VB程序的克星SmartCheck及重启验证型破解实例 doc - 技术总结网友有所帮助,学习一下!
VB程序的克星SmartCheck及重启验证型破解实例 文章录入7747.Net 责任编辑7747.Net 更新时间2010-10-21 9:51:02 644 【字体小 大】 文/图 落叶树 想必大家都知道
VB属于解释执行型的语言它生成的程序是一边翻译一边执行的。
以前老的版本由于语言解释器的存在我们平时习惯使用的OllyDbg等调试工具在跟踪
VB程序的时候经常不停地跳来跳去让你晕头转向这是因为我们跟进了解释器的地盘里面的东西是相当难搞明白的。
不过现在的
VB6程序已经不再是单纯的解释执行大部分的内容取而代之变成了编译后的
代码。
虽然如此还是不能像VC、Delphi程序反编译后的那么直观压入一堆你看不明白的参数call一些不知道什么意思的过程动辄错误、中止。
用OD来跟还是不够方便啊怎么办呢对于Native Code程序P-code是封装
代码或者说中间件伪
代码相对的Native Code就是原始的未使用P-code的
代码本文不涉及P-code我们可以使用SmartCheck来轻易对付它。
这次我们破解的对象是一个网站信息收集工具用PEiD查看得到的内容是Microsoft Visual Basic 5.0 / 6.0这说明软件用
VB5以上版本编写未加壳呵呵省去脱壳的麻烦了。
下面我们进入实战部分。
工具配置 在开始分析前我们需要先把SmartCheck下文简称SC配置好这个步骤很重要否则有些关键事件可能会没保留下来。
运行SC载入要破解的软件然后点快捷按钮栏的“程序-设置”接下来按照图1和图2所示设置即可其余的可以使用默认配置。
javascript:dcs.images.doResizesthis0null border0 图1 javascript:dcs.images.doResizesthis0null border0 图2 初步分析 设置完后按F5运行软件首先显示的是一个输入注册码的窗口这里我们就随便输入“1212121212”吧点“注册”后程序一声不吭就退出了看来还是一个重启验证型软件嘛。
这时我们看SC的界面分析已经随着程序退出而中止了不然我们还得自己按“停止”来结束分析。
乍眼看上去一大堆东西不过只要写过
VB程序的人应该不会觉得陌生就算不懂
VB的也不打紧我们慢慢看自然会明白其中的意思。
现在显示的是从软件启动到输入完注册码退出后的特定事件我们在图3左栏的窗口里逐一点击查看如果看不到这个界面把“
程序结果”窗口最大化即可因为分栏是缩在边上的。
图3 嗯发现刚才注册窗口显示的序列号了这个相当于机器码不同电脑上可能会不一样估计这之前是计算序列号的过程不过这个我们不用关心继续往下面看。
展开Command1_Click过程呵呵发现我们输入的注册码了毫无疑问这个按钮事件就是对应注册码算法的重点锁定在这里。
一路看下来蛮多
VB函数调用的后面再次出现了序列号过程结尾处有一串数字“2658271038273406817399346741”如图4所示。
图4 难道这就是注册码吗试试看重新F5运行输入这串数字注册退出。
再重新运行别忘了是重启验证型就算是正确的注册码也需要第二次运行才能知道是否成功注册呃看来不对还是那个可恶的注册窗口。
这串数字到底是什么意思呢 详细分析 刚才我们一直看的是特定事件分析结果这样虽然找明码比较快但现在这种没有明码比较的情况就需要慢慢跟踪流程了。
接着上面还是输入那串数字注册退出后选择快捷栏上的“查看-显示所有事件”这下出来的东西就多多啦对应图4字符串的地方下面是一个比较语句如图5所示。
图5 两个字符串比较看来关键就在这里刚才我们经过试验得知String2这串28位的数字不对。
而一般情况下比较语句都是比较两者是否相等这里假设如果String1String2则注册成功那么第一步就先搞清楚String2是怎么来的吧。
可能有些朋友想说为什么图5里的String1“511”就不能是注册码呢别忘了我们输入两次不同的假注册码都是显示同一String2字符串可见它是相对固定的而String1则是每次都变化可见跟输入的注册码有关所以此时的String1不会是注册码而我们输入的假码是怎么转化成String2String1String2注册成功才是关键 我们往上面一直拉到Command1_Click再次逐一看下来如图6所示。
由于这次是详细分析所以大家如果不熟悉
VB函数的话最好通过搜索引擎来找一下相关函数的作用看看。
这次SC显示的事件很多为了不占用版面我只挑关键的地方截图其它的就讲讲大概意思大家自己跟一下就很清楚了。
Command1_Click过程一开始分配空间构成一个字符数组这里我们把它称为T内容是CAJKE3UV4QX7SHYP5MFW接下来把我们输入的假注册码前三位去掉再逐位取剩下的字符和T数组里的字符比较相等则生成对应数组下标数字的字符。
假设我们输入的注册码是xxxCAJKE那么这里就会生成字符串“01234”。
我们前面输入的假码“2658271038273406817399346741”经过一番运算后变成了“18”我们先把这设为S1。
奇怪怎么跟图5的String1不一样呢再往下面看哦原来是把S1按奇偶位分别取成两段然后把偶数位段反取最后两段连接起来才组成了String1。
OK我们搞清楚其中一半关键了接下来只要弄清楚String2“2658271038273406817399346741”是怎么来的再逆推回去不就可以得到注册码了吗看完String1的生成过程后比较长大家要有耐心序列号终于出现了如图7所示。
图6
VB程序的克星SmartCheck及重启验证型破解实例 文章录入7747.Net 责任编辑7747.Net 更新时间2010-10-21 9:51:02 644 【字体小 大】 文/图 落叶树 想必大家都知道
VB属于解释执行型的语言它生成的程序是一边翻译一边执行的。
以前老的版本由于语言解释器的存在我们平时习惯使用的OllyDbg等调试工具在跟踪
VB程序的时候经常不停地跳来跳去让你晕头转向这是因为我们跟进了解释器的地盘里面的东西是相当难搞明白的。
不过现在的
VB6程序已经不再是单纯的解释执行大部分的内容取而代之变成了编译后的
代码。
虽然如此还是不能像VC、
Delphi程序反编译后的那么直观压入一堆你看不明白的参数call一些不知道什么意思的过程动辄错误、中止。
用OD来跟还是不够方便啊怎么办呢对于Native Code程序P-code是封装
代码或者说中间件伪
代码相对的Native Code就是原始的未使用P-code的
代码本文不涉及P-code我们可以使用SmartCheck来轻易对付它。
这次我们破解的对象是一个网站信息收集工具用PEiD查看得到的内容是Microsoft Visual Basic 5.0 / 6.0这说明
软件用
VB5以上版本编写未加壳呵呵省去脱壳的麻烦了。
下面我们进入实战部分。
工具配置 在开始分析前我们需要先把SmartCheck下文简称SC配置好这个步骤很重要否则有些关键事件可能会没保留下来。
运行SC载入要破解的软件然后点快捷按钮栏的“程序-设置”接下来按照图1和图2所示设置即可其余的可以使用默认配置。
javascript:dcs.images.doResizesthis0null border0 图1 javascript:dcs.images.doResizesthis0null border0 图2 初步分析 设置完后按F5运行软件首先显示的是一个输入注册码的窗口这里我们就随便输入“1212121212”吧点“注册”后程序一声不吭就退出了看来还是一个重启验证型软件嘛。
这时我们看SC的界面分析已经随着程序退出而中止了不然我们还得自己按“停止”来结束分析。
乍眼看上去一大堆东西不过只要写过
VB程序的人应该不会觉得陌生就算不懂
VB的也不打紧我们慢慢看自然会明白其中的意思。
现在显示的是从软件启动到输入完注册码退出后的特定事件我们在图3左栏的窗口里逐一点击查看如果看不到这个界面把“程序结果”窗口最大化即可因为分栏是缩在边上的。
图3 嗯发现刚才注册窗口显示的序列号了这个相当于机器码不同电脑上可能会不一样估计这之前是计算序列号的过程不过这个我们不用关心继续往下面看。
展开Command1_Click过程呵呵发现我们输入的
注册码了毫无疑问这个按钮事件就是对应注册码算法的重点锁定在这里。
一路看下来蛮多
VB函数调用的后面再次出现了序列号过程结尾处有一串数字“2658271038273406817399346741”如图4所示。
图4 难道这就是注册码吗试试看重新F5运行输入这串数字注册退出。
再重新运行别忘了是重启验证型就算是正确的注册码也需要第二次运行才能知道是否成功注册呃看来不对还是那个可恶的注册窗口。
这串数字到底是什么意思呢 详细分析 刚才我们一直看的是特定事件分析结果这样虽然找明码比较快但现在这种没有明码比较的情况就需要慢慢跟踪流程了。
接着上面还是输入那串数字注册退出后选择快捷栏上的“查看-显示所有事件”这下出来的东西就多多啦对应图4字符串的地方下面是一个比较语句如图5所示。
图5 两个字符串比较看来关键就在这里刚才我们经过试验得知String2这串28位的数字不对。
而一般情况下比较语句都是比较两者是否相等这里假设如果String1String2则注册成功那么第一步就先搞清楚String2是怎么来的吧。
可能有些朋友想说为什么图5里的String1“511”就不能是注册码呢别忘了我们输入两次不同的假注册码都是显示同一String2字符串可见它是相对固定的而String1则是每次都变化可见跟输入的注册码有关所以此时的String1不会是注册码而我们输入的假码是怎么转化成String2String1String2注册成功才是关键 我们往上面一直拉到Command1_Click再次逐一看下来如图6所示。
由于这次是详细分析所以大家如果不熟悉
VB函数的话最好通过
搜索引擎来找一下相关函数的作用看看。
这次SC显示的事件很多为了不占用版面我只挑关键的地方截图其它的就讲讲大概意思大家自己跟一下就很清楚了。
Command1_Click过程一开始分配空间构成一个字符数组这里我们把它称为T内容是CAJKE3UV4QX7SHYP5MFW接下来把我们输入的假注册码前三位去掉再逐位取剩下的字符和T数组里的字符比较相等则生成对应数组下标数字的字符。
假设我们输入的注册码是xxxCAJKE那么这里就会生成字符串“01234”。
我们前面输入的假码“2658271038273406817399346741”经过一番运算后变成了“18”我们先把这设为S1。
奇怪怎么跟图5的String1不一样呢再往下面看哦原来是把S1按奇偶位分别取成两段然后把偶数位段反取最后两段连接起来才组成了String1。
OK我们搞清楚其中一半关键了接下来只要弄清楚String2“2658271038273406817399346741”是怎么来的再逆推回去不就可以得到注册码了吗看完String1的生成过程后比较长大家要有耐心序列号终于出现了如图7所示。
图6 图7 经过生成String1
代码的考验后现在看这段就简单多了呵呵。
流程就是先把序列号“QJCL-JIEE-SMGN-BPJI-MRNS-PQMR-XKVH”中的“-”去掉变成“QJCLJIEESMGNBPJIMRNSPQMRXKVH”再从后往前逐一把字符从ASCII值转成十进制后取个位数如字符“H”的ASCII值为48HH表示十六进制用十进制表示就是72取个位就是2而字符“V”的十进制是86取个位数6????最终就变成了我们熟悉的String2“2658271038273406817399346741”。
到了这里相信大家应该明白算法过程了吧我们要做的就是让注册码变换后的String1等于系列号变换后的String2目前可以得到已知条件String2下面让我们通过实例来
学习怎样用已知条件String2逆推注册码Regstr。
String1是由S1分成的两段奇偶参差而成其中第二段还需倒取这样我们先把“2658271038273406817399346741”分成相等的两段265827103827340681739934674106817399346741倒取14764399371860这样奇数位段26582710382734和偶数位段14764399371860都出来了最终还原S1为283640。
S1是由Regstr查表T得出我们用S1的数字还原回去T2’J’T1’A’????由于一开始就把注册码的前三位去掉了这里我们还要补上随意的三位字母最终得出注册码Regstr为xxxJAUE3V4UJEVKAQCQKK4VJAV4KUEC。
呵呵过程还算是比较简单吧不知道大家弄清楚了没有直观简洁这就是SmartCheck的魅力。
后话 由于SmartCheck不像OD那样可以复制
代码且过程比较长所以本文只能尽量在一些比较关键的地方用截图表示不过大体的算法流程还是说明白了大家最好能参照文章动手跟一下这样印象会深刻许多的实践是不断进步的重要秘诀 图7 经过生成String1
代码的考验后现在看这段就简单多了呵呵。
流程就是先把序列号“QJCL-JIEE-SMGN-BPJI-MRNS-PQMR-XKVH”中的“-”去掉变成“QJCLJIEESMGNBPJIMRNSPQMRXKVH”再从后往前逐一把字符从ASCII值转成十进制后取个位数如字符“H”的ASCII值为48HH表示十六进制用十进制表示就是72取个位就是2而字符“V”的十进制是86取个位数6????最终就变成了我们熟悉的String2“2658271038273406817399346741”。
到了这里相信大家应该明白算法过程了吧我们要做的就是让注册码变换后的String1等于系列号变换后的String2目前可以得到已知条件String2下面让我们通过实例来学习怎样用已知条件String2逆推注册码Regstr。
String1是由S1分成的两段奇偶参差而成其中第二段还需倒取这样我们先把“2658271038273406817399346741”分成相等的两段265827103827340681739934674106817399346741倒取14764399371860这样奇数位段26582710382734和偶数位段14764399371860都出来了最终还原S1为283640。
S1是由Regstr查表T得出我们用S1的数字还原回去T2’J’T1’A’????由于一开始就把注册码的前三位去掉了这里我们还要补上随意的三位字母最终得出注册码Regstr为xxxJAUE3V4UJEVKAQCQKK4VJAV4KUEC。
呵呵过程还算是比较简单吧不知道大家弄清楚了没有直观简洁这就是SmartCheck的魅力。
后话 由于SmartCheck不像OD那样可以复制
代码且过程比较长所以本文只能尽量在一些比较关键的地方用截图表示不过大体的算法流程还是说明白了大家最好能参照文章动手跟一下这样印象会深刻许多的实践是不断进步的重要秘诀