- UID
- 26814
注册时间2007-2-2
阅读权限20
最后登录1970-1-1
以武会友
TA的每日心情 | 开心 2020-11-19 11:04 |
---|
签到天数: 1 天 [LV.1]初来乍到
|
本帖最后由 DaShanRen 于 2015-6-16 21:36 编辑
一、准备
00442341 CALL 00441BF0 ; 分离--注册码分割成6段
00442346 ADD ESP,1C
00442349 MOV BYTE PTR SS:[ESP+34],58 ; 字符表
0044234E MOV BYTE PTR SS:[ESP+35],38
00442353 MOV BYTE PTR SS:[ESP+36],32
00442358 MOV BYTE PTR SS:[ESP+37],52
0044235D MOV BYTE PTR SS:[ESP+38],37
00442362 MOV BYTE PTR SS:[ESP+39],4A
00442367 MOV BYTE PTR SS:[ESP+3A],4C
0044236C MOV BYTE PTR SS:[ESP+3B],36
00442371 MOV BYTE PTR SS:[ESP+3C],4B
00442376 MOV BYTE PTR SS:[ESP+3D],57
0044237B MOV BYTE PTR SS:[ESP+3E],4F
00442380 MOV BYTE PTR SS:[ESP+3F],47
00442385 MOV BYTE PTR SS:[ESP+40],43
0044238A MOV BYTE PTR SS:[ESP+41],41
0044238F MOV BYTE PTR SS:[ESP+42],54
00442394 MOV BYTE PTR SS:[ESP+43],55
00442399 MOV BYTE PTR SS:[ESP+44],56
0044239E MOV BYTE PTR SS:[ESP+45],59
004423A3 MOV BYTE PTR SS:[ESP+46],33
004423A8 MOV BYTE PTR SS:[ESP+47],5A
004423AD MOV BYTE PTR SS:[ESP+48],34
004423B2 MOV BYTE PTR SS:[ESP+49],35
004423B7 MOV BYTE PTR SS:[ESP+4A],50
004423BC MOV BYTE PTR SS:[ESP+4B],4D
004423C1 MOV BYTE PTR SS:[ESP+4C],45
004423C6 MOV BYTE PTR SS:[ESP+4D],30
004423CB MOV BYTE PTR SS:[ESP+4E],31
004423D0 MOV BYTE PTR SS:[ESP+4F],39
004423D5 MOV BYTE PTR SS:[ESP+50],49
004423DA MOV BYTE PTR SS:[ESP+51],4E
004423DF LEA ECX,DWORD PTR SS:[ESP+88] ; 指针1
004423E6 PUSH ECX
004423E7 PUSH ECX
004423E8 LEA EDX,DWORD PTR SS:[ESP+28]
004423EC MOV ECX,ESP
004423EE MOV DWORD PTR SS:[ESP+30],ESP
004423F2 PUSH EDX
004423F3 MOV BYTE PTR SS:[ESP+5E],42
004423F8 MOV BYTE PTR SS:[ESP+5F],44
004423FD MOV BYTE PTR SS:[ESP+60],51
00442402 MOV BYTE PTR SS:[ESP+61],53
00442407 MOV BYTE PTR SS:[ESP+62],46
0044240C MOV BYTE PTR SS:[ESP+63],48
字符表为:X82R7JL6KWOGCATUVY3Z45PME019INBDQSFH
00442411 MOV EBX,5
……
00442424 CALL 00441E20 ; 检测1--每个字符的位置号,结果为数组
检测每一段的字符在在上述字符串中的位置号,得到一数组。下同
00442429 ADD ESP,0C
0044242C LEA ECX,DWORD PTR SS:[ESP+78] ; 指针2
……
00442448 CALL 00441E20 ; 检测2--同上
0044244D ADD ESP,0C
00442450 LEA ECX,DWORD PTR SS:[ESP+2C] ; 指针3
……
0044246C CALL 00441E20 ; 检测3--同上
00442471 ADD ESP,0C
00442474 LEA ECX,DWORD PTR SS:[ESP+68] ; 指针4
……
00442490 CALL 00441E20 ; 检测4--同上
00442495 ADD ESP,0C
00442498 LEA ECX,DWORD PTR SS:[ESP+70] ; 指针5
……
004424B4 CALL 00441E20 ; 检测5--同上
004424B9 ADD ESP,0C
004424BC LEA ECX,DWORD PTR SS:[ESP+80] ; 指针6
……
004424DB CALL 00441E20 ; 检测6--同上
二、检验第三段
0044251F CALL 00441EC0 ; 字符"Full"+"Video Converter 10"求和=7E3=2019
00442524 MOVSX ECX,BYTE PTR SS:[ESP+34] ; 第三段序数结果1
00442529 MOVSX EDX,BYTE PTR SS:[ESP+35] ; 序数结果2
0044252E LEA ECX,DWORD PTR DS:[ECX+ECX*4]
00442531 LEA ECX,DWORD PTR DS:[EDX+ECX*2] ; 结果=结果1*10+结果2
00442534 MOVSX EDX,BYTE PTR SS:[ESP+36] ; 结果3
00442539 LEA ECX,DWORD PTR DS:[ECX+ECX*4]
0044253C LEA ECX,DWORD PTR DS:[EDX+ECX*2] ; 结果=结果*10+结果3
0044253F MOVSX EDX,BYTE PTR SS:[ESP+37] ; 结果4
00442544 LEA ECX,DWORD PTR DS:[ECX+ECX*4]
00442547 LEA ECX,DWORD PTR DS:[EDX+ECX*2] ; 结果=结果*10+结果4
0044254A MOVSX EDX,BYTE PTR SS:[ESP+38] ; 结果5
0044254F LEA ECX,DWORD PTR DS:[ECX+ECX*4]
00442552 LEA ECX,DWORD PTR DS:[EDX+ECX*2] ; 结果=结果*10+结果5
00442555 ADD ESP,8
00442558 CMP EAX,ECX ; 求和结果与序数结果比较
0044255A JE 00442696 ; 相等则跳
……
三、检验第一段
00442696 MOV EBX,5 ; 注册码第三段满足条件时跳到这里
0044269B PUSH EBX
0044269C LEA ECX,DWORD PTR SS:[ESP+8C]
004426A3 CALL 00441FE0 ; 第一段位置号求和
004426A8 ADD ESP,4
004426AB CMP EAX,64 ; 结果要等于0x64
004426AE JE 004427E9 ; 相等则跳
……
四、检验第二段
004427E9 PUSH 3 ; 第一段满足条件跳到这里
004427EB LEA ECX,DWORD PTR SS:[ESP+7E]
004427EF CALL 00441FE0 ; 第二段后3位求和
004427F4 PUSH 2
004427F6 LEA ECX,DWORD PTR SS:[ESP+80]
004427FD MOV ESI,EAX
004427FF CALL 00441FE0 ; 第二段前2位求和
00442804 ADD ESP,8
00442807 CMP EAX,ESI ; 第二段前2位的和=后3位的和
00442809 JE 00442944 ; 相等则跳
……
五、检验第四段
00442944 PUSH 2 ; 第二段满足条件时跳到这里
00442946 LEA ECX,DWORD PTR SS:[ESP+6C] ; 第四段
0044294A CALL 00441FE0 ; 前2位求和
0044294F MOV ESI,EAX
00442951 PUSH 3
00442953 LEA ECX,DWORD PTR SS:[ESP+72]
00442957 ADD ESI,1E ; 结果+1E
0044295A CALL 00441FE0 ; 后三位求和
0044295F ADD ESP,8
00442962 CMP ESI,EAX
00442964 JE 00442A9F ; 两结果相等则跳
……
六、检验第五段
00442A9F PUSH 2 ; 第四段满足条件跳到这里
00442AA1 LEA ECX,DWORD PTR SS:[ESP+74] ; 第五段
00442AA5 CALL 00441FE0 ; 前2位求和
00442AAA MOV ESI,EAX
00442AAC PUSH 3
00442AAE LEA ECX,DWORD PTR SS:[ESP+7A]
00442AB2 ADD ESI,0A ; 结果+0xA
00442AB5 CALL 00441FE0 ; 后3位求和
00442ABA ADD ESP,8
00442ABD CMP ESI,EAX
00442ABF JE 00442BFA ; 两结果相等则跳
……
七、检验第六段
00442BFA PUSH 3 ; 第五段满足条件跳到这里
00442BFC LEA ECX,DWORD PTR SS:[ESP+86] ; 第6段
00442C03 CALL 00441FE0 ; 后三位求和
00442C08 PUSH 2
00442C0A LEA ECX,DWORD PTR SS:[ESP+88]
00442C11 MOV EBP,EAX
00442C13 CALL 00441FE0 ; 前两位求和
00442C18 SUB EBP,EAX ; 后三位的和-前两位的和
00442C1A ADD ESP,8
00442C1D CMP EBP,1 ; 结果=1?
00442C20 JE 00442D6D ; 是则跳
00442C26 CMP EBP,3 ; 结果=3?
00442C29 JE 00442D6D ; 是则跳
00442C2F CMP EBP,9 ; 结果=9?
00442C32 JE 00442D6D ; 是则跳
……
八、二次准备
00442D6D MOV CL,4E ; 全部满足条件跳到这里--组件字符串CULVHXNJEYUNIEOG
00442D6F MOV DL,55
00442D71 MOV AL,45
00442D73 MOV BYTE PTR SS:[ESP+5E],CL
00442D77 MOV BYTE PTR SS:[ESP+63],CL
00442D7B MOV BYTE PTR SS:[ESP+58],43
00442D80 MOV BYTE PTR SS:[ESP+59],DL
00442D84 MOV BYTE PTR SS:[ESP+5A],4C
00442D89 MOV BYTE PTR SS:[ESP+5B],56
00442D8E MOV BYTE PTR SS:[ESP+5C],48
00442D93 MOV BYTE PTR SS:[ESP+5D],58
00442D98 MOV BYTE PTR SS:[ESP+5F],4A
00442D9D MOV BYTE PTR SS:[ESP+60],AL
00442DA1 MOV BYTE PTR SS:[ESP+61],59
00442DA6 MOV BYTE PTR SS:[ESP+62],DL
00442DAA MOV BYTE PTR SS:[ESP+64],49
00442DAF MOV BYTE PTR SS:[ESP+65],AL
00442DB3 MOV BYTE PTR SS:[ESP+66],4F
00442DB8 MOV BYTE PTR SS:[ESP+67],47
九、第一段中至少有一个字符是第二个字符串中的字符,下同
00442DBD XOR ECX,ECX ; i=0
00442DBF NOP
00442DC0 MOV DL,BYTE PTR SS:[ESP+ECX+58] ; 读取字符串2第i位位置号
00442DC4 XOR EAX,EAX ; j=0
00442DC6 CMP BYTE PTR SS:[ESP+EAX+34],DL ; 查找第一个字符串中的位置
00442DCA JE SHORT 00442DD5 ; 找到则跳过
00442DCC INC EAX ; j++
00442DCD CMP EAX,24
00442DD0 JL SHORT 00442DC6
00442DD2 OR EAX,FFFFFFFF
00442DD5 MOV BYTE PTR SS:[ESP+ECX+94],AL ; 保存位置号--数组
00442DDC INC ECX ; i++
00442DDD CMP ECX,10
00442DE0 JL SHORT 00442DC0 ; 未完继续
00442DE2 XOR ECX,ECX ; j=0
00442DE4 JMP SHORT 00442DF0
00442DE6 LEA ESP,DWORD PTR SS:[ESP]
00442DED LEA ECX,DWORD PTR DS:[ECX]
00442DF0 MOV DL,BYTE PTR SS:[ESP+ECX+88] ; 读取第一段的第j位
00442DF7 XOR EAX,EAX ; i=0
00442DF9 LEA ESP,DWORD PTR SS:[ESP]
00442E00 CMP DL,BYTE PTR SS:[ESP+EAX+94] ; 与结果的第i位比较
00442E07 JE 00442F4D ; 相等则跳过--第一段的字符至少有一个是第二个字符串中的字符?
00442E0D INC EAX ; i++
00442E0E CMP EAX,10
00442E11 JL SHORT 00442E00
00442E13 INC ECX ; j++
00442E14 CMP ECX,EBX
00442E16 JL SHORT 00442DF0
……
00442F4D XOR ECX,ECX ; i=0
00442F4F NOP
00442F50 MOV DL,BYTE PTR SS:[ESP+ECX+78] ; 读取第2段的第i位
00442F54 XOR EAX,EAX ; j=0
00442F56 JMP SHORT 00442F60
00442F58 LEA ESP,DWORD PTR SS:[ESP]
00442F5F NOP
00442F60 CMP DL,BYTE PTR SS:[ESP+EAX+94] ; 与结果比较
00442F67 JE 004430AD ; 想的则跳--至少有一个,同上
00442F6D INC EAX ; j++
00442F6E CMP EAX,10
00442F71 JL SHORT 00442F60
00442F73 INC ECX ; i++
00442F74 CMP ECX,EBX
00442F76 JL SHORT 00442F50
……
004430AD XOR ECX,ECX ; i=0
004430AF NOP
004430B0 MOV DL,BYTE PTR SS:[ESP+ECX+68] ; 读取第四段第i位
004430B4 XOR EAX,EAX ; j=0
004430B6 JMP SHORT 004430C0
004430B8 LEA ESP,DWORD PTR SS:[ESP]
004430BF NOP
004430C0 CMP DL,BYTE PTR SS:[ESP+EAX+94] ; 比较
004430C7 JE 0044320D ; 至少有一个,同上
004430CD INC EAX ; j++
004430CE CMP EAX,10
004430D1 JL SHORT 004430C0
004430D3 INC ECX ; i++
004430D4 CMP ECX,EBX
004430D6 JL SHORT 004430B0
……
0044320D XOR ECX,ECX ; i=0
0044320F NOP
00443210 MOV DL,BYTE PTR SS:[ESP+ECX+70] ; 读取第五段中的第i位
00443214 XOR EAX,EAX ; j=0
00443216 JMP SHORT 00443220
00443218 LEA ESP,DWORD PTR SS:[ESP]
0044321F NOP
00443220 CMP DL,BYTE PTR SS:[ESP+EAX+94] ; 比较
00443227 JE 0044336D ; 至少有一个,同上
0044322D INC EAX ; j++
0044322E CMP EAX,10
00443231 JL SHORT 00443220
00443233 INC ECX ; i++
00443234 CMP ECX,EBX
00443236 JL SHORT 00443210
……
0044336D XOR ECX,ECX ; i=0
0044336F NOP
00443370 MOV DL,BYTE PTR SS:[ESP+ECX+80] ; 读取第六段中的第i位
00443377 XOR EAX,EAX ; j=0
00443379 LEA ESP,DWORD PTR SS:[ESP]
00443380 CMP DL,BYTE PTR SS:[ESP+EAX+94] ; 比较
00443387 JE 004434CD ; 至少有一个,同上
0044338D INC EAX ; j++
0044338E CMP EAX,10
00443391 JL SHORT 00443380
00443393 INC ECX ; i++
00443394 CMP ECX,EBX
00443396 JL SHORT 00443370
……
十、三次检测
004434CD PUSH EBX
004434CE LEA ECX,DWORD PTR SS:[ESP+7C] ; 第二段数据
004434D2 CALL 00441FE0 ; 求和
004434D7 PUSH EBX
004434D8 LEA ECX,DWORD PTR SS:[ESP+70] ; 第四段数据
004434DC MOV ESI,EAX ; 二段和
004434DE CALL 00441FE0 ; 求和
004434E3 PUSH EBX
004434E4 LEA ECX,DWORD PTR SS:[ESP+7C] ; 第五段数据
004434E8 MOV EDI,EAX ; 四段和
004434EA CALL 00441FE0 ; 求和
004434EF ADD ESP,0C
004434F2 CMP ESI,64 ; 二段和与0x64比较
004434F5 JG 0044379B ; 大于则跳
004434FB CMP ESI,EDI ; 二段和与四段和比较
004434FD JL 0044379B ; 小于则跳
00443503 CMP EDI,EAX ; 四段和与五段和比较
00443505 JL 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--无限期
|
评分
-
查看全部评分
|