- UID
- 26814
注册时间2007-2-2
阅读权限20
最后登录1970-1-1
以武会友
TA的每日心情 | 开心 2020-11-19 11:04 |
---|
签到天数: 1 天 [LV.1]初来乍到
|
先上两幅网上的截图吧:
这是坛内坛外注册界面的截图,软件无x天。
一、激活码校验过程
以下过程是为了将激活码分成两截,各自按32进制转化为整数:
[AppleScript] 纯文本查看 复制代码 00454211 ADD EAX, -5
00454214 PUSH EAX
00454215 PUSH EBX
00454216 LEA ECX, DWORD PTR [EBP-80]
00454219 PUSH ECX
0045421A LEA ECX, DWORD PTR [EBP-2C]
0045421D CALL 00411900 ; 截取前n-1位
00454222 MOV BYTE PTR [EBP-4], 1
00454226 MOV EDX, DWORD PTR [EBP-1C]
00454229 PUSH 5
0045422B ADD EDX, -5
0045422E PUSH EDX
0045422F LEA EAX, DWORD PTR [EBP-9C]
00454235 PUSH EAX
00454236 LEA ECX, DWORD PTR [EBP-2C]
00454239 CALL 00411900 ; 截取后5位
0045423E MOV BYTE PTR [EBP-4], 2
00454242 SUB ESP, 1C
00454245 MOV ECX, ESP
00454247 MOV DWORD PTR [EBP-C4], ESP
0045424D PUSH -1
0045424F PUSH EBX
00454250 LEA EDX, DWORD PTR [EBP-80]
00454253 MOV DWORD PTR [ECX+14], EDI
00454256 MOV DWORD PTR [ECX+10], EBX
00454259 PUSH EDX
0045425A MOV DWORD PTR [EBP-C0], EBX
00454260 MOV DWORD PTR [EBP-BC], EBX
00454266 MOV DWORD PTR [EBP-D8], EBX
0045426C MOV DWORD PTR [EBP-D4], EBX
00454272 LEA ESI, DWORD PTR [EBP-C0]
00454278 MOV BYTE PTR [ECX], BL
0045427A CALL 00405410 ; 转移n-1位字符串
0045427F CALL 00455850 ; 转化为整数1
00454284 MOV ECX, ESP
00454286 MOV DWORD PTR [EBP-C4], ESP
0045428C PUSH -1
0045428E PUSH EBX
0045428F LEA EAX, DWORD PTR [EBP-9C]
00454295 MOV DWORD PTR [ECX+14], EDI
00454298 MOV DWORD PTR [ECX+10], EBX
0045429B PUSH EAX
0045429C LEA ESI, DWORD PTR [EBP-D8]
004542A2 MOV BYTE PTR [ECX], BL
004542A4 CALL 00405410 ; 转移5位字符串
004542A9 CALL 00455850 ; 转化为整数2
以下部分检验两部分转化的整数的商是否相等:
[AppleScript] 纯文本查看 复制代码 004542AE MOV ECX, DWORD PTR [EBP-BC] ; 整数1
004542B4 MOV EDX, DWORD PTR [EBP-C0]
004542BA ADD ESP, 1C
004542BD PUSH 5AF3
004542C2 PUSH 107A4000
004542C7 PUSH ECX
004542C8 PUSH EDX
004542C9 CALL 005BAE10 ; 整数1\5AF3107A4000
004542CE MOV EDI, DWORD PTR [EBP-D8]
004542D4 PUSH 0
004542D6 PUSH 0F4240
004542DB MOV DWORD PTR [EBP-C4], EBX
004542E1 MOV EBX, DWORD PTR [EBP-D4]
004542E7 PUSH EBX
004542E8 PUSH EDI
004542E9 MOV DWORD PTR [EBP-C8], ECX
004542EF MOV DWORD PTR [EBP-E0], EAX ; 保存商
004542F5 MOV DWORD PTR [EBP-DC], EDX
004542FB CALL 005AF7A0 ; 整数2\F4240
00454300 MOV ECX, DWORD PTR [EBP-C4]
00454306 PUSH -1
00454308 PUSH FFF0BDC0
0045430D MOV ESI, EAX
0045430F MOV EAX, DWORD PTR [EBP-C8]
00454315 PUSH EDX
00454316 PUSH ESI
00454317 MOV DWORD PTR [EBP-C0], EAX
0045431D MOV DWORD PTR [EBP-BC], ECX
00454323 CALL 005B6050
00454328 ADD EDI, EAX
0045432A ADC EBX, EDX
0045432C CMP ESI, DWORD PTR [EBP-E0] ; 两商比较
00454332 JE SHORT 00454354 ; 相等则跳--必须相等
在商相等的情况下,将各自的余数按格式转化为数字串:
[AppleScript] 纯文本查看 复制代码 00454334 LEA ECX, DWORD PTR [EBP-9C]
0045433A CALL 00401B20
0045433F LEA ECX, DWORD PTR [EBP-80]
00454342 CALL 00401B20
00454347 LEA ECX, DWORD PTR [EBP-2C]
0045434A CALL 00401B20
0045434F JMP 004541F3
00454354 MOV EDX, DWORD PTR [EBP-BC]
0045435A MOV EAX, DWORD PTR [EBP-C0]
00454360 PUSH EBX
00454361 PUSH EDI
00454362 PUSH EDX
00454363 PUSH EAX
00454364 PUSH 005F2620 ; ASCII "%014I64d%06I64d"
00454369 LEA ESI, DWORD PTR [EBP-64]
0045436C CALL 00515EF0 ; 转化为数字串
00454371 ADD ESP, 14
00454374 PUSH EAX
00454375 LEA ECX, DWORD PTR [EBP-2C]
00454378 MOV BYTE PTR [EBP-4], 3
0045437C CALL 00405390
00454381 MOV ECX, ESI
00454383 MOV BYTE PTR [EBP-4], 2
00454387 CALL 00401B20
0045438C SUB ESP, 1C
0045438F MOV ECX, ESP
00454391 MOV DWORD PTR [EBP-C4], ESP
00454397 PUSH -1
00454399 PUSH 0
0045439B LEA EDX, DWORD PTR [EBP-2C]
0045439E MOV DWORD PTR [ECX+14], 0F
004543A5 MOV DWORD PTR [ECX+10], 0
004543AC PUSH EDX
004543AD MOV BYTE PTR [ECX], 0
转化完成后,求取数字串的校验值:
[AppleScript] 纯文本查看 复制代码 004543B0 CALL 00405410 ; 转移
004543B5 CALL 00455D80 ; 求取校验值
004543BA ADD ESP, 1C
接着检验校验值是否与前面的商相等:
[AppleScript] 纯文本查看 复制代码 004543BD CMP DWORD PTR [EBP-E0], EAX ; 校验值与前面的商比较
004543C3 JNZ 00454334 ; 不等则跳
在完成上述检验之后,说明注册码基本符合要求。
接下来完成数字串的重组与转换工作:
[AppleScript] 纯文本查看 复制代码 004543C9 MOV EAX, DWORD PTR [EBP-BC]
004543CF MOV ECX, DWORD PTR [EBP-C0]
004543D5 PUSH EAX
004543D6 PUSH ECX
004543D7 PUSH 005EFD84 ; ASCII "%014I64d"
004543DC LEA ESI, DWORD PTR [EBP-64]
004543DF CALL 00515EF0 ; 整数1转化为字符串1
004543E4 ADD ESP, 0C
004543E7 PUSH EAX
004543E8 LEA ECX, DWORD PTR [EBP-80]
004543EB MOV BYTE PTR [EBP-4], 4
004543EF CALL 00405390 ; 转移
004543F4 MOV ECX, ESI
004543F6 MOV BYTE PTR [EBP-4], 2
004543FA CALL 00401B20
004543FF PUSH EBX
00454400 PUSH EDI
00454401 PUSH 005F2630 ; ASCII "%06I64d"
00454406 LEA ESI, DWORD PTR [EBP-64]
00454409 CALL 00515EF0 ; 整数2转化为字符串2
0045440E ADD ESP, 0C
00454411 PUSH EAX
00454412 LEA ECX, DWORD PTR [EBP-9C]
00454418 MOV BYTE PTR [EBP-4], 5
0045441C CALL 00405390 ; 转移
00454421 MOV ECX, ESI
00454423 MOV BYTE PTR [EBP-4], 2
00454427 CALL 00401B20
0045442C PUSH 6 ; 6
0045442E PUSH 0 ; 0
00454430 LEA EDX, DWORD PTR [EBP-64]
00454433 PUSH EDX
00454434 LEA ECX, DWORD PTR [EBP-80]
00454437 CALL 00411900 ; 截取字符串1前6位
0045443C MOV EDI, 10
00454441 CMP DWORD PTR [EAX+14], EDI
00454444 JB SHORT 00454448
00454446 MOV EAX, DWORD PTR [EAX]
00454448 PUSH EAX ; 结果
00454449 CALL 005A1C35 ; 转化为整数a= CE156=844118
0045444E ADD ESP, 4
00454451 LEA ECX, DWORD PTR [EBP-64]
00454454 MOV ESI, EAX ; 转移
00454456 CALL 00401B20
0045445B PUSH 4 ; 4
0045445D PUSH 6 ; 6
0045445F LEA EAX, DWORD PTR [EBP-48]
00454462 PUSH EAX
00454463 LEA ECX, DWORD PTR [EBP-80]
00454466 CALL 00411900 ; 截取字符串1第7-10位
0045446B CMP DWORD PTR [EAX+14], EDI
0045446E JB SHORT 00454472
00454470 MOV EAX, DWORD PTR [EAX]
00454472 PUSH EAX
00454473 CALL 005A1C35 ; 结果转化为整数b= 11BF=4543
00454478 MOV ECX, DWORD PTR [EBP-D0]
0045447E MOV DWORD PTR [ECX], EAX ; 保存结果
00454480 ADD ESP, 4
00454483 LEA ECX, DWORD PTR [EBP-48]
00454486 CALL 00401B20
0045448B PUSH 4 ; 4
0045448D PUSH 0A ; 10
0045448F LEA EDX, DWORD PTR [EBP-48]
00454492 PUSH EDX
00454493 LEA ECX, DWORD PTR [EBP-80]
00454496 CALL 00411900 ; 截取字符串1第11-14位
0045449B CMP DWORD PTR [EAX+14], EDI
0045449E JB SHORT 004544A2
004544A0 MOV EAX, DWORD PTR [EAX]
004544A2 PUSH EAX
004544A3 CALL 005A1C35 ; 结果转化为整数c= 227B=8827
004544A8 MOV ECX, DWORD PTR [EBP-CC]
004544AE MOV DWORD PTR [ECX], EAX ; 保存结果
004544B0 ADD ESP, 4
004544B3 LEA ECX, DWORD PTR [EBP-48]
004544B6 CALL 00401B20
004544BB PUSH 2 ; 2
004544BD PUSH 0 ; 0
004544BF LEA EDX, DWORD PTR [EBP-48]
004544C2 PUSH EDX
004544C3 LEA ECX, DWORD PTR [EBP-9C]
004544C9 CALL 00411900 ; 截取字符串2第1-2位
004544CE CMP DWORD PTR [EAX+14], EDI
004544D1 JB SHORT 004544D5
004544D3 MOV EAX, DWORD PTR [EAX]
004544D5 PUSH EAX
004544D6 CALL 005A1C35 ; 转化为整数d= 5A=90
004544DB MOV EDI, DWORD PTR [EBP-E4]
004544E1 ADD ESP, 4
004544E4 LEA ECX, DWORD PTR [EBP-48]
004544E7 MOV DWORD PTR [EDI], EAX ; 保存结果
004544E9 CALL 00401B20
004544EE MOV EAX, 68DB8BAD
004544F3 IMUL ESI
004544F5 SAR EDX, 0C
004544F8 MOV ECX, EDX
004544FA SHR ECX, 1F
004544FD ADD ECX, EDX ; a/10000=84
004544FF MOV EAX, 51EB851F
00454504 IMUL ESI
00454506 SAR EDX, 5
00454509 MOV EAX, EDX
0045450B SHR EAX, 1F
0045450E ADD EAX, EDX ; a/100=8441
00454510 MOV EDX, EAX
00454512 IMUL EAX, EAX, 64 ; 8441*100=844100
00454515 MOV EBX, ECX
00454517 IMUL EBX, EBX, 64 ; 84*100=8400
0045451A SUB ESI, EAX ; 844118-844100=18
0045451C PUSH ESI ; 18
0045451D SUB EDX, EBX ; 8441-8400=41
0045451F PUSH EDX ; 41
00454520 PUSH ECX ; 84
00454521 PUSH 005EFA1C ; ASCII "%02d-%02d-%02d"
00454526 LEA ESI, DWORD PTR [EBP-48]
00454529 CALL 00515EF0 ; 结果转化为84-41-18
0045452E ADD ESP, 10
00454531 MOV ESI, DWORD PTR [EBP-EC]
00454537 PUSH EAX
00454538 MOV ECX, ESI
0045453A MOV BYTE PTR [EBP-4], 6
0045453E CALL 00405390 ; 转移
00454543 LEA ECX, DWORD PTR [EBP-48]
00454546 MOV BYTE PTR [EBP-4], 2
0045454A CALL 00401B20
0045454F MOV EAX, DWORD PTR [EDI] ; 字符串2前两位转化值d
00454551 PUSH EAX
00454552 SUB ESP, 1C
00454555 MOV ECX, ESP
00454557 MOV DWORD PTR [EBP-C4], ESP
0045455D PUSH ESI
0045455E CALL 004051F0
00454563 LEA ECX, DWORD PTR [EBP-48]
00454566 PUSH ECX
00454567 MOV BYTE PTR [EBP-4], 7
上述过程显示,字符串1被分解为6位、4位、4位共计14位。其中前6位又被重组为xx-xx-xx的形式。
再来看计算数据:
a=844118
b=4543
c=8827
b+c=13370
这些数据在图中出现在哪里,应该不难判断吧!
可以看到,上述数据与激活码校验无关。
接下来,准备检验激活码的后续部分了:
[AppleScript] 纯文本查看 复制代码 0045456B CALL 00452FA0 ; 计算机器码
我们不需要知道机器码怎么来的,只需要知道如何使用机器码即可。
[AppleScript] 纯文本查看 复制代码 00454570 ADD ESP, 4
00454573 MOV BYTE PTR [EBP-4], 8
00454577 CMP DWORD PTR [EAX+14], 10
0045457B JB SHORT 0045457F
0045457D MOV EAX, DWORD PTR [EAX]
0045457F MOV EDX, DWORD PTR [EBP-CC]
00454585 MOV ECX, DWORD PTR [EDX]
00454587 PUSH ECX ; 8827
00454588 MOV ECX, DWORD PTR [EBP-D0]
0045458E LEA EDX, DWORD PTR [EBP-B8]
00454594 PUSH EDX
00454595 MOV BYTE PTR [EBP-4], 9
00454599 MOV EDX, DWORD PTR [ECX] ; 4543
0045459B MOV ECX, EAX ; 机器码
0045459D CALL 00453BB0 ; 计算注册码
接下来:
[AppleScript] 纯文本查看 复制代码 0045456B CALL 00452FA0 ; 计算机器码
00454570 ADD ESP, 4
00454573 MOV BYTE PTR [EBP-4], 8
00454577 CMP DWORD PTR [EAX+14], 10
0045457B JB SHORT 0045457F
0045457D MOV EAX, DWORD PTR [EAX]
0045457F MOV EDX, DWORD PTR [EBP-CC]
00454585 MOV ECX, DWORD PTR [EDX] ;
00454587 PUSH ECX
00454588 MOV ECX, DWORD PTR [EBP-D0]
0045458E LEA EDX, DWORD PTR [EBP-B8]
00454594 PUSH EDX
00454595 MOV BYTE PTR [EBP-4], 9
00454599 MOV EDX, DWORD PTR [ECX] ;
0045459B MOV ECX, EAX ; 机器码
[font=宋体]0045459D CALL 00453BB0 ; 计算激活码[/font]
以下对机器码进行操作:
[AppleScript] 纯文本查看 复制代码 00453C61 CALL 00405570 ; 转移机器码
00453C66 LEA ESI, DWORD PTR [EBP-2C]
00453C69 MOV BYTE PTR [EBP-4], 1
00453C6D CALL 00515860 ; 字符检测
00453C72 CMP DWORD PTR [EBP-1C], 0A
00453C76 JE SHORT 00453CC8
00453C78 PUSH EBX
00453C79 MOV ESI, 0F
00453C7E MOV DWORD PTR [EDI+14], ESI
00453C81 MOV DWORD PTR [EDI+10], EBX
00453C84 PUSH 005E1AB4
00453C89 MOV ECX, EDI
00453C8B MOV BYTE PTR [EDI], 0
00453C8E CALL 00405570
00453C93 CMP DWORD PTR [EBP-18], 10
00453C97 JB SHORT 00453CA5
00453C99 MOV EDX, DWORD PTR [EBP-2C]
00453C9C PUSH EDX
00453C9D CALL 005A14E2
00453CA2 ADD ESP, 4
00453CA5 CMP DWORD PTR [EBP+24], 10
00453CA9 MOV DWORD PTR [EBP-18], ESI
00453CAC MOV DWORD PTR [EBP-1C], EBX
00453CAF MOV BYTE PTR [EBP-2C], 0
00453CB3 JB SHORT 00453C39
00453CB5 MOV EAX, DWORD PTR [EBP+10]
00453CB8 PUSH EAX
00453CB9 CALL 005A14E2
00453CBE ADD ESP, 4
00453CC1 MOV EAX, EDI
00453CC3 JMP 00454111
00453CC8 PUSH 2
00453CCA PUSH EBX
00453CCB LEA ECX, DWORD PTR [EBP-B8]
00453CD1 PUSH ECX
00453CD2 LEA ECX, DWORD PTR [EBP-2C]
00453CD5 CALL 00411900 ; 截取1-2位
00453CDA PUSH 2
00453CDC PUSH 4
00453CDE LEA EDX, DWORD PTR [EBP-F0]
00453CE4 PUSH EDX
00453CE5 LEA ECX, DWORD PTR [EBP-2C]
00453CE8 MOV BYTE PTR [EBP-4], 2
00453CEC CALL 00411900 ; 截取5-6位
00453CF1 PUSH 2
00453CF3 PUSH 8
00453CF5 LEA EAX, DWORD PTR [EBP-10C]
00453CFB PUSH EAX
00453CFC LEA ECX, DWORD PTR [EBP-2C]
00453CFF MOV BYTE PTR [EBP-4], 3
00453D03 CALL 00411900 ; 截取9-10位
00453D08 MOV BYTE PTR [EBP-4], 4
00453D0C MOV EAX, DWORD PTR [EBP-B8]
00453D12 MOV EBX, 10
00453D17 CMP DWORD PTR [EBP-A4], EBX
00453D1D JNB SHORT 00453D25
00453D1F LEA EAX, DWORD PTR [EBP-B8]
00453D25 PUSH EAX
00453D26 CALL 005A1C35 ; 1-2位转化为整数-->a1=24
00453D2B ADD ESP, 4
00453D2E MOV EDI, EAX ; 24
00453D30 MOV EAX, DWORD PTR [EBP-F0]
00453D36 CMP DWORD PTR [EBP-DC], EBX
00453D3C JNB SHORT 00453D44
00453D3E LEA EAX, DWORD PTR [EBP-F0]
00453D44 PUSH EAX
00453D45 CALL 005A1C35 ; 5-6位转化为整数-->a2=24
00453D4A ADD ESP, 4
00453D4D MOV DWORD PTR [EBP-140], EAX ; 24
00453D53 MOV EAX, DWORD PTR [EBP-10C]
00453D59 CMP DWORD PTR [EBP-F8], EBX
00453D5F JNB SHORT 00453D67
00453D61 LEA EAX, DWORD PTR [EBP-10C]
00453D67 PUSH EAX
00453D68 CALL 005A1C35 ; 9-10位转化为整数-->a3=58
以下部分将xx-xx-xx又转换回来,我们不注意他:
[AppleScript] 纯文本查看 复制代码 00453D6D ADD ESP, 4
00453D70 PUSH 2 ; 2
00453D72 PUSH 0 ; 0
00453D74 LEA ECX, DWORD PTR [EBP-D4]
00453D7A PUSH ECX
00453D7B LEA ECX, DWORD PTR [EBP+10] ; 99-51-28
00453D7E MOV DWORD PTR [EBP-148], EAX ; 58
00453D84 CALL 00411900 ; 99
00453D89 PUSH 2 ; 2
00453D8B PUSH 3 ; 3
00453D8D LEA EDX, DWORD PTR [EBP-9C]
00453D93 PUSH EDX
00453D94 LEA ECX, DWORD PTR [EBP+10]
00453D97 MOV BYTE PTR [EBP-4], 5
00453D9B CALL 00411900 ; 51
00453DA0 PUSH 2 ; 2
00453DA2 PUSH 6 ; 6
00453DA4 LEA EAX, DWORD PTR [EBP-80]
00453DA7 PUSH EAX
00453DA8 LEA ECX, DWORD PTR [EBP+10]
00453DAB MOV BYTE PTR [EBP-4], 6
00453DAF CALL 00411900 ; 28
00453DB4 MOV BYTE PTR [EBP-4], 7
00453DB8 MOV EAX, DWORD PTR [EBP-D4]
00453DBE CMP DWORD PTR [EBP-C0], EBX
00453DC4 JNB SHORT 00453DCC
00453DC6 LEA EAX, DWORD PTR [EBP-D4]
00453DCC PUSH EAX
00453DCD CALL 005A1C35 ; 99-->b1=99
00453DD2 ADD ESP, 4
00453DD5 MOV ESI, EAX
00453DD7 MOV EAX, DWORD PTR [EBP-9C]
00453DDD CMP DWORD PTR [EBP-88], EBX
00453DE3 JNB SHORT 00453DEB
00453DE5 LEA EAX, DWORD PTR [EBP-9C]
00453DEB PUSH EAX
00453DEC CALL 005A1C35 ; 51-->b2=51
00453DF1 ADD ESP, 4
00453DF4 CMP DWORD PTR [EBP-6C], 10
00453DF8 MOV EBX, EAX
00453DFA MOV EAX, DWORD PTR [EBP-80]
00453DFD JNB SHORT 00453E02
00453DFF LEA EAX, DWORD PTR [EBP-80]
00453E02 PUSH EAX
00453E03 CALL 005A1C35 ; 28-->b3=28
00453E08 IMUL ESI, ESI, 64 ; 99*100
00453E0B IMUL EDI, EDI, 0B ; a1*11=24*11=264
00453E0E ADD EDI, DWORD PTR [EBP-148] ; 264+58=322
00453E14 MOV ECX, DWORD PTR [EBP-144] ; 9963
00453E1A ADD EDI, DWORD PTR [EBP-140] ; 322+24=346
00453E20 MOV EDX, DWORD PTR [EBP-134] ; 7016
00453E26 ADD ESI, EBX ; 99*100+51
00453E28 IMUL ESI, ESI, 64 ; (99*100+51)*100
00453E2B PUSH ECX ; 9963
00453E2C ADD ESI, EAX ; (99*100+51)*100+28=995128
00453E2E PUSH EDX ; 7016
00453E2F ADD EDI, EDI
00453E31 PUSH ESI
00453E32 ADD EDI, EDI
00453E34 PUSH 005F2604 ; ASCII "%06d%04d%04d"
00453E39 LEA ESI, DWORD PTR [EBP-64]
00453E3C ADD EDI, EDI ; 346*8=2768
以上这部分两种数据混合计算,但其中关键计算部分是:
(a1*11+a3+a2)*8=2768(我的数据)。
[AppleScript] 纯文本查看 复制代码 00453E3E CALL 00515EF0 ; -->99512870169963
00453E43 MOV EAX, DWORD PTR [EBP-12C] ; d
00453E49 PUSH EDI
00453E4A PUSH EAX
00453E4B PUSH 005F2614 ; ASCII "%02d%04d"
00453E50 LEA ESI, DWORD PTR [EBP-48]
00453E53 MOV BYTE PTR [EBP-4], 8
00453E57 CALL 00515EF0 ; d和2768按格式转换为数字串-->972768
注意到,这个数字串是6位的。
后面的部分记述略乱,后面给以总结:
[AppleScript] 纯文本查看 复制代码 00453E5C ADD ESP, 20
00453E5F MOV BYTE PTR [EBP-4], 9
00453E63 MOV EAX, DWORD PTR [EBP-64]
00453E66 MOV EDI, 10
00453E6B CMP DWORD PTR [EBP-50], EDI
00453E6E JNB SHORT 00453E73
00453E70 LEA EAX, DWORD PTR [EBP-64]
00453E73 PUSH EAX
00453E74 CALL 005A1C40 ; 99512870169963转化为整数
00453E79 MOV ESI, EAX
00453E7B MOV EAX, DWORD PTR [EBP-48]
00453E7E ADD ESP, 4
00453E81 MOV DWORD PTR [EBP-138], ESI ; 保存
00453E87 MOV DWORD PTR [EBP-134], EDX
00453E8D CMP DWORD PTR [EBP-34], EDI
00453E90 JNB SHORT 00453E95
00453E92 LEA EAX, DWORD PTR [EBP-48]
00453E95 PUSH EAX
00453E96 CALL 005A1C40 ; 972768转化为整数
00453E9B MOV ECX, DWORD PTR [EBP-134]
00453EA1 MOV EBX, EDX
00453EA3 PUSH EBX
00453EA4 MOV EDI, EAX
00453EA6 PUSH EDI
00453EA7 PUSH ECX
00453EA8 PUSH ESI
00453EA9 PUSH 005F2620 ; ASCII "%014I64d%06I64d"
00453EAE LEA ESI, DWORD PTR [EBP-128]
00453EB4 CALL 00515EF0 ; 合并为 99512870169963972768
00453EB9 PUSH ECX
00453EBA MOV ECX, ESP
00453EBC MOV DWORD PTR [EBP-12C], ESP
00453EC2 PUSH -1
00453EC4 MOV BYTE PTR [EBP-4], 0A
00453EC8 PUSH 0
00453ECA MOV EDX, ESI
00453ECC MOV DWORD PTR [ECX+14], 0F
00453ED3 MOV DWORD PTR [ECX+10], 0
00453EDA PUSH EDX
00453EDB MOV BYTE PTR [ECX], 0
00453EDE CALL 00405410 ; 转移结果
00453EE3 CALL 00455D80 ; 计算校验值
00453EE8 ADD ESP, 1C
00453EEB CDQ
00453EEC PUSH 0
00453EEE MOV ESI, EAX ; 校验值
00453EF0 PUSH 005E1AB4
00453EF5 LEA ECX, DWORD PTR [EBP-64] ; 长字符串
00453EF8 MOV DWORD PTR [EBP-130], ESI
00453EFE MOV DWORD PTR [EBP-12C], EDX
00453F04 CALL 00405570
00453F09 PUSH 0
00453F0B PUSH 005E1AB4
00453F10 LEA ECX, DWORD PTR [EBP-48] ; 短字符串
00453F13 CALL 00405570
00453F18 MOV EAX, DWORD PTR [EBP-12C]
00453F1E PUSH 5AF3
00453F23 PUSH 107A4000
00453F28 PUSH EAX
00453F29 PUSH ESI ; 3
00453F2A CALL 005B6050 ; 3*100000000000000
00453F2F ADD EAX, DWORD PTR [EBP-138]
00453F35 LEA ESI, DWORD PTR [EBP-64]
00453F38 ADC EDX, DWORD PTR [EBP-134]
00453F3E PUSH EDX
00453F3F PUSH EAX
00453F40 CALL 00455600 ; -->AAAAAAAAAA
00453F45 MOV ECX, DWORD PTR [EBP-12C]
00453F4B MOV EDX, DWORD PTR [EBP-130]
00453F51 ADD ESP, 8
00453F54 PUSH 0
00453F56 PUSH 0F4240
00453F5B PUSH ECX
00453F5C PUSH EDX ; 3
00453F5D CALL 005B6050 ; 3*1000000
00453F62 ADD EAX, EDI
00453F64 ADC EDX, EBX
00453F66 PUSH EDX
00453F67 PUSH EAX
00453F68 LEA ESI, DWORD PTR [EBP-48]
00453F6B CALL 00455600 ; -->3N7VL
00453F70 MOV EDX, DWORD PTR [EBP-13C]
00453F76 MOV EAX, ESI
00453F78 PUSH EAX
00453F79 LEA ECX, DWORD PTR [EBP-64]
00453F7C PUSH ECX
00453F7D PUSH EDX
00453F7E CALL 00416210 ; 组合
0012E140 0012E2F0 ASCII "AAAAAAAAAA3N7VL"
总结:
1、激活码中的数字串划分为两部分,14位和6位。14位与机器码无关,6位中的后四位由机器码而来。
2、由这20位组合起来计算校验码。
3、完成校验码计算后,数字串形如:校验码&14位&校验码&6位。
4、按32进制将上述数字串转换为字符串,即为注册码。
二、激活码姓甚名谁
用OD搜索字符串,可得到如下内容:
[AppleScript] 纯文本查看 复制代码 0043D9D4 PUSH 005F697C 您的产品总共支持%d个用户数。
0043D9F2 PUSH 005F696C %
0043DA26 PUSH 005F699C 您的产品支持%d个用户数,其中的%d个已在%s失效。
0043DA72 PUSH 005F696C %
0043DAA8 PUSH 005F69CC 您的产品总共支持%d个用户数,其中的%d个将于%s失效。
0043DB7D PUSH 005F6A14 您的使用的是试用版本,共支持%d个用户数
0043DC36 PUSH 005F6A58 您的试用期将在%d天后结束, 共支持%d个用户数
将图片中的数据填入其中,得到如下表述:
您的产品总共支持13370个用户数,其中的4543个将于84-41-18失效。
您的产品总共支持3209个用户数,其中的1770个将于10-21-48失效。
您的产品支持9424个用户数,其中的7173个已在02-30-65失效。
您的产品支持999个用户数,其中的1个已在16-01-13失效。
那组数据你能看明白?有没有贻笑大方的感觉?
其实呢,激活码的前n-5的内容虽然与机器码无关,但却是授权数据,不是随便给出的。具体分解如下:
14位数字串划分为6位、4位、4位。格式为:受限到期日期 受限用户数 不受限制用户数。受限用户数+不受限制用户数=总共支持的用户数。
[AppleScript] 纯文本查看 复制代码 84-41-18=2084年41月18日
10-21-48=2010年21月48日
02-30-65=2002年30月65日
笑料吧?!制作注册机,你可别留下话柄,干土匪干的事。而:
[AppleScript] 纯文本查看 复制代码 16-01-13=2016年01月13日
另外,受限和不受限制用户数最多9999。
还注意到,后6位数字串中只有后4位于机器码有关,那前2位呢?凑数的呗!
故组成激活码的数字串应该为:校验码&受限到期日期&受限用户数&不受限制用户数&校验码&任意两位数字&机器码结果
三、验证机制是否有问题
因为未对机器码的计算过程进行跟踪,所以不知道计算机器码的时候是否做了限制。如果没有的话,则注册机制是有问题的。
验证过程中,从机器码中获取了三个数据a1、a2、a3,对这三个数据的计算就是:
(a1*11+a3+a2)*8=位数字,四位数字最大为9999。不妨假设a1=a2=a3,则由13*a1*8=104*a1>9999-->a1>=97。只要a1在97-99之间取值,似乎验证就难以通过,除非格式%04d能够掐头。但反正我没见过,你见过?
|
评分
-
查看全部评分
|