捣蛋部队之--老了不中用了
先上两幅网上的截图吧:这是坛内坛外注册界面的截图,软件无x天。
一、激活码校验过程
以下过程是为了将激活码分成两截,各自按32进制转化为整数:
00454211ADD EAX, -5
00454214PUSH EAX
00454215PUSH EBX
00454216LEA ECX, DWORD PTR
00454219PUSH ECX
0045421ALEA ECX, DWORD PTR
0045421DCALL 00411900 ;截取前n-1位
00454222MOV BYTE PTR , 1
00454226MOV EDX, DWORD PTR
00454229PUSH 5
0045422BADD EDX, -5
0045422EPUSH EDX
0045422FLEA EAX, DWORD PTR
00454235PUSH EAX
00454236LEA ECX, DWORD PTR
00454239CALL 00411900 ;截取后5位
0045423EMOV BYTE PTR , 2
00454242SUB ESP, 1C
00454245MOV ECX, ESP
00454247MOV DWORD PTR , ESP
0045424DPUSH -1
0045424FPUSH EBX
00454250LEA EDX, DWORD PTR
00454253MOV DWORD PTR , EDI
00454256MOV DWORD PTR , EBX
00454259PUSH EDX
0045425AMOV DWORD PTR , EBX
00454260MOV DWORD PTR , EBX
00454266MOV DWORD PTR , EBX
0045426CMOV DWORD PTR , EBX
00454272LEA ESI, DWORD PTR
00454278MOV BYTE PTR , BL
0045427ACALL 00405410 ;转移n-1位字符串
0045427FCALL 00455850 ;转化为整数1
00454284MOV ECX, ESP
00454286MOV DWORD PTR , ESP
0045428CPUSH -1
0045428EPUSH EBX
0045428FLEA EAX, DWORD PTR
00454295MOV DWORD PTR , EDI
00454298MOV DWORD PTR , EBX
0045429BPUSH EAX
0045429CLEA ESI, DWORD PTR
004542A2MOV BYTE PTR , BL
004542A4CALL 00405410 ;转移5位字符串
004542A9CALL 00455850 ;转化为整数2
以下部分检验两部分转化的整数的商是否相等:
004542AEMOV ECX, DWORD PTR ;整数1
004542B4MOV EDX, DWORD PTR
004542BAADD ESP, 1C
004542BDPUSH 5AF3
004542C2PUSH 107A4000
004542C7PUSH ECX
004542C8PUSH EDX
004542C9CALL 005BAE10 ;整数1\5AF3107A4000
004542CEMOV EDI, DWORD PTR
004542D4PUSH 0
004542D6PUSH 0F4240
004542DBMOV DWORD PTR , EBX
004542E1MOV EBX, DWORD PTR
004542E7PUSH EBX
004542E8PUSH EDI
004542E9MOV DWORD PTR , ECX
004542EFMOV DWORD PTR , EAX ;保存商
004542F5MOV DWORD PTR , EDX
004542FBCALL 005AF7A0 ;整数2\F4240
00454300MOV ECX, DWORD PTR
00454306PUSH -1
00454308PUSH FFF0BDC0
0045430DMOV ESI, EAX
0045430FMOV EAX, DWORD PTR
00454315PUSH EDX
00454316PUSH ESI
00454317MOV DWORD PTR , EAX
0045431DMOV DWORD PTR , ECX
00454323CALL 005B6050
00454328ADD EDI, EAX
0045432AADC EBX, EDX
0045432CCMP ESI, DWORD PTR ;两商比较
00454332JE SHORT 00454354 ;相等则跳--必须相等
在商相等的情况下,将各自的余数按格式转化为数字串:
00454334LEA ECX, DWORD PTR
0045433ACALL 00401B20
0045433FLEA ECX, DWORD PTR
00454342CALL 00401B20
00454347LEA ECX, DWORD PTR
0045434ACALL 00401B20
0045434FJMP 004541F3
00454354MOV EDX, DWORD PTR
0045435AMOV EAX, DWORD PTR
00454360PUSH EBX
00454361PUSH EDI
00454362PUSH EDX
00454363PUSH EAX
00454364PUSH 005F2620 ;ASCII "%014I64d%06I64d"
00454369LEA ESI, DWORD PTR
0045436CCALL 00515EF0 ;转化为数字串
00454371ADD ESP, 14
00454374PUSH EAX
00454375LEA ECX, DWORD PTR
00454378MOV BYTE PTR , 3
0045437CCALL 00405390
00454381MOV ECX, ESI
00454383MOV BYTE PTR , 2
00454387CALL 00401B20
0045438CSUB ESP, 1C
0045438FMOV ECX, ESP
00454391MOV DWORD PTR , ESP
00454397PUSH -1
00454399PUSH 0
0045439BLEA EDX, DWORD PTR
0045439EMOV DWORD PTR , 0F
004543A5MOV DWORD PTR , 0
004543ACPUSH EDX
004543ADMOV BYTE PTR , 0
转化完成后,求取数字串的校验值:
004543B0CALL 00405410 ;转移
004543B5CALL 00455D80 ;求取校验值
004543BAADD ESP, 1C
接着检验校验值是否与前面的商相等:
004543BDCMP DWORD PTR , EAX ;校验值与前面的商比较
004543C3JNZ 00454334 ;不等则跳
在完成上述检验之后,说明注册码基本符合要求。
接下来完成数字串的重组与转换工作:
004543C9MOV EAX, DWORD PTR
004543CFMOV ECX, DWORD PTR
004543D5PUSH EAX
004543D6PUSH ECX
004543D7PUSH 005EFD84 ;ASCII "%014I64d"
004543DCLEA ESI, DWORD PTR
004543DFCALL 00515EF0 ;整数1转化为字符串1
004543E4ADD ESP, 0C
004543E7PUSH EAX
004543E8LEA ECX, DWORD PTR
004543EBMOV BYTE PTR , 4
004543EFCALL 00405390 ;转移
004543F4MOV ECX, ESI
004543F6MOV BYTE PTR , 2
004543FACALL 00401B20
004543FFPUSH EBX
00454400PUSH EDI
00454401PUSH 005F2630 ;ASCII "%06I64d"
00454406LEA ESI, DWORD PTR
00454409CALL 00515EF0 ;整数2转化为字符串2
0045440EADD ESP, 0C
00454411PUSH EAX
00454412LEA ECX, DWORD PTR
00454418MOV BYTE PTR , 5
0045441CCALL 00405390 ;转移
00454421MOV ECX, ESI
00454423MOV BYTE PTR , 2
00454427CALL 00401B20
0045442CPUSH 6 ;6
0045442EPUSH 0 ;0
00454430LEA EDX, DWORD PTR
00454433PUSH EDX
00454434LEA ECX, DWORD PTR
00454437CALL 00411900 ;截取字符串1前6位
0045443CMOV EDI, 10
00454441CMP DWORD PTR , EDI
00454444JB SHORT 00454448
00454446MOV EAX, DWORD PTR
00454448PUSH EAX ;结果
00454449CALL 005A1C35 ;转化为整数a= CE156=844118
0045444EADD ESP, 4
00454451LEA ECX, DWORD PTR
00454454MOV ESI, EAX ;转移
00454456CALL 00401B20
0045445BPUSH 4 ;4
0045445DPUSH 6 ;6
0045445FLEA EAX, DWORD PTR
00454462PUSH EAX
00454463LEA ECX, DWORD PTR
00454466CALL 00411900 ;截取字符串1第7-10位
0045446BCMP DWORD PTR , EDI
0045446EJB SHORT 00454472
00454470MOV EAX, DWORD PTR
00454472PUSH EAX
00454473CALL 005A1C35 ;结果转化为整数b= 11BF=4543
00454478MOV ECX, DWORD PTR
0045447EMOV DWORD PTR , EAX ;保存结果
00454480ADD ESP, 4
00454483LEA ECX, DWORD PTR
00454486CALL 00401B20
0045448BPUSH 4 ;4
0045448DPUSH 0A ;10
0045448FLEA EDX, DWORD PTR
00454492PUSH EDX
00454493LEA ECX, DWORD PTR
00454496CALL 00411900 ;截取字符串1第11-14位
0045449BCMP DWORD PTR , EDI
0045449EJB SHORT 004544A2
004544A0MOV EAX, DWORD PTR
004544A2PUSH EAX
004544A3CALL 005A1C35 ;结果转化为整数c= 227B=8827
004544A8MOV ECX, DWORD PTR
004544AEMOV DWORD PTR , EAX ;保存结果
004544B0ADD ESP, 4
004544B3LEA ECX, DWORD PTR
004544B6CALL 00401B20
004544BBPUSH 2 ;2
004544BDPUSH 0 ;0
004544BFLEA EDX, DWORD PTR
004544C2PUSH EDX
004544C3LEA ECX, DWORD PTR
004544C9CALL 00411900 ;截取字符串2第1-2位
004544CECMP DWORD PTR , EDI
004544D1JB SHORT 004544D5
004544D3MOV EAX, DWORD PTR
004544D5PUSH EAX
004544D6CALL 005A1C35 ;转化为整数d= 5A=90
004544DBMOV EDI, DWORD PTR
004544E1ADD ESP, 4
004544E4LEA ECX, DWORD PTR
004544E7MOV DWORD PTR , EAX ;保存结果
004544E9CALL 00401B20
004544EEMOV EAX, 68DB8BAD
004544F3IMUL ESI
004544F5SAR EDX, 0C
004544F8MOV ECX, EDX
004544FASHR ECX, 1F
004544FDADD ECX, EDX ;a/10000=84
004544FFMOV EAX, 51EB851F
00454504IMUL ESI
00454506SAR EDX, 5
00454509MOV EAX, EDX
0045450BSHR EAX, 1F
0045450EADD EAX, EDX ;a/100=8441
00454510MOV EDX, EAX
00454512IMUL EAX, EAX, 64 ;8441*100=844100
00454515MOV EBX, ECX
00454517IMUL EBX, EBX, 64 ;84*100=8400
0045451ASUB ESI, EAX ;844118-844100=18
0045451CPUSH ESI ;18
0045451DSUB EDX, EBX ;8441-8400=41
0045451FPUSH EDX ;41
00454520PUSH ECX ;84
00454521PUSH 005EFA1C ;ASCII "%02d-%02d-%02d"
00454526LEA ESI, DWORD PTR
00454529CALL 00515EF0 ;结果转化为84-41-18
0045452EADD ESP, 10
00454531MOV ESI, DWORD PTR
00454537PUSH EAX
00454538MOV ECX, ESI
0045453AMOV BYTE PTR , 6
0045453ECALL 00405390 ;转移
00454543LEA ECX, DWORD PTR
00454546MOV BYTE PTR , 2
0045454ACALL 00401B20
0045454FMOV EAX, DWORD PTR ;字符串2前两位转化值d
00454551PUSH EAX
00454552SUB ESP, 1C
00454555MOV ECX, ESP
00454557MOV DWORD PTR , ESP
0045455DPUSH ESI
0045455ECALL 004051F0
00454563LEA ECX, DWORD PTR
00454566PUSH ECX
00454567MOV BYTE PTR , 7
上述过程显示,字符串1被分解为6位、4位、4位共计14位。其中前6位又被重组为xx-xx-xx的形式。
再来看计算数据:
a=844118
b=4543
c=8827
b+c=13370
这些数据在图中出现在哪里,应该不难判断吧!
可以看到,上述数据与激活码校验无关。
接下来,准备检验激活码的后续部分了:
0045456BCALL 00452FA0 ;计算机器码
我们不需要知道机器码怎么来的,只需要知道如何使用机器码即可。
00454570ADD ESP, 4
00454573MOV BYTE PTR , 8
00454577CMP DWORD PTR , 10
0045457BJB SHORT 0045457F
0045457DMOV EAX, DWORD PTR
0045457FMOV EDX, DWORD PTR
00454585MOV ECX, DWORD PTR
00454587PUSH ECX ;8827
00454588MOV ECX, DWORD PTR
0045458ELEA EDX, DWORD PTR
00454594PUSH EDX
00454595MOV BYTE PTR , 9
00454599MOV EDX, DWORD PTR ;4543
0045459BMOV ECX, EAX ;机器码
0045459DCALL 00453BB0 ;计算注册码
接下来:
0045456BCALL 00452FA0 ;计算机器码
00454570ADD ESP, 4
00454573MOV BYTE PTR , 8
00454577CMP DWORD PTR , 10
0045457BJB SHORT 0045457F
0045457DMOV EAX, DWORD PTR
0045457FMOV EDX, DWORD PTR
00454585MOV ECX, DWORD PTR ;
00454587PUSH ECX
00454588MOV ECX, DWORD PTR
0045458ELEA EDX, DWORD PTR
00454594PUSH EDX
00454595MOV BYTE PTR , 9
00454599MOV EDX, DWORD PTR ;
0045459BMOV ECX, EAX ;机器码
0045459DCALL 00453BB0 ;计算激活码
以下对机器码进行操作:
00453C61CALL 00405570 ;转移机器码
00453C66LEA ESI, DWORD PTR
00453C69MOV BYTE PTR , 1
00453C6DCALL 00515860 ;字符检测
00453C72CMP DWORD PTR , 0A
00453C76JE SHORT 00453CC8
00453C78PUSH EBX
00453C79MOV ESI, 0F
00453C7EMOV DWORD PTR , ESI
00453C81MOV DWORD PTR , EBX
00453C84PUSH 005E1AB4
00453C89MOV ECX, EDI
00453C8BMOV BYTE PTR , 0
00453C8ECALL 00405570
00453C93CMP DWORD PTR , 10
00453C97JB SHORT 00453CA5
00453C99MOV EDX, DWORD PTR
00453C9CPUSH EDX
00453C9DCALL 005A14E2
00453CA2ADD ESP, 4
00453CA5CMP DWORD PTR , 10
00453CA9MOV DWORD PTR , ESI
00453CACMOV DWORD PTR , EBX
00453CAFMOV BYTE PTR , 0
00453CB3JB SHORT 00453C39
00453CB5MOV EAX, DWORD PTR
00453CB8PUSH EAX
00453CB9CALL 005A14E2
00453CBEADD ESP, 4
00453CC1MOV EAX, EDI
00453CC3JMP 00454111
00453CC8PUSH 2
00453CCAPUSH EBX
00453CCBLEA ECX, DWORD PTR
00453CD1PUSH ECX
00453CD2LEA ECX, DWORD PTR
00453CD5CALL 00411900 ;截取1-2位
00453CDAPUSH 2
00453CDCPUSH 4
00453CDELEA EDX, DWORD PTR
00453CE4PUSH EDX
00453CE5LEA ECX, DWORD PTR
00453CE8MOV BYTE PTR , 2
00453CECCALL 00411900 ;截取5-6位
00453CF1PUSH 2
00453CF3PUSH 8
00453CF5LEA EAX, DWORD PTR
00453CFBPUSH EAX
00453CFCLEA ECX, DWORD PTR
00453CFFMOV BYTE PTR , 3
00453D03CALL 00411900 ;截取9-10位
00453D08MOV BYTE PTR , 4
00453D0CMOV EAX, DWORD PTR
00453D12MOV EBX, 10
00453D17CMP DWORD PTR , EBX
00453D1DJNB SHORT 00453D25
00453D1FLEA EAX, DWORD PTR
00453D25PUSH EAX
00453D26CALL 005A1C35 ;1-2位转化为整数-->a1=24
00453D2BADD ESP, 4
00453D2EMOV EDI, EAX ;24
00453D30MOV EAX, DWORD PTR
00453D36CMP DWORD PTR , EBX
00453D3CJNB SHORT 00453D44
00453D3ELEA EAX, DWORD PTR
00453D44PUSH EAX
00453D45CALL 005A1C35 ;5-6位转化为整数-->a2=24
00453D4AADD ESP, 4
00453D4DMOV DWORD PTR , EAX ;24
00453D53MOV EAX, DWORD PTR
00453D59CMP DWORD PTR , EBX
00453D5FJNB SHORT 00453D67
00453D61LEA EAX, DWORD PTR
00453D67PUSH EAX
00453D68CALL 005A1C35 ;9-10位转化为整数-->a3=58
以下部分将xx-xx-xx又转换回来,我们不注意他:
00453D6DADD ESP, 4
00453D70PUSH 2 ;2
00453D72PUSH 0 ;0
00453D74LEA ECX, DWORD PTR
00453D7APUSH ECX
00453D7BLEA ECX, DWORD PTR ;99-51-28
00453D7EMOV DWORD PTR , EAX ;58
00453D84CALL 00411900 ;99
00453D89PUSH 2 ;2
00453D8BPUSH 3 ;3
00453D8DLEA EDX, DWORD PTR
00453D93PUSH EDX
00453D94LEA ECX, DWORD PTR
00453D97MOV BYTE PTR , 5
00453D9BCALL 00411900 ;51
00453DA0PUSH 2 ;2
00453DA2PUSH 6 ;6
00453DA4LEA EAX, DWORD PTR
00453DA7PUSH EAX
00453DA8LEA ECX, DWORD PTR
00453DABMOV BYTE PTR , 6
00453DAFCALL 00411900 ;28
00453DB4MOV BYTE PTR , 7
00453DB8MOV EAX, DWORD PTR
00453DBECMP DWORD PTR , EBX
00453DC4JNB SHORT 00453DCC
00453DC6LEA EAX, DWORD PTR
00453DCCPUSH EAX
00453DCDCALL 005A1C35 ;99-->b1=99
00453DD2ADD ESP, 4
00453DD5MOV ESI, EAX
00453DD7MOV EAX, DWORD PTR
00453DDDCMP DWORD PTR , EBX
00453DE3JNB SHORT 00453DEB
00453DE5LEA EAX, DWORD PTR
00453DEBPUSH EAX
00453DECCALL 005A1C35 ;51-->b2=51
00453DF1ADD ESP, 4
00453DF4CMP DWORD PTR , 10
00453DF8MOV EBX, EAX
00453DFAMOV EAX, DWORD PTR
00453DFDJNB SHORT 00453E02
00453DFFLEA EAX, DWORD PTR
00453E02PUSH EAX
00453E03CALL 005A1C35 ;28-->b3=28
00453E08IMUL ESI, ESI, 64 ;99*100
00453E0BIMUL EDI, EDI, 0B ;a1*11=24*11=264
00453E0EADD EDI, DWORD PTR ;264+58=322
00453E14MOV ECX, DWORD PTR ;9963
00453E1AADD EDI, DWORD PTR ;322+24=346
00453E20MOV EDX, DWORD PTR ;7016
00453E26ADD ESI, EBX ;99*100+51
00453E28IMUL ESI, ESI, 64 ;(99*100+51)*100
00453E2BPUSH ECX ;9963
00453E2CADD ESI, EAX ;(99*100+51)*100+28=995128
00453E2EPUSH EDX ;7016
00453E2FADD EDI, EDI
00453E31PUSH ESI
00453E32ADD EDI, EDI
00453E34PUSH 005F2604 ;ASCII "%06d%04d%04d"
00453E39LEA ESI, DWORD PTR
00453E3CADD EDI, EDI ;346*8=2768
以上这部分两种数据混合计算,但其中关键计算部分是:
(a1*11+a3+a2)*8=2768(我的数据)。
00453E3ECALL 00515EF0 ;-->99512870169963
00453E43MOV EAX, DWORD PTR ;d
00453E49PUSH EDI
00453E4APUSH EAX
00453E4BPUSH 005F2614 ;ASCII "%02d%04d"
00453E50LEA ESI, DWORD PTR
00453E53MOV BYTE PTR , 8
00453E57CALL 00515EF0 ;d和2768按格式转换为数字串-->972768
注意到,这个数字串是6位的。
后面的部分记述略乱,后面给以总结:
00453E5CADD ESP, 20
00453E5FMOV BYTE PTR , 9
00453E63MOV EAX, DWORD PTR
00453E66MOV EDI, 10
00453E6BCMP DWORD PTR , EDI
00453E6EJNB SHORT 00453E73
00453E70LEA EAX, DWORD PTR
00453E73PUSH EAX
00453E74CALL 005A1C40 ;99512870169963转化为整数
00453E79MOV ESI, EAX
00453E7BMOV EAX, DWORD PTR
00453E7EADD ESP, 4
00453E81MOV DWORD PTR , ESI ;保存
00453E87MOV DWORD PTR , EDX
00453E8DCMP DWORD PTR , EDI
00453E90JNB SHORT 00453E95
00453E92LEA EAX, DWORD PTR
00453E95PUSH EAX
00453E96CALL 005A1C40 ;972768转化为整数
00453E9BMOV ECX, DWORD PTR
00453EA1MOV EBX, EDX
00453EA3PUSH EBX
00453EA4MOV EDI, EAX
00453EA6PUSH EDI
00453EA7PUSH ECX
00453EA8PUSH ESI
00453EA9PUSH 005F2620 ;ASCII "%014I64d%06I64d"
00453EAELEA ESI, DWORD PTR
00453EB4CALL 00515EF0 ;合并为 99512870169963972768
00453EB9PUSH ECX
00453EBAMOV ECX, ESP
00453EBCMOV DWORD PTR , ESP
00453EC2PUSH -1
00453EC4MOV BYTE PTR , 0A
00453EC8PUSH 0
00453ECAMOV EDX, ESI
00453ECCMOV DWORD PTR , 0F
00453ED3MOV DWORD PTR , 0
00453EDAPUSH EDX
00453EDBMOV BYTE PTR , 0
00453EDECALL 00405410 ;转移结果
00453EE3CALL 00455D80 ;计算校验值
00453EE8ADD ESP, 1C
00453EEBCDQ
00453EECPUSH 0
00453EEEMOV ESI, EAX ;校验值
00453EF0PUSH 005E1AB4
00453EF5LEA ECX, DWORD PTR ;长字符串
00453EF8MOV DWORD PTR , ESI
00453EFEMOV DWORD PTR , EDX
00453F04CALL 00405570
00453F09PUSH 0
00453F0BPUSH 005E1AB4
00453F10LEA ECX, DWORD PTR ;短字符串
00453F13CALL 00405570
00453F18MOV EAX, DWORD PTR
00453F1EPUSH 5AF3
00453F23PUSH 107A4000
00453F28PUSH EAX
00453F29PUSH ESI ;3
00453F2ACALL 005B6050 ;3*100000000000000
00453F2FADD EAX, DWORD PTR
00453F35LEA ESI, DWORD PTR
00453F38ADC EDX, DWORD PTR
00453F3EPUSH EDX
00453F3FPUSH EAX
00453F40CALL 00455600 ;-->AAAAAAAAAA
00453F45MOV ECX, DWORD PTR
00453F4BMOV EDX, DWORD PTR
00453F51ADD ESP, 8
00453F54PUSH 0
00453F56PUSH 0F4240
00453F5BPUSH ECX
00453F5CPUSH EDX ;3
00453F5DCALL 005B6050 ;3*1000000
00453F62ADD EAX, EDI
00453F64ADC EDX, EBX
00453F66PUSH EDX
00453F67PUSH EAX
00453F68LEA ESI, DWORD PTR
00453F6BCALL 00455600 ;-->3N7VL
00453F70MOV EDX, DWORD PTR
00453F76MOV EAX, ESI
00453F78PUSH EAX
00453F79LEA ECX, DWORD PTR
00453F7CPUSH ECX
00453F7DPUSH EDX
00453F7ECALL 00416210 ;组合
0012E140 0012E2F0 ASCII "AAAAAAAAAA3N7VL"
总结:
1、激活码中的数字串划分为两部分,14位和6位。14位与机器码无关,6位中的后四位由机器码而来。
2、由这20位组合起来计算校验码。
3、完成校验码计算后,数字串形如:校验码&14位&校验码&6位。
4、按32进制将上述数字串转换为字符串,即为注册码。
二、激活码姓甚名谁
用OD搜索字符串,可得到如下内容:
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位。格式为:受限到期日期 受限用户数 不受限制用户数。受限用户数+不受限制用户数=总共支持的用户数。
84-41-18=2084年41月18日
10-21-48=2010年21月48日
02-30-65=2002年30月65日
笑料吧?!制作注册机,你可别留下话柄,干土匪干的事。而:
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能够掐头。但反正我没见过,你见过?
膜拜下,学习了 学习了,膜拜下~ 给力,值得学习研究。 这是什么软件 学习了 https://www.chinapyg.com/forum.php?mod=viewthread&tid=79122&highlight=%CE%DEx%CC%EC 这个软件做什么用的? 膜拜下,学习了 什么意识?时间短么?
页:
[1]
2