老文章档案 · 2003 年

变速精灵 XP 简体中文版注册分析

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

软件名称:变速精灵 XP 简体中文版

软件简介:变速精灵是一个可以改变Windows 软件速度的神奇软件。

您可以使用变速精灵加快或者减慢软件的运行速度,例如您的游戏软件。

变速精灵XP是目前最新最好用的一个版本

软件主页: http://www.speederxp.com

下载地址:从电脑报2002合订本配套光盘中挖出来的!

破解过程:

1、用W32Dasm反编该软件后,查找到字符串“变速精灵-未注册板”。

双击后我们就可以来到下面这里:

* Possible StringData Ref from Data Obj ->"变速精灵 - 未注册版"

|

:00403762 68B4B14000 push 0040B1B4

:00403767 8BCF mov ecx, edi

2、向上来到:

:004036B0 64A100000000 mov eax, dword ptr fs:[00000000]

:004036B6 6AFF push FFFFFFFF

:004036B8 6841734000 push 00407341

:004036BD 50 push eax

:004036BE 8B442410 mov eax, dword ptr [esp+10] ;? eax 显示189993728(计算后的机器码)

:004036C2 64892500000000 mov dword ptr fs:[00000000], esp ;我的机器码是189-728-1015-993

:004036C9 81EC10040000 sub esp, 00000410 ;是机器码的1,4,2部分相连

:004036CF 57 push edi

:004036D0 8BF9 mov edi, ecx

:004036D2 50 push eax

:004036D3 C7476001000000 mov [edi+60], 00000001

:004036DA E8D1D9FFFF call 004010B0 ;进入

:004036DF 8B8C242C040000 mov ecx, dword ptr [esp+0000042C]

:004036E6 83C404 add esp, 00000004

:004036E9 3BC1 cmp eax, ecx ;判断真假注册码

:004036EB 0F8484010000 je 00403875 ;相等则跳

:004036F1 56 push esi

:004036F2 8D4C2410 lea ecx, dword ptr [esp+10]

:004036F6 C7476000000000 mov [edi+60], 00000000

3、进入后来到:

* Referenced by a CALL at Address:

|:004036DA

|

:004010B0 55 push ebp

:004010B1 8BEC mov ebp, esp

:004010B3 56 push esi

:004010B4 8B7508 mov esi, dword ptr [ebp+08]

:004010B7 C1EE0A shr esi, 0A ;将计算后的机器码右移10位

:004010BA 8D05D0104000 lea eax, dword ptr [004010D0]

:004010C0 50 push eax

:004010C1 E8CAFFFFFF call 00401090 ;再进入

:004010C6 C3 ret

4、进入后来到:

:00401090 55 push ebp

:00401091 8BEC mov ebp, esp

:00401093 51 push ecx

:00401094 E800000000 call 00401099 ;再进入

* Referenced by a CALL at Address:

|:00401094

|

:00401099 58 pop eax ;来到这

:0040109A 83E819 sub eax, 00000019

:0040109D 8945FC mov dword ptr [ebp-04], eax

:004010A0 8B45FC mov eax, dword ptr [ebp-04]

:004010A3 8BE5 mov esp, ebp

:004010A5 5D pop ebp

:004010A6 C3 ret

5、最后来到:

:004010D0 C14D080F ror dword ptr [ebp+08], 0F ;机器码循环右移15位

:004010D4 8B4508 mov eax, dword ptr [ebp+08] ;存入eax

:004010D7 33C9 xor ecx, ecx ;计数器ecx清零

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

|:004010EA(C)

|

:004010D9 8BD0 mov edx, eax ;存入edx

:004010DB D3EA shr edx, cl ;右移cl位

:004010DD 83E203 and edx, 00000003 ;与3

:004010E0 03D6 add edx, esi ;加上esi(esi初值为计算后的机器码右移10位的值)

:004010E2 D1E2 shl edx, 1 ;左移1位

:004010E4 41 inc ecx ;计数器加1

:004010E5 8BF2 mov esi, edx ;再存入esi中

:004010E7 83F91F cmp ecx, 0000001F ;比较计数器是否为31

:004010EA 7CED jl 004010D9 ;小于再次计算

:004010EC 8BC6 mov eax, esi ;最后存入eax,也就是真注册码

:004010EE 5E pop esi

:004010EF 5D pop ebp

:004010F0 C3 ret

机器码:189-728-1015-993

注册码:4211606004

用真注册码重新注册后,成功!

内存注册机免写,太简单了!

注册机免写,能力不足,有人帮忙么。

没人破过吧!

13.

超级Ping V1.0算法分析

超级Ping V1.0

超级Ping1.0(PingPlus V1.0)是一个可以实现对多个主机网络状态的实时监测,并有自动记录分析结果、断网自动告警等功能的网络监测软件。监测的结果可以记录在以IP地址为文件名的文本文件中,也可以记录在Acess数据库中,由用户自由选择。PingPlus的使用非常简便、功能强大且稳定,可以极大地方便网管人员的工作...

原版下载:

http://211.147.192.99/movie/vc/tools/PingPlus_Setup.exe

00406448 . 8D4C24 24 LEA ECX,DWORD PTR SS:[ESP+24]

0040644C . 8D5424 14 LEA EDX,DWORD PTR SS:[ESP+14]

00406450 . 51 PUSH ECX

00406451 . 68 60C14000 PUSH PingPlus.0040C160 ; ASCII "%s"

00406456 . 52 PUSH EDX

00406457 . E8 240C0000 CALL

0040645C . 8B85 E8000000 MOV EAX,DWORD PTR SS:[EBP+E8]

00406462 . 50 PUSH EAX ; /s2

00406463 . 8B4424 24 MOV EAX,DWORD PTR SS:[ESP+24] ; |

00406467 . 50 PUSH EAX ; |s1

00406468 . FF15 90934000 CALL NEAR DWORD PTR DS:[<&MSVCRT._mbscmp>; \_mbscmp====》此CALL为注册码比较处,至此真注册码已计算完成。如果只想找注册码的话在此处下断吧!寄存器里就有了。如想揪出算法就需要继续往上找。真正的算法从406310处开始。

0040646E . 83C4 14 ADD ESP,14

00406471 . 85C0 TEST EAX,EAX

00406473 . 6A 00 PUSH 0

00406475 . 0F85 1B010000 JNZ PingPlus.00406596====》此处跳往出错处。

0040647B . 68 D8C74000 PUSH PingPlus.0040C7D8

00406480 . 68 A4C74000 PUSH PingPlus.0040C7A4

00406485 . 8BCD MOV ECX,EBP

00406487 . E8 B00D0000 CALL

0040648C . 8D4C24 1C LEA ECX,DWORD PTR SS:[ESP+1C]

00406490 . 8D5424 10 LEA EDX,DWORD PTR SS:[ESP+10]

00406494 . 51 PUSH ECX ; /pDisposition

00406495 . 8B35 10904000 MOV ESI,DWORD PTR DS:[<&ADVAPI32.RegCrea>; |ADVAPI32.RegCreateKeyExA

0040649B . 52 PUSH EDX ; |pHandle

0040649C . 6A 00 PUSH 0 ; |pSecurity = NULL

0040649E . 68 06000200 PUSH 20006 ; |Access = KEY_WRITE

004064A3 . 6A 00 PUSH 0 ; |Options = REG_OPTION_NON_VOLATILE

004064A5 . 6A 00 PUSH 0 ; |Class = NULL

004064A7 . 6A 00 PUSH 0 ; |Reserved = 0

004064A9 . 68 88C74000 PUSH PingPlus.0040C788 ; |Subkey = "Software\Microsoft\PInfo"

004064AE . 68 01000080 PUSH 80000001 ; |hKey = HKEY_CURRENT_USER

004064B3 . C74424 3C 1B0>MOV DWORD PTR SS:[ESP+3C],1B ; |

004064BB . FFD6 CALL NEAR ESI ; \RegCreateKeyExA

004064BD . 8B3D 0C904000 MOV EDI,DWORD PTR DS:[<&ADVAPI32.RegSetV>; ADVAPI32.RegSetvalueExA

004064C3 . 8B1D 00904000 MOV EBX,DWORD PTR DS:[<&ADVAPI32.RegClos>; ADVAPI32.RegCloseKey

004064C9 . 85C0 TEST EAX,EAX

004064CB . 75 30 JNZ SHORT PingPlus.004064FD

004064CD . 8B4C24 10 MOV ECX,DWORD PTR SS:[ESP+10]

004064D1 . 8D4424 18 LEA EAX,DWORD PTR SS:[ESP+18]

004064D5 . 6A 04 PUSH 4 ; /BufSize = 4

004064D7 . 50 PUSH EAX ; |Buffer

004064D8 . 6A 04 PUSH 4 ; |valueType = REG_DWORD

004064DA . 6A 00 PUSH 0 ; |Reserved = 0

004064DC . 68 80C74000 PUSH PingPlus.0040C780 ; |valueName = "State"

004064E1 . 51 PUSH ECX ; |hKey

004064E2 . FFD7 CALL NEAR EDI ; \RegSetvalueExA

004064E4 . 85C0 TEST EAX,EAX

004064E6 . 74 0E JE SHORT PingPlus.004064F6

004064E8 . 6A 00 PUSH 0

004064EA . 6A 00 PUSH 0

004064EC . 68 60C74000 PUSH PingPlus.0040C760

004064F1 . E8 0E0C0000 CALL

004064F6 > 8B5424 10 MOV EDX,DWORD PTR SS:[ESP+10]

004064FA . 52 PUSH EDX

004064FB . FFD3 CALL NEAR EBX

004064FD > 8D4424 1C LEA EAX,DWORD PTR SS:[ESP+1C]

00406501 . 8D4C24 10 LEA ECX,DWORD PTR SS:[ESP+10]

00406505 . 50 PUSH EAX

00406506 . 51 PUSH ECX

00406507 . 6A 00 PUSH 0

00406509 . 68 06000200 PUSH 20006

0040650E . 6A 00 PUSH 0

00406510 . 6A 00 PUSH 0

00406512 . 6A 00 PUSH 0

00406514 . 68 28C74000 PUSH PingPlus.0040C728 ; ASCII "Software\PingPlus"

00406519 . 68 01000080 PUSH 80000001

0040651E . FFD6 CALL NEAR ESI

00406520 . 85C0 TEST EAX,EAX

00406522 . 75 4B JNZ SHORT PingPlus.0040656F

00406524 . 51 PUSH ECX

00406525 . 8DB5 E4000000 LEA ESI,DWORD PTR SS:[EBP+E4]

0040652B . 8BCC MOV ECX,ESP

0040652D . 896424 24 MOV DWORD PTR SS:[ESP+24],ESP

00406531 . 56 PUSH ESI

00406532 . E8 BD0C0000 CALL

00406537 . 8BCD MOV ECX,EBP

00406539 . E8 92000000 CALL PingPlus.004065D0

0040653E . 8B16 MOV EDX,DWORD PTR DS:[ESI]

00406540 . 8B4A F8 MOV ECX,DWORD PTR DS:[EDX-8]

00406543 . 41 INC ECX

00406544 . 51 PUSH ECX

00406545 . 50 PUSH EAX

00406546 . 8B4424 18 MOV EAX,DWORD PTR SS:[ESP+18]

0040654A . 6A 01 PUSH 1

0040654C . 6A 00 PUSH 0

0040654E . 68 1CC74000 PUSH PingPlus.0040C71C ; ASCII "UserName"

00406553 . 50 PUSH EAX

00406554 . FFD7 CALL NEAR EDI

00406556 . 85C0 TEST EAX,EAX

00406558 . 74 0E JE SHORT PingPlus.00406568

0040655A . 6A 00 PUSH 0

0040655C . 6A 00 PUSH 0

0040655E . 68 50C74000 PUSH PingPlus.0040C750

00406563 . E8 9C0B0000 CALL

00406568 > 8B4C24 10 MOV ECX,DWORD PTR SS:[ESP+10]

0040656C . 51 PUSH ECX

0040656D . FFD3 CALL NEAR EBX

0040656F > E8 D60A0000 CALL

00406574 . 85C0 TEST EAX,EAX

00406576 . 74 09 JE SHORT PingPlus.00406581

00406578 . 8B10 MOV EDX,DWORD PTR DS:[EAX]

0040657A . 8BC8 MOV ECX,EAX

0040657C . FF52 7C CALL NEAR DWORD PTR DS:[EDX+7C]

0040657F . EB 02 JMP SHORT PingPlus.00406583

00406581 > 33C0 XOR EAX,EAX

00406583 > 8BCD MOV ECX,EBP

00406585 . C780 98050000>MOV DWORD PTR DS:[EAX+598],1B

0040658F . E8 C20A0000 CALL

00406594 . EB 11 JMP SHORT PingPlus.004065A7

00406596 > 68 48C74000 PUSH PingPlus.0040C748=====》从何处来?

0040659B . 68 3CC74000 PUSH PingPlus.0040C73C=====》此处为出错提示处。往上查找跳到此处的地方。

004065A0 . 8BCD MOV ECX,EBP

004065A2 . E8 950C0000 CALL

004065A7 > 8D4C24 14 LEA ECX,DWORD PTR SS:[ESP+14]

004065AB . C74424 64 FFF>MOV DWORD PTR SS:[ESP+64],-1

004065B3 . E8 1E090000 CALL

004065B8 . 8B4C24 5C MOV ECX,DWORD PTR SS:[ESP+5C]

004065BC . 5F POP EDI

004065BD . 5E POP ESI

004065BE . 5D POP EBP

004065BF . 64:890D 00000>MOV DWORD PTR FS:[0],ECX

004065C6 . 5B POP EBX

004065C7 . 83C4 58 ADD ESP,58

004065CA . C3 RETN

计算注册码的地方到了!

00406310 . 6A FF PUSH -1

00406312 . 68 68814000 PUSH PingPlus.00408168 ; SE handler installation

00406317 . 64:A1 0000000>MOV EAX,DWORD PTR FS:[0]

0040631D . 50 PUSH EAX

0040631E . 64:8925 00000>MOV DWORD PTR FS:[0],ESP

00406325 . 83EC 4C SUB ESP,4C

00406328 . 53 PUSH EBX

00406329 . 55 PUSH EBP

0040632A . 8BE9 MOV EBP,ECX

0040632C . 56 PUSH ESI

0040632D . 57 PUSH EDI

0040632E . 8D4C24 14 LEA ECX,DWORD PTR SS:[ESP+14]

00406332 . E8 B10B0000 CALL

00406337 . 6A 01 PUSH 1

00406339 . 8BCD MOV ECX,EBP

0040633B . C74424 68 000>MOV DWORD PTR SS:[ESP+68],0

00406343 . E8 260D0000 CALL

00406348 . 8BBD E4000000 MOV EDI,DWORD PTR SS:[EBP+E4]====》将用户名移入EDI。

0040634E . 83C9 FF OR ECX,FFFFFFFF

00406351 . 33C0 XOR EAX,EAX

00406353 . 8D5424 24 LEA EDX,DWORD PTR SS:[ESP+24]

00406357 . F2:AE REPNE SCAS BYTE PTR ES:[EDI]

00406359 . F7D1 NOT ECX

0040635B . 2BF9 SUB EDI,ECX

0040635D . 8BC1 MOV EAX,ECX====》EAC中为用户名字符个数。

0040635F . 8BF7 MOV ESI,EDI====》将EDI中的用户名移入ESI。

00406361 . 8BFA MOV EDI,EDX

00406363 . C1E9 02 SHR ECX,2

00406366 . F3:A5 REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS>

00406368 . 8BC8 MOV ECX,EAX

0040636A . 33C0 XOR EAX,EAX

0040636C . 83E1 03 AND ECX,3====》ECX中为用户名字符个数+1。

0040636F . F3:A4 REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[>

00406371 . 8D7C24 24 LEA EDI,DWORD PTR SS:[ESP+24]====》把用户名移入EDI。

00406375 . 83C9 FF OR ECX,FFFFFFFF

00406378 . F2:AE REPNE SCAS BYTE PTR ES:[EDI]

0040637A . F7D1 NOT ECX

0040637C . 49 DEC ECX

0040637D . 83F9 13 CMP ECX,13====》此ECX中为用户名长度,与13H比较。

00406380 . 7D 0F JGE SHORT PingPlus.00406391====》大于等于13H则跳。否则往下。

00406382 > 8AD1 MOV DL,CL====》CL的循环初始值为用户名字符个数。

00406384 . 80C2 41 ADD DL,41====》加上41,即转换为英文字母。

00406387 . 88540C 24 MOV BYTE PTR SS:[ESP+ECX+24],DL====》将得到的英文字母依次保存。

0040638B . 41 INC ECX====》用户名字符个数自加1。

0040638C . 83F9 13 CMP ECX,13====》与13H比较。

0040638F .^ 7C F1 JL SHORT PingPlus.00406382====》小于则跳。继续循环。循环的次数为13H-用户名字符个数。

00406391 > 8B4C24 33 MOV ECX,DWORD PTR SS:[ESP+33]====》将用户名字符串的16-19位字符的十六进制值移入ECX。

00406395 . 8B4424 2F MOV EAX,DWORD PTR SS:[ESP+2F]====》将用户名字符串的12-15位字符的十六进制值移入EAX。

00406399 . 8B5424 26 MOV EDX,DWORD PTR SS:[ESP+26]====》将用户名字符串的3-6位字符的十六进制值移入EDX。

0040639D . 894C24 40 MOV DWORD PTR SS:[ESP+40],ECX====》将16-19位保存。

004063A1 . 66:8B4C24 2E MOV CX,WORD PTR SS:[ESP+2E]====》将用户名字符串的11-12位字符的十六进制值移入CX。

004063A6 . 894424 3C MOV DWORD PTR SS:[ESP+3C],EAX====》将12-15位保存。

004063AA . 8B4424 2A MOV EAX,DWORD PTR SS:[ESP+2A]====》将用户名字符串的7-10位字符的十六进制值移入EAX。

004063AE . 895424 44 MOV DWORD PTR SS:[ESP+44],EDX====》将3-6位保存。

004063B2 . 8A5424 30 MOV DL,BYTE PTR SS:[ESP+30]=====》将用户名字符串的第13位字符的十六进制值移入DL。

004063B6 . 66:894C24 4C MOV WORD PTR SS:[ESP+4C],CX====》将11-12位保存。

004063BB . C64424 37 00 MOV BYTE PTR SS:[ESP+37],0

004063C0 . 894424 48 MOV DWORD PTR SS:[ESP+48],EAX====》将7-10位保存。

004063C4 . 885424 4E MOV BYTE PTR SS:[ESP+4E],DL====》将第13位保存。

004063C8 . C64424 4F 00 MOV BYTE PTR SS:[ESP+4F],0

004063CD . 33C9 XOR ECX,ECX

004063CF > 0FBE440C 3C MOVSX EAX,BYTE PTR SS:[ESP+ECX+3C]====》从第12位开始依次取字符串中连续8个字符的十六进制值。再依次取3-13位字符。共19位。

004063D4 . BE 1A000000 MOV ESI,1A====》将1AH移入ESI。

004063D9 . 8D4480 09 LEA EAX,DWORD PTR DS:[EAX+EAX*4+9]====》换算。EAX=EAX+EAX*4+9。

004063DD . 99 CDQ===》扩展。

004063DE . F7FE IDIV ESI====》除以1AH。

004063E0 . 80C2 41 ADD DL,41====》余数加上41H。即转换成英文字母。

004063E3 . 88540C 24 MOV BYTE PTR SS:[ESP+ECX+24],DL====》将所得的英文字母保存。

004063E7 . 41 INC ECX====》自加1。

004063E8 . 83F9 13 CMP ECX,13====》比较。

004063EB .^ 7C E2 JL SHORT PingPlus.004063CF====》小于则跳。继续循环。否则往下。

004063ED . BF 1A000000 MOV EDI,1A

004063F2 . 8D4424 24 LEA EAX,DWORD PTR SS:[ESP+24]====》将处理好的字符串移入EAX,第一步加密结束。

004063F6 . 33F6 XOR ESI,ESI====》清零。

004063F8 . 2BF8 SUB EDI,EAX

004063FA > 8D4C34 24 LEA ECX,DWORD PTR SS:[ESP+ESI+24]====》第二步计算注册码开始。将第一步所得的字符串移入ECX。下次处理时把未处理的字符串移入ECX。

004063FE . B8 BC070000 MOV EAX,7BC

00406403 . 99 CDQ

00406404 . 8D1C0F LEA EBX,DWORD PTR DS:[EDI+ECX]====》将DS中的值(初始值为1AH,每循环一次增加1)移入EBX。

00406407 . F7FB IDIV EBX====》除以1AH。

00406409 . 8BD8 MOV EBX,EAX====》得数移入EBX。

0040640B . 0FBE01 MOVSX EAX,BYTE PTR DS:[ECX]====》依次将字符的十六进制值逐个移入EAX进行处理。

0040640E . 99 CDQ

0040640F . 2BC2 SUB EAX,EDX====》字符的十六进制值减去余数(其实此处的EDX的值均为零)。

00406411 . D1F8 SAR EAX,1=====》右移1。

00406413 . 02D8 ADD BL,AL=====》相加。

00406415 . 80FB 41 CMP BL,41=====》比较是不是英文字母。

00406418 . 8819 MOV BYTE PTR DS:[ECX],BL

0040641A . 7D 10 JGE SHORT PingPlus.0040642C====》是则跳。

0040641C . 0FBEC3 MOVSX EAX,BL

0040641F . 99 CDQ

00406420 . BB 1A000000 MOV EBX,1A

00406425 . F7FB IDIV EBX

00406427 . 80C2 41 ADD DL,41

0040642A . 8811 MOV BYTE PTR DS:[ECX],DL

0040642C > 8A01 MOV AL,BYTE PTR DS:[ECX]

0040642E . 3C 5A CMP AL,5A====》比较。

00406430 . 7E 10 JLE SHORT PingPlus.00406442====》小于5AH,即为大写字母则跳。否则往下。

00406432 . 0FBEC0 MOVSX EAX,AL====》将该字符的十六进制值移入EAX重新进行计算。

00406435 . 99 CDQ

00406436 . BB 1A000000 MOV EBX,1A

0040643B . F7FB IDIV EBX===》除以1AH。

0040643D . 80C2 41 ADD DL,41====》余数加上41H。

00406440 . 8811 MOV BYTE PTR DS:[ECX],DL====》将所得值保存,替换原字符。

00406442 > 46 INC ESI====》自加1。

00406443 . 83FE 13 CMP ESI,13====》比较。

00406446 .^ 7C B2 JL SHORT PingPlus.004063FA====》未到13H位则继续循环。

00406448 . 8D4C24 24 LEA ECX,DWORD PTR SS:[ESP+24]====》循环结束后将处理完的字符串(其实就是真正的注册码了!)移入ECX。

0040644C . 8D5424 14 LEA EDX,DWORD PTR SS:[ESP+14]

00406450 . 51 PUSH ECX

00406451 . 68 60C14000 PUSH PingPlus.0040C160 ; ASCII "%s"

00406456 . 52 PUSH EDX

00406457 . E8 240C0000 CALL

0040645C . 8B85 E8000000 MOV EAX,DWORD PTR SS:[EBP+E8]=====》将输入的假注册码移入EAX。

00406462 . 50 PUSH EAX ; /s2

00406463 . 8B4424 24 MOV EAX,DWORD PTR SS:[ESP+24] ; |

00406467 . 50 PUSH EAX ; |s1

00406468 . FF15 90934000 CALL NEAR DWORD PTR DS:[<&MSVCRT._mbscmp>; \_mbscmp====》比较真假注册码。

0040646E . 83C4 14 ADD ESP,14

00406471 . 85C0 TEST EAX,EAX

00406473 . 6A 00 PUSH 0

00406475 . 0F85 1B010000 JNZ PingPlus.00406596

0040647B . 68 D8C74000 PUSH PingPlus.0040C7D8

00406480 . 68 A4C74000 PUSH PingPlus.0040C7A4

00406485 . 8BCD MOV ECX,EBP

00406487 . E8 B00D0000 CALL

0040648C . 8D4C24 1C LEA ECX,DWORD PTR SS:[ESP+1C]

00406490 . 8D5424 10 LEA EDX,DWORD PTR SS:[ESP+10]

00406494 . 51 PUSH ECX ; /pDisposition

00406495 . 8B35 10904000 MOV ESI,DWORD PTR DS:[<&ADVAPI32.RegCrea>; |ADVAPI32.RegCreateKeyExA

0040649B . 52 PUSH EDX ; |pHandle

0040649C . 6A 00 PUSH 0 ; |pSecurity = NULL

0040649E . 68 06000200 PUSH 20006 ; |Access = KEY_WRITE

004064A3 . 6A 00 PUSH 0 ; |Options = REG_OPTION_NON_VOLATILE

004064A5 . 6A 00 PUSH 0 ; |Class = NULL

004064A7 . 6A 00 PUSH 0 ; |Reserved = 0

004064A9 . 68 88C74000 PUSH PingPlus.0040C788 ; |Subkey = "Software\Microsoft\PInfo"

004064AE . 68 01000080 PUSH 80000001 ; |hKey = HKEY_CURRENT_USER

004064B3 . C74424 3C 1B0>MOV DWORD PTR SS:[ESP+3C],1B ; |

004064BB . FFD6 CALL NEAR ESI ; \RegCreateKeyExA

004064BD . 8B3D 0C904000 MOV EDI,DWORD PTR DS:[<&ADVAPI32.RegSetV>; ADVAPI32.RegSetvalueExA

004064C3 . 8B1D 00904000 MOV EBX,DWORD PTR DS:[<&ADVAPI32.RegClos>; ADVAPI32.RegCloseKey

004064C9 . 85C0 TEST EAX,EAX

004064CB . 75 30 JNZ SHORT PingPlus.004064FD

004064CD . 8B4C24 10 MOV ECX,DWORD PTR SS:[ESP+10]

004064D1 . 8D4424 18 LEA EAX,DWORD PTR SS:[ESP+18]

004064D5 . 6A 04 PUSH 4 ; /BufSize = 4

004064D7 . 50 PUSH EAX ; |Buffer

004064D8 . 6A 04 PUSH 4 ; |valueType = REG_DWORD

004064DA . 6A 00 PUSH 0 ; |Reserved = 0

004064DC . 68 80C74000 PUSH PingPlus.0040C780 ; |valueName = "State"

004064E1 . 51 PUSH ECX ; |hKey

004064E2 . FFD7 CALL NEAR EDI ; \RegSetvalueExA

004064E4 . 85C0 TEST EAX,EAX

004064E6 . 74 0E JE SHORT PingPlus.004064F6

004064E8 . 6A 00 PUSH 0

004064EA . 6A 00 PUSH 0

004064EC . 68 60C74000 PUSH PingPlus.0040C760

004064F1 . E8 0E0C0000 CALL

004064F6 > 8B5424 10 MOV EDX,DWORD PTR SS:[ESP+10]

004064FA . 52 PUSH EDX

004064FB . FFD3 CALL NEAR EBX

004064FD > 8D4424 1C LEA EAX,DWORD PTR SS:[ESP+1C]

00406501 . 8D4C24 10 LEA ECX,DWORD PTR SS:[ESP+10]

00406505 . 50 PUSH EAX

00406506 . 51 PUSH ECX

00406507 . 6A 00 PUSH 0

00406509 . 68 06000200 PUSH 20006

0040650E . 6A 00 PUSH 0

00406510 . 6A 00 PUSH 0

00406512 . 6A 00 PUSH 0

00406514 . 68 28C74000 PUSH PingPlus.0040C728 ; ASCII "Software\PingPlus"

00406519 . 68 01000080 PUSH 80000001

0040651E . FFD6 CALL NEAR ESI

00406520 . 85C0 TEST EAX,EAX

00406522 . 75 4B JNZ SHORT PingPlus.0040656F

00406524 . 51 PUSH ECX

00406525 . 8DB5 E4000000 LEA ESI,DWORD PTR SS:[EBP+E4]

0040652B . 8BCC MOV ECX,ESP

0040652D . 896424 24 MOV DWORD PTR SS:[ESP+24],ESP

00406531 . 56 PUSH ESI

00406532 . E8 BD0C0000 CALL

00406537 . 8BCD MOV ECX,EBP

00406539 . E8 92000000 CALL PingPlus.004065D0

0040653E . 8B16 MOV EDX,DWORD PTR DS:[ESI]

00406540 . 8B4A F8 MOV ECX,DWORD PTR DS:[EDX-8]

00406543 . 41 INC ECX

00406544 . 51 PUSH ECX

00406545 . 50 PUSH EAX

00406546 . 8B4424 18 MOV EAX,DWORD PTR SS:[ESP+18]

0040654A . 6A 01 PUSH 1

0040654C . 6A 00 PUSH 0

0040654E . 68 1CC74000 PUSH PingPlus.0040C71C ; ASCII "UserName"

00406553 . 50 PUSH EAX

00406554 . FFD7 CALL NEAR EDI

00406556 . 85C0 TEST EAX,EAX

00406558 . 74 0E JE SHORT PingPlus.00406568

0040655A . 6A 00 PUSH 0

0040655C . 6A 00 PUSH 0

0040655E . 68 50C74000 PUSH PingPlus.0040C750

00406563 . E8 9C0B0000 CALL

00406568 > 8B4C24 10 MOV ECX,DWORD PTR SS:[ESP+10]

0040656C . 51 PUSH ECX

0040656D . FFD3 CALL NEAR EBX

0040656F > E8 D60A0000 CALL

00406574 . 85C0 TEST EAX,EAX

00406576 . 74 09 JE SHORT PingPlus.00406581

00406578 . 8B10 MOV EDX,DWORD PTR DS:[EAX]

0040657A . 8BC8 MOV ECX,EAX

0040657C . FF52 7C CALL NEAR DWORD PTR DS:[EDX+7C]

0040657F . EB 02 JMP SHORT PingPlus.00406583

00406581 > 33C0 XOR EAX,EAX

00406583 > 8BCD MOV ECX,EBP

00406585 . C780 98050000>MOV DWORD PTR DS:[EAX+598],1B

0040658F . E8 C20A0000 CALL

00406594 . EB 11 JMP SHORT PingPlus.004065A7

00406596 > 68 48C74000 PUSH PingPlus.0040C748

0040659B . 68 3CC74000 PUSH PingPlus.0040C73C

004065A0 . 8BCD MOV ECX,EBP

004065A2 . E8 950C0000 CALL

004065A7 > 8D4C24 14 LEA ECX,DWORD PTR SS:[ESP+14]

004065AB . C74424 64 FFF>MOV DWORD PTR SS:[ESP+64],-1

004065B3 . E8 1E090000 CALL

004065B8 . 8B4C24 5C MOV ECX,DWORD PTR SS:[ESP+5C]

004065BC . 5F POP EDI

004065BD . 5E POP ESI

004065BE . 5D POP EBP

004065BF . 64:890D 00000>MOV DWORD PTR FS:[0],ECX

004065C6 . 5B POP EBX

004065C7 . 83C4 58 ADD ESP,58

004065CA . C3 RETN

总结如下:

1、用户名长度最长为19位(此软件最多可以输入20位,但第20位无效)。

2、用户名长度如果不足19位,程序将自动补齐不足的部分。补齐算法见上述分析。

例如用户名为abcd,则补齐部分的第一个字符的十六进制值为4H(用户名长度)+41H=45H,即字母E,以后的分别 为 F--S。用户名补齐后为abcdEFGHIJKLMNOPQRS。

3、计算注册码:

第一步:先把用户名加密成另一字符串。

从第12位开始依次取用户名字符串中连续8个字符的十六进制值,接着依次取3-13位进行计算。仍以上面的为例:

第12位L十六进制值4C,相应的加密字符=(4C*5+9)除以1A的余数+41,即41,字符为Z。

第13位M十六进制值4D,相应的加密字符=(4D*5+9)除以1A的余数+41,即45,字符为E。

第14位N十六进制值4E,相应的加密字符=(4E*5+9)除以1A的余数+41,即4A,字符为J。

加密后的字符串为: ZEJOTYDIKPQVAFKPUZE

第二步:将加密后的字符串换算成注册码。(注意注册码必须为大写英文字母)

现仅以计算前几位注册码为例:其中7BC和1A为常数。

第一位注册码:Z的十六进制值为5A

5A/2=2D

7BC/1A=4C

2D+4C=79-------即字母y。由于79大于5A(即属小写字母),所以要继续换算。

79/1A=4------余11

11+41=52---------即字母R。这就是注册码的第一位。

第二位注册码:E的十六进制值为45

45/2=22

7BC/(1A+1)=49

22+49=6B---------即字母k。由于6B大于5A(即属小写字母),所以要继续换算。

6B/1A=4-----------余3

3+41=44-----------即字母D。这就是注册码的第二位。

第三位注册码:J的十六进制值为4A

4A/2=25

7BC/(1A+2)=46

25+46=6B---------即字母k。由于6B大于5A(即属小写字母),所以要继续换算。

6B/1A=4-----------余3

3+41=44-----------即字母D。这就是注册码的第三位。

其余以此类推。此例的注册码为: RDDDEDRSRSRSTUVXYNO

不知各位发现没有,用户名的前两个字符对注册码的生成是不起作用的。

呵呵!总算写完了。写这样的破文真累。交差!

2003年3月11日

(出处:赢政天下整理收藏)

相关文章:

·语音界面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)复原。发现问题请联系我们
← 返回老文章档案 · 软件史档案馆 · 赢政天下站史