DaShanRen 发表于 2015-6-16 10:45:35

Full Video Converter 10.5.0 注册算法分析

本帖最后由 DaShanRen 于 2015-6-16 21:36 编辑

一、准备
00442341CALL 00441BF0                         ;分离--注册码分割成6段
00442346ADD ESP,1C
00442349MOV BYTE PTR SS:,58         ;字符表
0044234EMOV BYTE PTR SS:,38
00442353MOV BYTE PTR SS:,32
00442358MOV BYTE PTR SS:,52
0044235DMOV BYTE PTR SS:,37
00442362MOV BYTE PTR SS:,4A
00442367MOV BYTE PTR SS:,4C
0044236CMOV BYTE PTR SS:,36
00442371MOV BYTE PTR SS:,4B
00442376MOV BYTE PTR SS:,57
0044237BMOV BYTE PTR SS:,4F
00442380MOV BYTE PTR SS:,47
00442385MOV BYTE PTR SS:,43
0044238AMOV BYTE PTR SS:,41
0044238FMOV BYTE PTR SS:,54
00442394MOV BYTE PTR SS:,55
00442399MOV BYTE PTR SS:,56
0044239EMOV BYTE PTR SS:,59
004423A3MOV BYTE PTR SS:,33
004423A8MOV BYTE PTR SS:,5A
004423ADMOV BYTE PTR SS:,34
004423B2MOV BYTE PTR SS:,35
004423B7MOV BYTE PTR SS:,50
004423BCMOV BYTE PTR SS:,4D
004423C1MOV BYTE PTR SS:,45
004423C6MOV BYTE PTR SS:,30
004423CBMOV BYTE PTR SS:,31
004423D0MOV BYTE PTR SS:,39
004423D5MOV BYTE PTR SS:,49
004423DAMOV BYTE PTR SS:,4E
004423DFLEA ECX,DWORD PTR SS:         ;指针1
004423E6PUSH ECX
004423E7PUSH ECX
004423E8LEA EDX,DWORD PTR SS:
004423ECMOV ECX,ESP
004423EEMOV DWORD PTR SS:,ESP
004423F2PUSH EDX
004423F3MOV BYTE PTR SS:,42
004423F8MOV BYTE PTR SS:,44
004423FDMOV BYTE PTR SS:,51
00442402MOV BYTE PTR SS:,53
00442407MOV BYTE PTR SS:,46
0044240CMOV BYTE PTR SS:,48
字符表为:X82R7JL6KWOGCATUVY3Z45PME019INBDQSFH

00442411MOV EBX,5
……
00442424CALL 00441E20                         ;检测1--每个字符的位置号,结果为数组
检测每一段的字符在在上述字符串中的位置号,得到一数组。下同
00442429ADD ESP,0C
0044242CLEA ECX,DWORD PTR SS:         ;指针2
……
00442448CALL 00441E20                         ;检测2--同上
0044244DADD ESP,0C
00442450LEA ECX,DWORD PTR SS:         ;指针3
……
0044246CCALL 00441E20                         ;检测3--同上
00442471ADD ESP,0C
00442474LEA ECX,DWORD PTR SS:         ;指针4
……
00442490CALL 00441E20                         ;检测4--同上
00442495ADD ESP,0C
00442498LEA ECX,DWORD PTR SS:         ;指针5
……
004424B4CALL 00441E20                         ;检测5--同上
004424B9ADD ESP,0C
004424BCLEA ECX,DWORD PTR SS:         ;指针6
……
004424DBCALL 00441E20                         ;检测6--同上

二、检验第三段
0044251FCALL 00441EC0                         ;字符"Full"+"Video Converter 10"求和=7E3=2019
00442524MOVSX ECX,BYTE PTR SS:      ;第三段序数结果1
00442529MOVSX EDX,BYTE PTR SS:      ;序数结果2
0044252ELEA ECX,DWORD PTR DS:
00442531LEA ECX,DWORD PTR DS:      ;结果=结果1*10+结果2
00442534MOVSX EDX,BYTE PTR SS:      ;结果3
00442539LEA ECX,DWORD PTR DS:
0044253CLEA ECX,DWORD PTR DS:      ;结果=结果*10+结果3
0044253FMOVSX EDX,BYTE PTR SS:      ;结果4
00442544LEA ECX,DWORD PTR DS:
00442547LEA ECX,DWORD PTR DS:      ;结果=结果*10+结果4
0044254AMOVSX EDX,BYTE PTR SS:      ;结果5
0044254FLEA ECX,DWORD PTR DS:
00442552LEA ECX,DWORD PTR DS:      ;结果=结果*10+结果5
00442555ADD ESP,8
00442558CMP EAX,ECX                           ;求和结果与序数结果比较
0044255AJE 00442696                           ;相等则跳
……

三、检验第一段
00442696MOV EBX,5                           ;注册码第三段满足条件时跳到这里
0044269BPUSH EBX
0044269CLEA ECX,DWORD PTR SS:
004426A3CALL 00441FE0                         ;第一段位置号求和
004426A8ADD ESP,4
004426ABCMP EAX,64                            ;结果要等于0x64
004426AEJE 004427E9                           ;相等则跳
……

四、检验第二段
004427E9PUSH 3                              ;第一段满足条件跳到这里
004427EBLEA ECX,DWORD PTR SS:
004427EFCALL 00441FE0                         ;第二段后3位求和
004427F4PUSH 2
004427F6LEA ECX,DWORD PTR SS:
004427FDMOV ESI,EAX
004427FFCALL 00441FE0                         ;第二段前2位求和
00442804ADD ESP,8
00442807CMP EAX,ESI                           ;第二段前2位的和=后3位的和
00442809JE 00442944                           ;相等则跳
……

五、检验第四段
00442944PUSH 2                              ;第二段满足条件时跳到这里
00442946LEA ECX,DWORD PTR SS:         ;第四段
0044294ACALL 00441FE0                         ;前2位求和
0044294FMOV ESI,EAX
00442951PUSH 3
00442953LEA ECX,DWORD PTR SS:
00442957ADD ESI,1E                            ;结果+1E
0044295ACALL 00441FE0                         ;后三位求和
0044295FADD ESP,8
00442962CMP ESI,EAX
00442964JE 00442A9F                           ;两结果相等则跳
……

六、检验第五段
00442A9FPUSH 2                              ;第四段满足条件跳到这里
00442AA1LEA ECX,DWORD PTR SS:         ;第五段
00442AA5CALL 00441FE0                         ;前2位求和
00442AAAMOV ESI,EAX
00442AACPUSH 3
00442AAELEA ECX,DWORD PTR SS:
00442AB2ADD ESI,0A                            ;结果+0xA
00442AB5CALL 00441FE0                         ;后3位求和
00442ABAADD ESP,8
00442ABDCMP ESI,EAX
00442ABFJE 00442BFA                           ;两结果相等则跳
……

七、检验第六段
00442BFAPUSH 3                              ;第五段满足条件跳到这里
00442BFCLEA ECX,DWORD PTR SS:         ;第6段
00442C03CALL 00441FE0                         ;后三位求和
00442C08PUSH 2
00442C0ALEA ECX,DWORD PTR SS:
00442C11MOV EBP,EAX
00442C13CALL 00441FE0                         ;前两位求和
00442C18SUB EBP,EAX                           ;后三位的和-前两位的和
00442C1AADD ESP,8
00442C1DCMP EBP,1                           ;结果=1?
00442C20JE 00442D6D                           ;是则跳
00442C26CMP EBP,3                           ;结果=3?
00442C29JE 00442D6D                           ;是则跳
00442C2FCMP EBP,9                           ;结果=9?
00442C32JE 00442D6D                           ;是则跳
……

八、二次准备
00442D6DMOV CL,4E                           ;全部满足条件跳到这里--组件字符串CULVHXNJEYUNIEOG
00442D6FMOV DL,55
00442D71MOV AL,45
00442D73MOV BYTE PTR SS:,CL
00442D77MOV BYTE PTR SS:,CL
00442D7BMOV BYTE PTR SS:,43
00442D80MOV BYTE PTR SS:,DL
00442D84MOV BYTE PTR SS:,4C
00442D89MOV BYTE PTR SS:,56
00442D8EMOV BYTE PTR SS:,48
00442D93MOV BYTE PTR SS:,58
00442D98MOV BYTE PTR SS:,4A
00442D9DMOV BYTE PTR SS:,AL
00442DA1MOV BYTE PTR SS:,59
00442DA6MOV BYTE PTR SS:,DL
00442DAAMOV BYTE PTR SS:,49
00442DAFMOV BYTE PTR SS:,AL
00442DB3MOV BYTE PTR SS:,4F
00442DB8MOV BYTE PTR SS:,47

九、第一段中至少有一个字符是第二个字符串中的字符,下同
00442DBDXOR ECX,ECX                           ;i=0
00442DBFNOP
00442DC0MOV DL,BYTE PTR SS:       ;读取字符串2第i位位置号
00442DC4XOR EAX,EAX                           ;j=0
00442DC6CMP BYTE PTR SS:,DL       ;查找第一个字符串中的位置
00442DCAJE SHORT 00442DD5                     ;找到则跳过
00442DCCINC EAX                               ;j++
00442DCDCMP EAX,24
00442DD0JL SHORT 00442DC6
00442DD2OR EAX,FFFFFFFF
00442DD5MOV BYTE PTR SS:,AL       ;保存位置号--数组
00442DDCINC ECX                               ;i++
00442DDDCMP ECX,10
00442DE0JL SHORT 00442DC0                     ;未完继续

00442DE2XOR ECX,ECX                           ;j=0
00442DE4JMP SHORT 00442DF0
00442DE6LEA ESP,DWORD PTR SS:
00442DEDLEA ECX,DWORD PTR DS:
00442DF0MOV DL,BYTE PTR SS:       ;读取第一段的第j位
00442DF7XOR EAX,EAX                           ;i=0
00442DF9LEA ESP,DWORD PTR SS:
00442E00CMP DL,BYTE PTR SS:       ;与结果的第i位比较
00442E07JE 00442F4D                           ;相等则跳过--第一段的字符至少有一个是第二个字符串中的字符?
00442E0DINC EAX                               ;i++
00442E0ECMP EAX,10
00442E11JL SHORT 00442E00
00442E13INC ECX                               ;j++
00442E14CMP ECX,EBX
00442E16JL SHORT 00442DF0
……
00442F4DXOR ECX,ECX                           ;i=0
00442F4FNOP
00442F50MOV DL,BYTE PTR SS:       ;读取第2段的第i位
00442F54XOR EAX,EAX                           ;j=0
00442F56JMP SHORT 00442F60
00442F58LEA ESP,DWORD PTR SS:
00442F5FNOP
00442F60CMP DL,BYTE PTR SS:       ;与结果比较
00442F67JE 004430AD                           ;想的则跳--至少有一个,同上
00442F6DINC EAX                               ;j++
00442F6ECMP EAX,10
00442F71JL SHORT 00442F60
00442F73INC ECX                               ;i++
00442F74CMP ECX,EBX
00442F76JL SHORT 00442F50
……
004430ADXOR ECX,ECX                           ;i=0
004430AFNOP
004430B0MOV DL,BYTE PTR SS:       ;读取第四段第i位
004430B4XOR EAX,EAX                           ;j=0
004430B6JMP SHORT 004430C0
004430B8LEA ESP,DWORD PTR SS:
004430BFNOP
004430C0CMP DL,BYTE PTR SS:       ;比较
004430C7JE 0044320D                           ;至少有一个,同上
004430CDINC EAX                               ;j++
004430CECMP EAX,10
004430D1JL SHORT 004430C0
004430D3INC ECX                               ;i++
004430D4CMP ECX,EBX
004430D6JL SHORT 004430B0
……
0044320DXOR ECX,ECX                           ;i=0
0044320FNOP
00443210MOV DL,BYTE PTR SS:       ;读取第五段中的第i位
00443214XOR EAX,EAX                           ;j=0
00443216JMP SHORT 00443220
00443218LEA ESP,DWORD PTR SS:
0044321FNOP
00443220CMP DL,BYTE PTR SS:       ;比较
00443227JE 0044336D                           ;至少有一个,同上
0044322DINC EAX                               ;j++
0044322ECMP EAX,10
00443231JL SHORT 00443220
00443233INC ECX                               ;i++
00443234CMP ECX,EBX
00443236JL SHORT 00443210
……
0044336DXOR ECX,ECX                           ;i=0
0044336FNOP
00443370MOV DL,BYTE PTR SS:       ;读取第六段中的第i位
00443377XOR EAX,EAX                           ;j=0
00443379LEA ESP,DWORD PTR SS:
00443380CMP DL,BYTE PTR SS:       ;比较
00443387JE 004434CD                           ;至少有一个,同上
0044338DINC EAX                               ;j++
0044338ECMP EAX,10
00443391JL SHORT 00443380
00443393INC ECX                               ;i++
00443394CMP ECX,EBX
00443396JL SHORT 00443370
……

十、三次检测
004434CDPUSH EBX
004434CELEA ECX,DWORD PTR SS:         ;第二段数据
004434D2CALL 00441FE0                         ;求和
004434D7PUSH EBX
004434D8LEA ECX,DWORD PTR SS:         ;第四段数据
004434DCMOV ESI,EAX                           ;二段和
004434DECALL 00441FE0                         ;求和
004434E3PUSH EBX
004434E4LEA ECX,DWORD PTR SS:         ;第五段数据
004434E8MOV EDI,EAX                           ;四段和
004434EACALL 00441FE0                         ;求和
004434EFADD ESP,0C
004434F2CMP ESI,64                            ;二段和与0x64比较
004434F5JG 0044379B                           ;大于则跳
004434FBCMP ESI,EDI                           ;二段和与四段和比较
004434FDJL 0044379B                           ;小于则跳
00443503CMP EDI,EAX                           ;四段和与五段和比较
00443505JL 0044379B                           ;小于则跳



小结:
在都转换为位置号的情况下,各段应该满足的条件是:
1、
第一段的和=0x64;
第二段中,前2位和=后3位的和;
第三段组成十进制结果=2019;
第四段中,前2位的和+1E=后3位的和;
第五段中,前2位的和+0A=后3位的和;
第六段中,后3位的和-前2位的和=1,3,9。分别对应一年期、四年期、无限期。
2、
第一、二、四、五、六段中各至少有一个字符在:CULVHXNJEYUNIEOG中(有重复)。
3、
第二段、第四段、第五段的和要满足:
第二段<=0x64;第二段>=第四段;第四段>=第五段。

例如:
YMMPU-E144O-X2X8W-XHM0Y-E5M1L-I5V5A--一年期
YMMPU-E144O-X2X8W-XHM0Y-E5M1L-I4Y5A--四年期
YMMPU-E144O-X2X8W-XHM0Y-E5M1L-IY3PT--无限期


DaShanRen 发表于 2015-6-16 10:47:31

搞啥鸟,成乱码了!

开心啦 发表于 2015-6-16 11:19:46

膜拜,会算法的都是大神

冯玉姣 发表于 2015-6-16 19:04:36

能提供注册机算法代码及注册机就好了。

DaShanRen 发表于 2015-6-17 08:50:14

冯玉姣 发表于 2015-6-16 19:04
能提供注册机算法代码及注册机就好了。

若果有人愿意看或者是学习,提供也无妨!

冯玉姣 发表于 2015-6-17 18:17:21

DaShanRen 发表于 2015-6-17 08:50
若果有人愿意看或者是学习,提供也无妨!

那就先谢谢了!

sdnyzjzx 发表于 2015-7-18 20:06:12

厉害!算法够麻烦啊!

qweokup 发表于 2015-7-18 22:57:04

膜拜膜拜
页: [1]
查看完整版本: Full Video Converter 10.5.0 注册算法分析