DaShanRen 发表于 2016-6-17 16:46:31

捣蛋部队之ImgConverter注册算法分析与注册机

本帖最后由 DaShanRen 于 2016-6-17 16:52 编辑

1、注册码校验
0069846ECALL 006983D8                                  ;注册码去掉“-”
00698473MOV EAX,DWORD PTR SS:                   ;结果
00698476TEST EAX,EAX
00698478JE SHORT 0069847F
0069847ASUB EAX,4
0069847DMOV EAX,DWORD PTR DS:                     ;读取注册码长度
0069847FCMP EAX,1C                                     ;长度与28比较
00698482JNZ SHORT 006984C0                           ;不等则跳
00698484LEA EAX,DWORD PTR SS:
00698487PUSH EAX                                       ; /Arg1
00698488MOV ECX,4                                    ; |
0069848DMOV EDX,19                                     ; |
00698492MOV EAX,DWORD PTR SS:                   ; |
00698495CALL 00408884                                  ; \截取后四位
0069849ALEA EAX,DWORD PTR SS:
0069849DMOV EDX,18
006984A2CALL 0040863C                                  ;截取前24位
006984A7LEA EDX,DWORD PTR SS:
006984AAMOV EAX,DWORD PTR SS:
006984ADCALL 006982A4                                  ;计算前24位的校验码
006984B2MOV EDX,DWORD PTR SS:                   ;计算结果
006984B5MOV EAX,DWORD PTR SS:                   ;注册码后4位
006984B8CALL 0040884C                                  ;比较
006984BDSETE BL
========校验算法
006982C8MOV DX,56                                    ;tmp1=0x56
006982CCMOV AX,0AF                                     ;tmp2=0xAF
006982D0MOV ECX,DWORD PTR SS:                   ;指向注册码前24位
006982D3TEST ECX,ECX
006982D5JE SHORT 006982DC
006982D7SUB ECX,4
006982DAMOV ECX,DWORD PTR DS:                     ;读取长度值
006982DCTEST ECX,ECX
006982DEJLE SHORT 00698311
006982E0TEST ECX,ECX
006982E2JLE SHORT 00698311
006982E4MOV EBX,1                                    ;i=1
006982E9/MOV ESI,DWORD PTR SS:                  ;指向前24位
006982EC|MOVZX ESI,BYTE PTR DS:
006982F1|ADD AX,SI                                     ;tmp2+=第i位
006982F4|CMP AX,0FF                                    ;结果与255比较
006982F8|JBE SHORT 006982FE                            ;不大于则跳
006982FA|SUB AX,0FF                                    ;否则tmp2-=255
006982FE|ADD DX,AX                                     ;tmp1+=tmp2
00698301|CMP DX,0FF                                    ;结果与255比较
00698306|JBE SHORT 0069830D                            ;不大于则跳
00698308|SUB DX,0FF                                    ;否则tmp1-=255
0069830D|INC EBX                                       ;i++
0069830E|DEC ECX
0069830F\JNZ SHORT 006982E9                            ;未完继续
00698311MOV EBX,EDX                                    ;tmp=tmp1--tmp2=F3,tmp1=FE
00698313SHL EBX,8                                    ;tmp<<8
00698316ADD BX,AX                                    ;tmp+=tmp2--重组tmp=FEF3
00698319MOV ECX,DWORD PTR SS:
0069831CMOVZX EAX,BX                                 ;转移结果
0069831FMOV EDX,4
00698324CALL 00420C04                                  ;结果转化为4位Hex字符串
========
2、注册码合法性检验
0069851ECALL 00698150                                  ;长度检测,长度不小于25,不大于200
00698523TEST AL,AL
00698525JE 006988CB
0069852BMOV EAX,EBX                                    ;注册码
0069852DCALL 0069844C                                  ;注册码校验值检测
00698532TEST AL,AL
00698534JE 006988CB
0069853ALEA EDX,DWORD PTR SS:
0069853DMOV EAX,EBX                                    ;注册码
0069853FCALL 006983D8                                  ;去掉连接符“-”
00698544MOV ESI,1
00698549MOV EBX,DWORD PTR DS:                  ;ImgConve.007BCF88
0069854F/LEA EDX,DWORD PTR SS:
00698552|MOV EAX,DWORD PTR DS:                  ;"XXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXX"
00698554|CALL 006983D8                                 ;去掉连接符“-”
00698559|LEA EAX,DWORD PTR SS:
0069855C|MOV EDX,DWORD PTR SS:                  ;无连接符的注册码
0069855F|CALL 00407B4C
00698564|MOV EDX,DWORD PTR SS:               ;无连接符的注册码
00698567|MOV EAX,DWORD PTR SS:                  ;"XXXXXXXXXXXXXXXXXXXXXXXXXXXX"
0069856A|CALL 0045CF88                                 ;比较
0069856F|TEST AL,AL
00698571|JE SHORT 0069857D
00698573|MOV ESI,3
00698578|JMP 006988CB
0069857D|ADD EBX,4
00698580|DEC ESI
00698581\JNZ SHORT 0069854F


3、注册名计算
0147B1AC77 00 77 00 77 00 2E 00 D8 98 91 4E 01 96 2E 00www.飘云阁.
0147B1BC63 00 6F 00 6D 00 2F 00 77 00 77 00 77 00 2E 00com/www.
0147B1CC35 00 32 00 70 00 6F 00 6A 00 69 00 65 00 2E 0052pojie.
0147B1DC63 00 6E 00 2F 00 65 00 78 00 70 00 61 00 73 00cn/expas
0147B1EC79 00                                          y


00698209XOR EBX,EBX                                    ;tmp=0
0069820BMOV EAX,DWORD PTR SS:
0069820ECALL 00698150
00698213TEST AL,AL
00698215JE SHORT 0069826B
00698217LEA EAX,DWORD PTR SS:
0069821AMOV EDX,DWORD PTR SS:
0069821DCALL 00407B4C
00698222MOV EAX,DWORD PTR SS:
00698225TEST EAX,EAX
00698227JE SHORT 0069822E
00698229SUB EAX,4
0069822CMOV EAX,DWORD PTR DS:                     ;注册名长度
0069822EMOV EDX,EAX
00698230TEST EDX,EDX
00698232JLE SHORT 0069826B
00698234MOV EAX,1                                    ;i=1
00698239/CMP EAX,1                                     ;i与1比较
0069823C|JLE SHORT 00698254                            ;不大于则跳
0069823E|MOV ECX,DWORD PTR SS:                  ;指向注册名
00698241|MOVZX ECX,WORD PTR DS:         ;读取第i位
00698246|ADD EBX,ECX                                 ;tmp+=结果
00698248|MOV ECX,DWORD PTR SS:                  ;指向注册名
0069824B|MOVZX ECX,WORD PTR DS:         ;读取第i-1位
00698250|ADD EBX,ECX                                 ;tmp+=结果
00698252|JMP SHORT 00698267
00698254|MOV ECX,DWORD PTR SS:                  ;指向注册名
00698257|MOVZX ECX,WORD PTR DS:         ;读取第1位
0069825C|ADD EBX,ECX                                 ;tmp+=结果
0069825E|MOV ECX,DWORD PTR SS:                  ;指向注册名
00698261|MOVZX ECX,WORD PTR DS:             ;读取第2位
00698265|ADD EBX,ECX                                 ;tmp+=结果
00698267|INC EAX                                       ;i++
00698268|DEC EDX
00698269\JNZ SHORT 00698239                            ;未完继续
0069826BMOV EAX,EBX                                    ;转移累计和
0069826DCDQ
0069826EMOV DWORD PTR SS:,EAX                  ;保存结果
00698271MOV DWORD PTR SS:,EDX
值得注意的是,注册名字符使用的是宽代码模式。
4、跟随第二步
00698583MOV ESI,4
00698588MOV EAX,DWORD PTR SS:                  ;94857
0069858BCDQ
0069858CPUSH EDX
0069858DPUSH EAX
0069858EMOV EAX,EDI                                    ;指向注册名
00698590CALL 006981E4                                  ;注册名计算累计和
00698595CALL 004093E4                                  ;累计和*94857=4700AACF2=19059617010
0069859AMOV DWORD PTR SS:,EAX                  ;保存结果
0069859DMOV DWORD PTR SS:,EDX
006985A0LEA EAX,DWORD PTR SS:
5、分步计算与检验注册码的合理性
5.1、注册码1-2位
006985A3PUSH EAX                                       ; /Arg1
006985A4MOV ECX,2                                    ; |
006985A9MOV EDX,1                                    ; |
006985AEMOV EAX,DWORD PTR SS:                   ; |注册码
006985B1CALL 00408884                                  ; \读取1-2位
006985B6PUSH DWORD PTR SS:                     ; /4
006985B9PUSH DWORD PTR SS:                     ; |700AACF2--乘积结果
006985BCMOV CL,91                                    ; |0x91=145
006985BEMOV DL,0B                                    ; |11=11
006985C0MOV AL,5E                                    ; |0x5E=94
006985C2CALL 0069834C                                  ; \计算两位注册码
========计算两位注册码
后面的计算仅参数不同,公式相同,不再一一叙述。
0069834CPUSH EBP
0069834DMOV EBP,ESP
0069834FPUSH ECX
00698350PUSH EBX
00698351MOV BYTE PTR SS:,CL                     ;0x91
00698354MOV BYTE PTR SS:,DL                     ;11
00698357MOV EBX,EAX
00698359MOVZX EAX,BL                                 ;0x5E
0069835CMOV ECX,0C
00698361XOR EDX,EDX
00698363DIV ECX                                        ;0x5E mod 12 =10
00698365MOV EBX,EDX                                    ;转移余数
00698367MOVZX EAX,BYTE PTR SS:                  ;11
0069836BMOV ECX,22
00698370XOR EDX,EDX
00698372DIV ECX
00698374MOV BYTE PTR SS:,DL                     ;11 mod 34
00698377MOVZX EAX,BL                                 ;10
0069837AAND EAX,1                                    ;and 1
0069837DTEST EAX,EAX
0069837FJNZ SHORT 006983AA                           ;非0则跳
00698381MOV EAX,DWORD PTR SS:
00698384MOV EDX,DWORD PTR SS:                   ;积
00698387MOV ECX,EBX                                    ;10
00698389CALL 004095CC                                  ;积\2^10
0069838EAND AL,0FF                                     ;商 and FF
00698390PUSH EAX                                       ;暂存
00698391MOV EAX,DWORD PTR SS:                   ;积
00698394MOV EDX,DWORD PTR SS:
00698397MOVZX ECX,BYTE PTR SS:                  ;11
0069839BCALL 004095CC                                  ;积\2^11
006983A0OR AL,BYTE PTR SS:                      ;结果 or 0x91
006983A3MOV EDX,EAX                                    ;转移结果
006983A5POP EAX                                        ;暂存值
006983A6XOR AL,DL                                    ;两结果 xor
006983A8JMP SHORT 006983D1
006983AAMOV EAX,DWORD PTR SS:                   ;积--非0时的算法
006983ADMOV EDX,DWORD PTR SS:
006983B0MOV ECX,EBX                                    ;10
006983B2CALL 004095CC                                  ;积\2^10
006983B7AND AL,0FF                                     ;商 and FF
006983B9PUSH EAX
006983BAMOV EAX,DWORD PTR SS:
006983BDMOV EDX,DWORD PTR SS:
006983C0MOVZX ECX,BYTE PTR SS:
006983C4CALL 004095CC
006983C9AND AL,BYTE PTR SS:                     ;结果 and 0x91--不同算法
006983CCMOV EDX,EAX
006983CEPOP EAX
006983CFXOR AL,DL
006983D1POP EBX
006983D2POP ECX
006983D3POP EBP
006983D4RETN 8
========
006985C7MOV EBX,EAX                                    ;转移结果
006985C9LEA ECX,DWORD PTR SS:
006985CCMOVZX EAX,BL                                 ;转移
006985CFMOV EDX,2                                    ;2
006985D4CALL 00420C04                                  ;结果转化为2位Hex字符
006985D9MOV EDX,DWORD PTR SS:                  ;转化的结果
006985DCMOV EAX,DWORD PTR SS:                   ;注册码1-2位
006985DFCALL 0040884C                                  ;比较
006985E4JNZ 006988CB                                 ;不等则跳
后续的算法与差异:
5.2、注册码的3-4位
006985EALEA EAX,DWORD PTR SS:
006985EDPUSH EAX                                       ; /Arg1
006985EEMOV ECX,2                                    ; |
006985F3MOV EDX,3                                    ; |
006985F8MOV EAX,DWORD PTR SS:                   ; |
006985FBCALL 00408884                                  ; \ImgConve.00408884
00698600PUSH DWORD PTR SS:                     ; /Arg2
00698603PUSH DWORD PTR SS:                     ; |Arg1
00698606MOV CL,0AB                                     ; |=171
00698608MOV DL,4B                                    ; |=75
0069860AMOV AL,37                                    ; |=55
0069860CCALL 0069834C                                  ; \计算两位注册码
00698611MOV EBX,EAX
00698613LEA ECX,DWORD PTR SS:
00698616MOVZX EAX,BL
00698619MOV EDX,2
0069861ECALL 00420C04
00698623MOV EDX,DWORD PTR SS:
00698626MOV EAX,DWORD PTR SS:
00698629CALL 0040884C
0069862EJNZ 006988CB
5.3、注册码的5-6位
00698634LEA EAX,DWORD PTR SS:
00698637PUSH EAX                                       ; /Arg1
00698638MOV ECX,2                                    ; |
0069863DMOV EDX,5                                    ; |
00698642MOV EAX,DWORD PTR SS:                   ; |
00698645CALL 00408884                                  ; \ImgConve.00408884
0069864APUSH DWORD PTR SS:                     ; /Arg2
0069864DPUSH DWORD PTR SS:                     ; |Arg1
00698650MOV CL,85                                    ; |=133
00698652MOV DL,49                                    ; |=73
00698654MOV AL,47                                    ; |=71
00698656CALL 0069834C                                  ; \计算两位注册码
0069865BMOV EBX,EAX
0069865DLEA ECX,DWORD PTR SS:
00698660MOVZX EAX,BL
00698663MOV EDX,2
00698668CALL 00420C04
0069866DMOV EDX,DWORD PTR SS:
00698670MOV EAX,DWORD PTR SS:
00698673CALL 0040884C
00698678JNZ 006988CB
5.4、注册码的7-8位
0069867ELEA EAX,DWORD PTR SS:
00698681PUSH EAX                                       ; /Arg1
00698682MOV ECX,2                                    ; |
00698687MOV EDX,7                                    ; |
0069868CMOV EAX,DWORD PTR SS:                   ; |
0069868FCALL 00408884                                  ; \ImgConve.00408884
00698694PUSH DWORD PTR SS:                     ; /Arg2
00698697PUSH DWORD PTR SS:                     ; |Arg1
0069869AMOV CL,70                                    ; |=112
0069869CMOV DL,18                                    ; |=24
0069869EMOV AL,0E                                    ; |=14
006986A0CALL 0069834C                                  ; \计算两位注册码
006986A5MOV EBX,EAX
006986A7LEA ECX,DWORD PTR SS:
006986AAMOVZX EAX,BL
006986ADMOV EDX,2
006986B2CALL 00420C04
006986B7MOV EDX,DWORD PTR SS:
006986BAMOV EAX,DWORD PTR SS:
006986BDCALL 0040884C
006986C2JNZ 006988CB
5.5、注册码的9-410位
006986C8LEA EAX,DWORD PTR SS:
006986CBPUSH EAX                                       ; /Arg1
006986CCMOV ECX,2                                    ; |
006986D1MOV EDX,9                                    ; |
006986D6MOV EAX,DWORD PTR SS:                   ; |
006986D9CALL 00408884                                  ; \ImgConve.00408884
006986DEPUSH DWORD PTR SS:                     ; /Arg2
006986E1PUSH DWORD PTR SS:                     ; |Arg1
006986E4MOV CL,9D                                    ; |=157
006986E6MOV DL,29                                    ; |=41
006986E8MOV AL,0F                                    ; |=15
006986EACALL 0069834C                                  ; \计算两位注册码
006986EFMOV EBX,EAX
006986F1LEA ECX,DWORD PTR SS:
006986F4MOVZX EAX,BL
006986F7MOV EDX,2
006986FCCALL 00420C04
00698701MOV EDX,DWORD PTR SS:
00698704MOV EAX,DWORD PTR SS:
00698707CALL 0040884C
0069870CJNZ 006988CB
5.6、注册码的11-12位
00698712LEA EAX,DWORD PTR SS:
00698715PUSH EAX                                       ; /Arg1
00698716MOV ECX,2                                    ; |
0069871BMOV EDX,0B                                     ; |
00698720MOV EAX,DWORD PTR SS:                   ; |
00698723CALL 00408884                                  ; \ImgConve.00408884
00698728PUSH DWORD PTR SS:                     ; /Arg2
0069872BPUSH DWORD PTR SS:                     ; |Arg1
0069872EMOV CL,8E                                    ; |=142
00698730MOV DL,58                                    ; |=88
00698732MOV AL,3A                                    ; |=58
00698734CALL 0069834C                                  ; \计算两位注册码
00698739MOV EBX,EAX
0069873BLEA ECX,DWORD PTR SS:
0069873EMOVZX EAX,BL
00698741MOV EDX,2
00698746CALL 00420C04
0069874BMOV EDX,DWORD PTR SS:
0069874EMOV EAX,DWORD PTR SS:
00698751CALL 0040884C
00698756JNZ 006988CB
5.7、注册码的13-14位
0069875CLEA EAX,DWORD PTR SS:
0069875FPUSH EAX                                       ; /Arg1
00698760MOV ECX,2                                    ; |
00698765MOV EDX,0D                                     ; |
0069876AMOV EAX,DWORD PTR SS:                   ; |
0069876DCALL 00408884                                  ; \ImgConve.00408884
00698772PUSH DWORD PTR SS:                     ; /Arg2
00698775PUSH DWORD PTR SS:                     ; |Arg1
00698778MOV CL,6F                                    ; |=111
0069877AMOV DL,23                                    ; |=35
0069877CMOV AL,3B                                    ; |=59
0069877ECALL 0069834C                                  ; \计算两位注册码
00698783MOV EBX,EAX
00698785LEA ECX,DWORD PTR SS:
00698788MOVZX EAX,BL
0069878BMOV EDX,2
00698790CALL 00420C04
00698795MOV EDX,DWORD PTR SS:
00698798MOV EAX,DWORD PTR SS:
0069879BCALL 0040884C
006987A0JNZ 006988CB
5.8、注册码的15-16位
006987A6LEA EAX,DWORD PTR SS:
006987A9PUSH EAX                                       ; /Arg1
006987AAMOV ECX,2                                    ; |
006987AFMOV EDX,0F                                     ; |
006987B4MOV EAX,DWORD PTR SS:                   ; |
006987B7CALL 00408884                                  ; \ImgConve.00408884
006987BCPUSH DWORD PTR SS:                     ; /Arg2
006987BFPUSH DWORD PTR SS:                     ; |Arg1
006987C2MOV CL,0AA                                     ; |=170
006987C4MOV DL,19                                    ; |=25
006987C6MOV AL,43                                    ; |=67
006987C8CALL 0069834C                                  ; \计算两位注册码
006987CDMOV EBX,EAX
006987CFLEA ECX,DWORD PTR SS:
006987D2MOVZX EAX,BL
006987D5MOV EDX,2
006987DACALL 00420C04
006987DFMOV EDX,DWORD PTR SS:
006987E2MOV EAX,DWORD PTR SS:
006987E5CALL 0040884C
006987EAJNZ 006988CB
5.9、注册码的17-18位
006987F0LEA EAX,DWORD PTR SS:
006987F3PUSH EAX                                       ; /Arg1
006987F4MOV ECX,2                                    ; |
006987F9MOV EDX,11                                     ; |
006987FEMOV EAX,DWORD PTR SS:                   ; |
00698801CALL 00408884                                  ; \ImgConve.00408884
00698806PUSH DWORD PTR SS:                     ; /Arg2
00698809PUSH DWORD PTR SS:                     ; |Arg1
0069880CMOV CL,0A4                                     ; |=164
0069880EMOV DL,15                                    ; |=21
00698810MOV AL,54                                    ; |=84
00698812CALL 0069834C                                  ; \计算两位注册码
00698817MOV EBX,EAX
00698819LEA ECX,DWORD PTR SS:
0069881CMOVZX EAX,BL
0069881FMOV EDX,2
00698824CALL 00420C04
00698829MOV EDX,DWORD PTR SS:
0069882CMOV EAX,DWORD PTR SS:
0069882FCALL 0040884C
00698834JNZ 006988CB
5.10、注册码的19-20位
0069883ALEA EAX,DWORD PTR SS:
0069883DPUSH EAX                                       ; /Arg1
0069883EMOV ECX,2                                    ; |
00698843MOV EDX,13                                     ; |
00698848MOV EAX,DWORD PTR SS:                   ; |
0069884BCALL 00408884                                  ; \ImgConve.00408884
00698850PUSH DWORD PTR SS:                     ; /Arg2
00698853PUSH DWORD PTR SS:                     ; |Arg1
00698856MOV CL,0E7                                     ; |=231
00698858MOV DL,2A                                    ; |=42
0069885AMOV AL,1B                                    ; |=27
0069885CCALL 0069834C                                  ; \计算两位注册码
00698861MOV EBX,EAX
00698863LEA ECX,DWORD PTR SS:
00698866MOVZX EAX,BL
00698869MOV EDX,2
0069886ECALL 00420C04
00698873MOV EDX,DWORD PTR SS:
00698876MOV EAX,DWORD PTR SS:
00698879CALL 0040884C
0069887EJNZ SHORT 006988CB
5.11、注册码的21-22位
00698880LEA EAX,DWORD PTR SS:
00698883PUSH EAX                                       ; /Arg1
00698884MOV ECX,2                                    ; |
00698889MOV EDX,15                                     ; |
0069888EMOV EAX,DWORD PTR SS:                   ; |
00698891CALL 00408884                                  ; \ImgConve.00408884
00698896PUSH DWORD PTR SS:                     ; /Arg2
00698899PUSH DWORD PTR SS:                     ; |Arg1
0069889CMOV CL,0A6                                     ; |=166
0069889EMOV DL,1B                                    ; |=27
006988A0MOV AL,42                                    ; |=66
006988A2CALL 0069834C                                  ; \计算两位注册码
006988A7MOV EBX,EAX
006988A9LEA ECX,DWORD PTR SS:
006988ACMOVZX EAX,BL
006988AFMOV EDX,2
006988B4CALL 00420C04
006988B9MOV EDX,DWORD PTR SS:
006988BCMOV EAX,DWORD PTR SS:
006988BFCALL 0040884C
006988C4JNZ SHORT 006988CB
006988C6MOV ESI,1


为了不用编译平台写注册机,使众多的人能从高大上中解脱出来,特地用VBS写的注册机。可看可不看、可复制也可不复制、可使用也可不使用,反正不保密不收费。如果复制,保存为文本文件后就扩展名改为vbs,双击之后就是个对话框式的注册机:
'ImgConverter
Dim ID, Dtmp, SN, yuzhi

yuzhi = "www.飘云阁.com/www.52pojie.cn/expasy"
ID = InputBox("请输入注册名","提示",yuzhi)
Do While ID<>""
    If Len(ID) < 25 Or Len(ID) > 200 Then
      MsgBox "注册名长度应该在 25 至 200 个字符范围内选择。", vbInformation + vbOKOnly, "提示"
      Exit Do
    End If
    Dtmp = CalName(ID)
   
    Dtmp = Dtmp * 94857
    SN = SN & CalSN(94, 11, 145, Dtmp)
    SN = SN & CalSN(55, 75, 171, Dtmp)
    SN = SN & CalSN(71, 73, 133, Dtmp)
    SN = SN & CalSN(14, 24, 112, Dtmp)
    SN = SN & CalSN(15, 41, 157, Dtmp)
    SN = SN & CalSN(58, 88, 142, Dtmp)
    SN = SN & CalSN(59, 35, 111, Dtmp)
    SN = SN & CalSN(67, 25, 170, Dtmp)
    SN = SN & CalSN(84, 21, 164, Dtmp)
    SN = SN & CalSN(27, 42, 231, Dtmp)
    SN = SN & CalSN(66, 27, 166, Dtmp)
    SN = SN & CalSN(11, 11, 111, Dtmp)
    SN = SN & CalSum(SN)
   
    SN = Mid(SN, 1, 4) & "-" & Mid(SN, 5, 4) & "-" & Mid(SN, 9, 4) & "-" & Mid(SN, 13, 4) & "-" & Mid(SN, 17, 4) & "-" & Mid(SN, 21, 4) & "-" & Mid(SN, 25, 4)
    InputBox "对应的注册码结果是:","请复制",SN
    SN = ""
    ID = InputBox("继续输入注册名?","提示",yuzhi)
Loop

Function CalSum(in1)
    Dim Ltmp1, Ltmp2, n, i
   
    Ltmp1 = 86
    Ltmp2 = 175
    n = Len(in1)
    For i = 1 To n
      Ltmp2 = Ltmp2 + Asc(Mid(in1, i, 1))
      If Ltmp2 > 255 Then Ltmp2 = Ltmp2 - 255
      Ltmp1 = Ltmp1 + Ltmp2
      If Ltmp1 > 255 Then Ltmp1 = Ltmp1 - 255
    Next
    Ltmp1 = Ltmp1 * 256 + Ltmp2
    CalSum = Right("000" & Hex(Ltmp1), 4)
End Function

Function CalName(in1)
    Dim n, i, Ltmp, Itmp
   
    n = Len(in1)
    For i = 1 To n
      If i = 1 Then
            Itmp = AscW(Mid(in1, 1, 1))
            If Itmp < 0 Then Itmp = Itmp + 65536
            Ltmp = Ltmp + Itmp
            Itmp = AscW(Mid(in1, 2, 1))
            If Itmp < 0 Then Itmp = Itmp + 65536
            Ltmp = Ltmp + Itmp
      Else
            Itmp = AscW(Mid(in1, i, 1))
            If Itmp < 0 Then Itmp = Itmp + 65536
            Ltmp = Ltmp + Itmp
            Itmp = AscW(Mid(in1, i - 1, 1))
            If Itmp < 0 Then Itmp = Itmp + 65536
            Ltmp = Ltmp + Itmp
      End If
    Next
    CalName = Ltmp
End Function

Function CalSN(in1, in2, in3, in4)
    'in1,in2,in3为软件内定的参数,in4为注册名计算结果
    Dim Itmp1, Itmp2, Ltmp1, Ltmp2
   
    Itmp1 = in1 Mod 12
    Itmp2 = in2 Mod 34
    Ltmp1 = Int(in4 / 2 ^ Itmp1)
    Ltmp2 = Int(in4 / 2 ^ Itmp2)
    Ltmp1 = Ltmp1 - 256 * Int(Ltmp1 / 256) '相当于 Ltmp1 And 255
    Ltmp2 = Ltmp2 - 256 * Int(Ltmp2 / 256) '相当于 Ltmp2 And 255
   
    If (Itmp1 And 1) = 0 Then
      Ltmp2 = Ltmp2 Or in3
    Else
      Ltmp2 = Ltmp2 And in3
    End If
    Ltmp1 = Ltmp1 Xor Ltmp2
    CalSN = Right("0" & Hex(Ltmp1), 2)
End Function

[PYG]版务督察 发表于 2016-6-17 16:50:13

前排学习

飞天 发表于 2016-6-17 18:07:20

膜拜楼主算法。

expasy 发表于 2016-6-17 18:45:34

厉害,vbs简洁高效,只有80行代码,学习了

tree_fly 发表于 2016-6-17 18:51:37

建议用C写注册机,更跨平台~

DaShanRen 发表于 2016-6-17 22:27:09

tree_fly 发表于 2016-6-17 18:51
建议用C写注册机,更跨平台~

呵呵!

xinbinchi 发表于 2016-6-27 01:47:27

谢谢,支持下,
页: [1]
查看完整版本: 捣蛋部队之ImgConverter注册算法分析与注册机