如何通过机器码破解注册码获取软件注册码呢?

脚本专区&&&jiaocheng
最新资讯&&&New
搜索&&&Search
你的位置: >
3KM2转换工具-新手如何提取机器码
上一篇: 下一篇:
天骥脱机工作室版权所有 All rights reserved
Powered By HuiguerCMS V2013下载信息页
文件大小:5 KB
授权方式:免费版
更新时间:
界面语言:简体中文
软件等级:
插件情况:无插件
相关网站:
演示网址:
运行环境:windows/vb6.0
软件简介:
根据机器码生成注册码,获得序列号并验证,VB注册机实例。我正使用的硬盘算法软件加密钥匙计算器,分享给出大家了,不过有些朋友说用此方法算注册号不好,建议用其他方法。
《根据机器码生成注册码,获得序列号并验证,VB注册机实例》的下载地址
 1. 我们对所有资源都进行了病毒查杀和插件检查,力争提供绿色下载环境。当然,有些含钩子和补丁的软件包可能会误报病毒,但绝对是安全的,推荐您在解压使用前自行检查。 2. 如果某软件不能下载,请稍后尝试,总是不能下载的请点击软件标题右上角的报告错误,谢谢合作! 3. 我们提供的程序意在学习和研究,未经作者或本站许可请不要用于商业用途,由此造成的不良后果本站不承担任何责任。 4. 本站所有解压密码,除有特别说明外,一律为:liehuo.net 5. 如果某软件侵犯了您的版权,请立即,以便尽快得到处理。浅谈“机器码”在软件算法中的应用―― PC定时关机精灵注册算法分析
文/图 TC-XB=================================== 目前大部分的共享软件都采用比较经典的注册名+注册码的模式进行软件注册,这种方式既快捷又有效,但是缺点也十分明显,那就是不能保证软件使用的“唯一性”。简单的说,就是只要一个人注册了软件,其他人只要使用相同的注册名和注册码,就可以轻而易举地使用软件了。这一点对软件作者来说就是一场灾难,于是,一种新的注册方式就应运而生了,那就是我们今天要说到的“机器码+注册码”。 大家可以看出,与上一种注册模式不同的就是用一个叫做“机器码”的东西代替了传统的“用户名”,为什么这样一种方式就可以保证注册过的软件不能被其他人所用呢?这就要从“机器码”的来历说起了! 在我们的计算机中,诸如硬盘、CUP等设备都拥有一个属于自己的ID,这个ID是全球唯一的标识,用于区分其他同类的产品,所以这里的ID就和我们身份证的作用是一样的。因为这个ID的唯一性,所以软件的作者们就在这个东西上动了脑筋。如果以这个ID作为一个“标志”,并对这个唯一的“标志”进行一系列的计算,将得到的结果作为注册码的话,则软件就只能在相对应的机器上使用了。这里所说的ID指的就是“机器码”。 那么,遇到了使用“机器码”的软件应该怎样去分析呢?具体的情形又是怎样的呢?下面我们就详细地介绍一下与“机器码”有关软件的分析过程。我们的目标软件是“PC定时关机精灵”,单击菜单栏的“帮助-&注册”就可以打开软件的注册窗口了,如图1所示,可以很明显地看到软件采取了“机器码+注册码”的方式,而且这里的机器码是一串数字。随便输入一个注册码,果然软件提示我们“注册码不正确”,如图2所示。 &图1 &图2 好了,对软件有了大致的了解之后,我们就可以搬出工具来分析了。首先还是要查一下软件是否加了壳,用PEiD检查一下,结果如图3所示,软件没有加壳,可以直接使用OD来分析了。 &图3 第一步:追踪“机器码” 用OD打开这个软件,现在要找一个合适的位置来设置断点。按照一般的方法,就是打开字符串查找功能,在里面寻找明显的注册提示就可以了。好!打开字符串查找功能,翻来覆去地找了一遍又一遍,却没有发现一点与注册提示有关的信息,这可把我们难住了,看来寻找字符串的方法是行不通了。于是把注意力转移到API函数上,既然软件弹出了一个窗口告诉我们“注册码不正确”,那么就在OD中设置一个函数断点看看。重新运行程序,并在OD的命令行输入命令:“bp MessageBoxA”,这下应该可以了吧?当打开注册窗口输入注册码之后,软件却没有像想象中那样中断下来。这不中断,我们就没有办法分析呀,难道连最有效的两种方法对这个软件都无能为力吗?看来得好好分析分析才能继续了。 我们已经知道这款软件用到了“机器码”,而且“机器码”一般都是从硬盘或是CPU的相关信息中提取出来的,这个提取机器码的过程会不会留下什么痕迹呢?我们再一次打开“字符串查找”来一探究竟,果然在一段代码中发现了可疑的内容,如图4所示。双击来到对应位置的代码处看一看,咦?这里的代码很奇怪,我们以前不论是在分析注册流程还是在分析算法的时候都没有遇到过,先设置一个断点并重新运行程序。这一次正当我们要打开“注册”窗口时,程序就中断下来了。 &图4
/$ 55&& push& ebp ;我们来到这里
|. 8BEC& mov&& ebp, esp 0040211B |. 51&&& push& ecx ;计算前的准备工作 0040211C |. 56&&& push& esi 0040211D |. 33F6& xor&& esi, esi ;清空寄存器 0040211F |. 56&&& push& esi ;/pFileSystemNameSize =& NULL
|. 56&&& push& esi ;|pFileSystemNameBuffer =& NULL
|. 56&&& push& esi ;|pFileSystemFlags =& NULL
|. 8D45 FC lea&& eax, [ebp-4];|
|. 56&&& push& esi ;|pMaxFilenameLength =& NULL
|. 50&&& push& eax ;|pVolumeSerialNumber
|. 56&&& push& esi ;|MaxVolumeNameSize =& 0
|. 56&&& push& esi ;|VolumeNameBuffer =& NULL
|. 68 AC444100 push& 004144AC ; |c: 0040212E |. 8975 FC& mov&& [ebp-4], |
|. FF15 60E04000 call& [&&KERNEL32.GetVolumeInf&; GetVolumeInformationW
|. 85C0&& test& eax, eax ;取了C盘的特征码
这一段代码的作用是什么呢?原来程序就是在这里通过这样一段代码,取得了C盘的特征码(就是C盘的ID)。这里得到的特征码很有可能就要被处理成“机器码”了,当然,从某一个设备的特征码到机器码之间还需要一个计算的过程,这里软件是怎样计算“特征码”的呢?
|. 75 10 jnz&& short 0040214B ;对特征码做进一步的处理 0040213B |. 56& push& esi 0040213C |. 56& push& esi 0040213D |. 68 78EC4000& push& 0040EC78
|. E8 & call& &jmp.&MFC42u.#1197&
|. 33C0 xor& eax, eax
|. EB 11 jmp& short 0040215C 0040214B |& 8B4D FC& mov&& ecx, [ebp-4] ;将C盘的特征码放进ECX中,我们设为str1 0040214E |. 8B45 FC& mov&& eax, [ebp-4] ;再放进EAX中
|. C1E9 10& shr&& ecx, 10 ;取str1的前四位,设为str2
|. 2BC1 sub& eax, ecx ; str1减去str2 得到结果设为str3
|. 0FB74D FC& movzx& ecx, word ptr [ebp-4] ;取str1的后四位,设为str4 0040215A |. 2BC1 sub& eax, ecx ;str3减去str4,我们设为str5 0040215C |& 5E& pop& esi 0040215D |. C9& leave ;将str5转换成对应的10进制数即为“机器码”
看到这个计算过程,顿时觉得非常麻烦,其实里面主要用到的就是最简单的加减运算。大家看代码和注释肯定会晕掉的,还是举例子来说明吧(计算都是十六进制下的)。 第一步:假设程序在这里得到我的C盘的特征码是E8DC53CE,对应代码中的注释,就是str1; 第二步:取它的前四位,即E8DC作为str2; 第三步:用str1减去str2,即E8DC53CE-E8DC=E8DB6AF2,这个值就是str3了; 第四步:取str1的后四位,即53CE作为str4; 第五步:用str4减去str3,即E8DB6AF2-53CE=E8DB1724,这个值就是str 5。 在软件中,我的机器码是,这个数是怎么得来的呢?其实就是E8DB1724对应的十进制数,简单的说,就是在这里把str5转换成对应的十进制数,就是软件中的“机器吗”了。 本想分析软件的注册流程,却无意中发现了机器码的形成过程,虽然没有达到目的,但也还算有所收获。既然“机器码”是在这里形成的,那注册码的计算过程应该也不会离的太远吧,我们继续向下分析。
第二步:直击算法 经过了这里,中段的程序又可以运行起来了。我们打开“注册”窗口并任意输入一个注册码,突然程序又中断了,还是停在了上面所说的代码中,好像程序又把计算“机器码”的过程重复了一遍,不过这一次可是正式的算法计算了,当计算完了机器码之后,程序便来到了以下的代码处。
0040215E . C3& retn 0040215F /$ E8 B4FFFFFF& call&
|. 8BC8 mov ecx, eax ;取出保存的str5
|. 35 EA44D934& xor eax, 34D944EA ;将str5与定值0x34D944EAD做XOR运算 0040216B |. 8BD1 mov edx, ecx ;保存计算结果,设为codeA 0040216D |. C1EA 10& shr edx, 10 ;取str5的前四位,设为codeB
|. 0FB7C9& movzx& ecx, cx ;取str5的后四位,设为codeC
|. 2BC2 sub eax, edx ;codeA减去codeB得到codeD
|. 2BC1 sub eax, ecx ;codeD减去codeC得到codeE
. C3& retn
程序首先将刚刚计算得到的“机器码”取出来,然后将“机器码”与定值0x34D944EAD做了一个XOR运算,即XOR (E8DBD944EAD)=DC0253CE,这个结果我们保存为codeA;然后取str5的前四位作为codeB,将str5的后四位作为codeC,再用codeA减去codeB,即DC0253CE-E8DB=DC016AF3,这个值就为codeD。同样,用codeD的值减去codeC,即DC106AF3-1724=DC0153CF,这样就得到了codeE。从目前的代码来看,计算的过程到这里就结束了,那注册码究竟是什么,我们还不能确定,后面的代码似乎是在进行注册码的验证,继续分析。
/$ 837C24 04 00 cmp dword ptr [esp+4], 0 0040217D |. 77 03 ja short
0040217F |. 33C0 xor eax, eax
|. C3& retn
|& E8 D8FFFFFF& call& 0040215F
|. 33C9 xor ecx, ecx ;将ecx清空
cmp [esp+4], eax ;将注册码与codeE比较 0040218D |. 0F94C1& sete& cl ;标志位赋值
|. 8BC1 mov eax, ecx ;如果相等就赋值为1
. C3& retn ;返回
原来这里的代码是将我们输入的注册码与计算所得到的codeE相比较,如果两者相等
您对本文章有什么意见或着疑问吗?请到您的关注和建议是我们前行的参考和动力&&
您的浏览器不支持嵌入式框架,或者当前配置为不显示嵌入式框架。当前位置: >
> 如何从内存获取机器码呢?从unicode文本中获取一个汉字后,计算机首先得将其转换成二进制机器码来
如何从内存获取机器码呢?从unicode文本中获取一个汉字后,计算机首先得将其转换成二进制机器码来
smilej & at
如何从内存获取机器码呢?从unicode文本中获取一个汉字后,计算机首先得将其转换成二进制机器码来存贮在内存中,怎么从内存中获取这个字的二进制码呢?
  #include&&stdio.h&
void&main(void)
fp=fopen("E:\\c\\大明.txt","r");
cl&=&fgetc(fp);
//如何从内存获得文字的二进制码
while&(cl&!=&EOF);
fclose(fp);
char&c1&=&'0xA6';
c1是不是二进制?smilelw & &
& & (0)(0)<div class='ansercon' id='content_)C的方式
char&c1&=&'0xA6'
char&s[65];//long&long&64Bits,65个字符几乎可以表示任何整型数据的二进制了;
//char&是C中最短的整型数据了;&
//VC6&以上:
&&printf("%s",itoa(c,s,2));//输出整型的二进制,8~32Bits都可以这样用。
char&c1&=&'0xA6'
bitset&8$>$b(c1);//c1最多8Bits
cout$<$b.tostring()$<$//输出字符串形式。
二进制形式数据太长,通常会把二进制数,用16进制表示;
1个16进制数字,用一个字符,代表4Bits数据。
很方便的,早期有用8进制表示的;现在一般都是16进制。
一个char类型数据:&
用16进制表示,只需要2个字符。
10进制要3个字符;
2进制8个字符;
字符本身是计算机内部编码的二进制数据;
内部二进制数据1个字符;
占用一个字节,一共8个Bits。
所以计算机可表示的数据,内部都是二进制编码的;
所以不管哪一种进制表示,在计算机中都是二进制的;
只是这种二进制人是很难识别的;
于是就有各种进制的字符串表示;这是人可以直接识别的数据。
数据输出也是要转换成,各种进制的字符串表示来输出。
于是我们就看到了数据的16进制形式。这是人和计算机都很容易识别的形式。
于是我们就看到了数据的10进制形式。这是人最容易识别的形式。
于是我们就看到了数据的8进制形式。早期的一种数据表示方法。
于是我们就看到了数据的2进制形式。这是计算机内部表示的显化,人可以识别的二进制格式。
这种情况不是类型转换,而是数据的表示方法的转换,数据格式的转换。
类型转换是把一种格式的数据,看做另一种格式的数据使用。
(type)这是C的类型转换,例如&
char&c='0';
int&t&=(int)c;
C++有四个类型转换运算符
static_cast&type&()&&&&//静态类型转换,内部类型直接转换。&
double&y=10;&int&n=&&static_cast&int&(y);
const_cast&type&()&&&&&//常量属性转换,去掉指针的&const&或者volatile属性
dynamic_cast&type&()&&&//向下类型转换,父类转子类指针。
reinterpret_cast&type&()//任意类型指针的转换,不包括const_cast&可以转换的内容,这是一种不可移植的转换。
类型转换不是一种格式转换,只是一种类型替换;
整型,浮点型转字符串,是一种数据格式的转换。
这不是同一种转换。
smileliu & &
& & (0)(0)
本问题标题:
本问题地址:
温馨提示:本问题已经关闭,不能解答。
暂无合适的专家
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&&&湘教QS2-164&&增值电信业务经营许可证湘B2-KEY破解、、 有谁知道如何破解KEY文件,或者说把机器码加入到KEY里面_百度知道
KEY破解、、 有谁知道如何破解KEY文件,或者说把机器码加入到KEY里面
、 这个KEY是不需要联网的?。是通过机器码注册的:yK&#47。如果能弄成。。 说明一下 这个软件在网上面是没有的,里面估计放的就是授权的机器码这个就是 KEY为后坠的 一个授权文件。? 请说明白一点 !哦、 有会的把联系地址留下。。, 有谁能破解或者把我的机器码放入到里面吗,有些小的报酬? 是CPU 还是主板之类的。、,? 我的机器码是?;BrQAIBAAQDzAAlN+CnSXuBgdfd+seSbmzuQ==随便问一下 这种格式的机器码 是获取什么信息得出的?。就是一个本地KEY 。。 是一款设备的软件
然后出现机器码。卖家给了我个密钥,不放进去就提示***错误。?或者有什么工具可以来制作,放进去就可以打开。这软软件自己可以修改吗这个软件是我买的
你这个问题就像说银行卡就知道密码一样的。把KEY和验证KEY文件放上来才知道 ,懂?
其他类似问题
机器码的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 机器码破解注册码 的文章

 

随机推荐