您的位置:首页精文荟萃破解文章 → 算法分析: <献给初学者> 之一

算法分析: <献给初学者> 之一

时间:2004/10/15 0:55:00来源:本站整理作者:蓝点我要评论(0)

 

图标更换器(ExeIco)1.63 版。下载地址:
http://www.softreg.com/download.asp?id={CD05D77E-E9F5-4445-9350-E2FFC8B4F89A}

◆破解难度◆
较难。对于初学者来说,这个是非明码的,而且其算法比较烦琐,可能会觉得挺难。

◆破解简述◆
此软件其实与我以前的教程颇有类似之处,只是,可能大家还不习惯于F5的用法,因此破解起来难度挺大,分析算法时也可能会被绕得头晕脑胀。事实上,大家完全可以照搬我以前教程中的破解方法,一是巧用活用F5,二是妙用“r fl z”这个偷天换日大法,必可建得奇功!关于F5的使用方法及含义,这里不再赘述,请参照相关的教程,动手跟做练习就可以了。关于动态自动注册及爆破,我们也不在这里讨论,都非常简单。这里只将其算法的主要部分叙述如下。

◆算法分析◆

0167:00403DF2 C605F0D3450001 MOV BYTE [0045D3F0],01
0167:00403DF9 33C9 XOR ECX,ECX------------>ECX清零
0167:00403DFB 8D7D80 LEA EDI,[EBP-80]---------------------------------->
将字符串‘1z1h+2a0n-0g8y*9a1n|’(此为定值)送EDI寄存器,后面计算用到,设为M。计算过程中,‘+’、‘-’、‘*’及‘|’不参与运算。
0167:00403DFE BE94474600 MOV ESI,00464794------->机器码送ESI寄存器
0167:00403E03 8D5D98 LEA EBX,[EBP-68]
0167:00403E06 8D4101 LEA EAX,[ECX+01]------->EAX计数器,循环开始▲▲
0167:00403E09 51 PUSH ECX
0167:00403E0A B905000000 MOV ECX,05------------->ECX=$05。0167:00403E0F 99 CDQ------------------------->双位扩展,即EDX清零
0167:00403E10 F7F9 IDIV ECX---------------->EAX MOD ECX=EDX
0167:00403E12 59 POP ECX
0167:00403E13 85D2 TEST EDX,EDX------------>判断余数是否为0
0167:00403E15 7440 JZ 00403E57----------->为0则直接跳到后面并返回开始处重新循环计算过程
0167:00403E17 8A06 MOV AL,[ESI]------>AL=依次取去掉‘-’后的机器码$
0167:00403E19 3207 XOR AL,[EDI]------>AL=机器码$ XOR 依次取M的$ ,结果设为M1
0167:00403E1B 0FBED0 MOVSX EDX,AL ------->EDX=M1
0167:00403E1E 8955B4 MOV [EBP-4C],EDX-->[EBP-4C]=M1
0167:00403E21 8B45B4 MOV EAX,[EBP-4C]-->EAX=M1
0167:00403E24 51 PUSH ECX
0167:00403E25 99 CDQ -------------->EDX清零
0167:00403E26 33C2 XOR EAX,EDX------->EAX MOR EDX=EAX=M1
0167:00403E28 B91A000000 MOV ECX,1A-------->ECX=$1A
0167:00403E2D 2BC2 SUB EAX,EDX------->EAX=M1-EDX=M1
0167:00403E2F 8BD0 MOV EDX,EAX------->EDX=EAX=M1
0167:00403E31 C1E005 SHL EAX,05-------->EAX=M1 * 2^5 0167:00403E34 2BC2 SUB EAX,EDX------->EAX=M2-M1 设为M3
0167:00403E36 8D0482 LEA EAX,[EDX+EAX*4]-->EAX=M3*4+M1 设为M4
0167:00403E39 C1E005 SHL EAX,05----------->EAX=M4 * 2^5 设为M5
0167:00403E3C 03C2 ADD EAX,EDX---------->EAX=M5+M1 设为M6
0167:00403E3E 03C0 ADD EAX,EAX---------->EAX=EAX+EAX=EAX*2 设为M7
0167:00403E40 99 CDQ ----------------->EDX清零
0167:00403E41 F7F9 IDIV ECX----------->EDX=M7 MOD ECX=M7 MOD $1A 设为M8。
0167:00403E43 0FBE03 MOVSX EAX,BYTE [EBX]--->依次取输入的注册码$
0167:00403E46 83C241 ADD EDX,BYTE +41----->EDX=M8+$41 设为M9
0167:00403E49 59 POP ECX
0167:00403E4A 3BD0 CMP EDX,EAX---------->比较取得的输入码$与M9是否相等
0167:00403E4C 7409 JZ 00403E57--------->等则跳到下面继续循环计算,不等则跳向出错!
0167:00403E4E C605F0D3450000 MOV BYTE [0045D3F0],00
0167:00403E55 EB09 JMP SHORT 00403E60--->不等就会跳到这里了,GAMEOVER!
0167:00403E57 41 inc ecx
0167:00403E58 47 inc edi
0167:00403E59 46 inc esi
0167:00403E5A 43 inc ebx
0167:00403E5B 83F914 cmp ecx, 00000014--------->是否取完20位
0167:00403E5E 7CA6 jl 00403E06--------------->没有取完返回循环 ▲▲

再下面的就简单了,主要就是会有一个比较注册码长度是否为24位的地方,否则出错,因此,后5位的码是任意的,就不再赘述了。

◆算法总结◆
以机器码NDFK-NIUY-UWTC-ZOTW-EI16为例,我们来总结一下算法。为了简化过程,只对其中的第一位进行详细算法分析,其它同理。固定字符串M为‘1z1h+2a0n-0g8y*9a1n|’。
第一位字符为N,其$为$4E。因此,算法过程是:
M1= $4E MOR $31(‘1’) = 7F
M2= $7F * 2^5 = $18CE
M3= $18CE - $7F = $184F
M4= $184F * 4 + $7F = $61BB
M5= $61BB * 2^5 = $131686
M6= $131686 + $7F = $131705
M7= $131705 * 2 = $262E0A
M8= $262E0A MOD $1A = $12
M9= $12 +$41 = $53=========>Asc(M9)="S",这就是正确的注册码的第一位了。以下同理,可以得出其它的正确注册码。





    
    
     
    
    
     

相关阅读 Windows错误代码大全 Windows错误代码查询激活windows有什么用Mac QQ和Windows QQ聊天记录怎么合并 Mac QQ和Windows QQ聊天记录Windows 10自动更新怎么关闭 如何关闭Windows 10自动更新windows 10 rs4快速预览版17017下载错误问题Win10秋季创意者更新16291更新了什么 win10 16291更新内容windows10秋季创意者更新时间 windows10秋季创意者更新内容kb3150513补丁更新了什么 Windows 10补丁kb3150513是什么

文章评论
发表评论

热门文章 去除winrar注册框方法

最新文章 比特币病毒怎么破解 比去除winrar注册框方法 华为无线路由器HG522-C破解教程(附超级密码JEB格式文件京东电子书下载和阅读限制破解教UltraISO注册码全集(最新)通过Access破解MSSQL获得数据

人气排行 华为无线路由器HG522-C破解教程(附超级密码JEB格式文件京东电子书下载和阅读限制破解教UltraISO注册码全集(最新)qq相册密码破解方法去除winrar注册框方法(适应任何版本)怎么用手机破解收费游戏华为无线猫HG522破解如何给软件脱壳基础教程