老文章档案 · 2003 年

攻擂: Unlock (1千字)

破解教程 · 算法分析 · 2003-09-08 · 作者:人气: · 出处:赢政天下整理收藏)

尚未成功. 但似乎程序并不在乎输入的是什么,而是所输字串的长度. 下面的这段代码是关键.

* Reference To: MSVBVM50.__vbaLenBstr, Ord:0000h

|

:0041333E E8A1DEFEFF Call 004011E4

:00413343 69C04D010000 imul eax, 0000014D <-字串的长度乘以333

:00413349 898560FFFFFF mov dword ptr [ebp+FFFFFF60], eax

:0041334F DB8560FFFFFF fild dword ptr [ebp+FFFFFF60]<-这里

用WF打开浮点寄存器窗,好象TRW2000不行

:00413355 DC3560104000 fdiv qword ptr [00401060]

:0041335B DC3568104000 fdiv qword ptr [00401068]

:00413361 DC2570104000 fsub qword ptr [00401070]

:00413367 DC2578104000 fsub qword ptr [00401078]

:0041336D DC2590104000 fsub qword ptr [00401090]

:00413373 DD1D4C404100 fstp qword ptr [0041404C]

:00413379 DD0544404100 fld qword ptr [00414044]

:0041337F DC1D98104000 fcomp qword ptr [00401098]<-比较

:00413385 DFE0 fstsw ax

:00413387 9E sahf

:00413388 7528 jne 004133B2 <-这里如果不跳,且eax=0即可

:0041338A 833DAC44410000 cmp dword ptr [004144AC], 00000000

:00413391 750F jne 004133A2

标 题:终于把序列号的计算关系式找出来了,只是不知正误,希望哪个帮我编个小程序算一下序列号,验证一下. (6千字)

发信人:看雪

时 间:2000-3-7 22:15:50

详细信息:

这里是冰毒大侠抓取的一段代码,我换算了一下,假定我们的数字长度是在

:0041337F DC1D98104000 fcomp qword ptr [00401098]处比较

但不能计算出整数长度数字,结果为102.5,此时输入102位和103位数字都不能成功,难到该CrackMe没有序列号?好吧让我们仔细分析这段代码。

第一段:

* Reference To: MSVBVM50.__vbaLenBstr, Ord:0000h

|

:0041333E E8A1DEFEFF Call 004011E4

:00413343 69C04D010000 imul eax, 0000014D <-字串的长度乘以333

:00413349 898560FFFFFF mov dword ptr [ebp+FFFFFF60], eax

<-这里用WF打开浮点寄存器窗,好象TRW2000不行

:0041334F DB8560FFFFFF fild dword ptr [ebp+FFFFFF60]<--将结果放入浮点寄存器

:00413355 DC3560104000 fdiv qword ptr [00401060] <--除以(401060内的值,用dl看)这里除8

:0041335B DC3568104000 fdiv qword ptr [00401068] <--除以60

:00413361 DC2570104000 fsub qword ptr [00401070] <--加2(实际是-(-2))

:00413367 DC2578104000 fsub qword ptr [00401078] <--减0.375

:0041336D DC2590104000 fsub qword ptr [00401090] <--减0.8375

:00413373 DD1D4C404100 fstp qword ptr [0041404C] 储存结果于41404c

:00413379 DD0544404100 fld qword ptr [00414044]

:0041337F DC1D98104000 fcomp qword ptr [00401098]<-这里[00401098]为72,结果却不是和[0041404C]刚才计算的数据比较,因此刚才是白算一场了。而是和它的上一行处的[00414044] 比较,此时你令e 00414044 72即可注册成功。[00414044]并不在上面一段程序计算的,在你来到:00413343处,它的结果早已计算好。

因此我们要找到[00414044]的值何处计算处!向上看看,你会发现如下代码:

第二段

————————————————————————————————————————————

* Referenced by a (U)nconditional or (C)onditional Jump at Address:

|:0041326F(C)

|

:004132E2 DD45E0 fld qword ptr [ebp-20]<--第三段传来的S放入浮点寄存器

:004132E5 DC3558104000 fdiv qword ptr [00401058]

:004132EB FF75E8 push [ebp-18]

:004132EE DD5DE0 fstp qword ptr [ebp-20]--这里的值和本段下面的ebp-20(1处)值相同 你们观察一下会发现S的最后的零没有了,就成了上面的ebp-18的值,即:此处=S/10

* Reference To: MSVBVM50.__vbaLenBstr, Ord:0000h

|

:004132F1 E8EEDEFEFF Call 004011E4

:004132F6 69C09A020000 imul eax, 0000029A

:004132FC 898564FFFFFF mov dword ptr [ebp+FFFFFF64], eax

:00413302 FF75E8 push [ebp-18]

:00413305 DB8564FFFFFF fild dword ptr [ebp+FFFFFF64]

:0041330B DC3560104000 fdiv qword ptr [00401060]

:00413311 DC3568104000 fdiv qword ptr [00401068]

:00413317 DC2570104000 fsub qword ptr [00401070]

:0041331D DC2578104000 fsub qword ptr [00401078]

:00413323 DD1D3C404100 fstp qword ptr [0041403C]

:00413329 DD45E0 fld qword ptr [ebp-20] <--装入ebp-20的值计算 <--1

:0041332C DC3580104000 fdiv qword ptr [00401080]<--除以 [00401080]的值,其定值:6780496716

:00413332 DC0D88104000 fmul qword ptr [00401088]<--乘以 [00401088]的值,其定值:3

:00413338 DD1D44404100 fstp qword ptr [00414044]将结果放入[00414044]!!!!

经过多试几次,发现只有[ebp-20] 的值和我们输入的序列号有关,因此我们将注意力放在何处使[ebp-20] 的值变化。

第三段

——————————————————————————————————————————

在W32dsm89里向上看看,就会看到下面的计算序列号核心处:

:0041326B 663B7580 cmp si, word ptr [ebp-80]<--si是你的序列号的个数n

:0041326F 7F71 jg 004132E2 <--有几个就循环几次,计算完就跳出,此时ebp-20=1627319211840就成功

:00413271 8D45E8 lea eax, dword ptr [ebp-18]

* Possible Reference to String Resource ID=00001: "Thank you for registering"

|

:00413274 C745CC01000000 mov [ebp-34], 00000001

:0041327B 8945AC mov dword ptr [ebp-54], eax

:0041327E 8D45C4 lea eax, dword ptr [ebp-3C]

:00413281 50 push eax

:00413282 897DC4 mov dword ptr [ebp-3C], edi

:00413285 0FBFC6 movsx eax, si

:00413288 50 push eax

:00413289 8D45A4 lea eax, dword ptr [ebp-5C]

:0041328C 50 push eax

:0041328D 8D45B4 lea eax, dword ptr [ebp-4C]

:00413290 50 push eax

:00413291 C745A408400000 mov [ebp-5C], 00004008

* Reference To: MSVBVM50.rtcMidCharVar, Ord:0278h

|

:00413298 E835DFFEFF Call 004011D2

:0041329D 8D45B4 lea eax, dword ptr [ebp-4C]

:004132A0 50 push eax

:004132A1 8D45D8 lea eax, dword ptr [ebp-28]

:004132A4 50 push eax

* Reference To: MSVBVM50.__vbaStrVarVal, Ord:0000h

|

:004132A5 E82EDFFEFF Call 004011D8

:004132AA 50 push eax

* Reference To: MSVBVM50.rtcAnsiValueBstr, Ord:0204h

|

:004132AB E82EDFFEFF Call 004011DE

:004132B0 0FBFC0 movsx eax, ax <-- 此处循环依次取你的序列号

:004132B3 898568FFFFFF mov dword ptr [ebp+FFFFFF68], eax

:004132B9 8D4DD8 lea ecx, dword ptr [ebp-28]

:004132BC DB8568FFFFFF fild dword ptr [ebp+FFFFFF68]<--依次将你的各个序列号的值放入

:004132C2 DC4DE0 fmul qword ptr [ebp-20]< --[ebp-20]的初值为定值2,依次乘以

你的第n个序列号的ascii码的十进制。

:004132C5 DD5DE0 fstp qword ptr [ebp-20]

* Reference To: MSVBVM50.__vbaFreeStr, Ord:0000h

|

:004132C8 E8FFDEFEFF Call 004011CC

:004132CD 8D45B4 lea eax, dword ptr [ebp-4C]

:004132D0 50 push eax

:004132D1 8D45C4 lea eax, dword ptr [ebp-3C]

:004132D4 50 push eax

:004132D5 57 push edi

* Reference To: MSVBVM50.__vbaFreeVarList, Ord:0000h

|

:004132D6 E8EBDEFEFF Call 004011C6

:004132DB 83C40C add esp, 0000000C

:004132DE 03F3 add esi, ebx

:004132E0 EB89 jmp 0041326B

假设我们的序列号为4位,如:a1 a2 a3 a4则:上述计算式为:

a1*2*a3*a4=s :其中:a1,a2...都是Ascii码的十进制。

计算完后,由:0041326F jg 004132E2 处跳出,把S放入ebp-20送入:004132E2处进行计算。

在第二段00413329 处,计算为:

[(S/10)/(6780496716)]*3=72

经过计算:s= 1627319211840

*************************************************************************

a1*a2*a3*a4*....*a(n)=s/2=813659605920 其中:a1,a2...都是Ascii码的十进制。

这是该程序的序列号计算式.

*************************************************************************

打个比方:假如序列号是1234;

则:49*50*51*52...=s/2后,程序就注册成功。

要反推出序列号还真不容易,我试了一下没推算出来,看来得编个程序看看有没有这样的数字满足这种关系,感兴趣的朋友可编个小程序计算一下序列号。(序列号不限于数字,只要是可见的ascii就可) (出处:赢政天下整理收藏)

相关文章:

·语音界面2.0算法分析及注册机源码!

·侠客系统修改器1.21破解手记--算法分析

·中文拨号上网计时计费器 V4.12注册算法分析

·ClockWise 3.22e注册码算法分析

·CoolClock V1.02注册算法分析

·Directory Scanner v1.5 注册算法分析

·Disk Chief 1.2 简单注册算法分析

·EffeTech HTTP Sniffer 3.2注册算法分析

·eLib2.01算法分析

·EZ MP3 Recorder 1.15 注册算法分析

相关软件:

→ 特别推荐

→ 热点TOP10

我为人人《《==》》人人为我

关于我们 |

帮助(?)

| 广告服务 |

版权声明 |

商业合作 |

发展历程 |

加盟我们 |

联系我们

Copyright © 1999-2003

winzheng.com All Rights Reserved.

繁体版:由华琦数码技术提供

Powered

by:MeSky.Net

2003-2004 年,宽带刚刚普及,下载站的文章区是许多人学电脑的第一课堂。
🕰 → 🤖 从那时到现在

当年一篇教程能让一台电脑焕然一新;今天的效率工具换成了 AI。 想知道当下最可靠的 AI 模型怎么选?看 赢政指数——我们用了 28 年的选软件严谨,现在用来评测大模型。

档案性质声明:本页为赢政天下(1998-2011)老文章的历史档案复原, 内容反映当年发表时的原貌——包括当年的技术表述、软件版本与观点,部分方法在今天已不适用或不合规,仅作互联网历史记录与研究用途, 不提供任何形式的下载。原始数据经由公共网络存档(Internet Archive)复原。发现问题请联系我们
← 返回老文章档案 · 软件史档案馆 · 赢政天下站史