GGLHY 发表于 2011-3-7 01:26:07

****精灵V3.2版的注册算法分析实录 by GGLHY

本帖最后由 GGLHY 于 2012-3-16 12:52 编辑

****精灵V3.2版的注册算法分析实录 by GGLHY


    因工作需要接触到这个软件,顺便看了下它的注册算法流程,相对来说还是比较简单的!


好,咱直奔主题,软件注册后有重启验证,直接来到:
004135DE|.E8 461B0000   CALL SuperPro.00415129          ;重启验证CALL,F7进去哦!
004135E3|.85C0          TEST EAX,EAX                           ;EAX的值很关键!!!
004135E5|.74 0F         JE SHORT SuperPro.004135F6               ;跳就是未注册版本
004135E7|.C705 9CE74600>MOV DWORD PTR DS:,0            ;全局变量
004135F1|.E9 26030000   JMP SuperPro.0041391C
004135F6|>8B8D 64FBFFFF MOV ECX,DWORD PTR SS:
004135DE| CALL SuperPro.00415129                         ;重启验证CALL,F7进去哦!00415129/$55            PUSH EBP
0041512A|.8BEC          MOV EBP,ESP
0041512C|.83EC 28       SUB ESP,28
0041512F|.894D D8       MOV DWORD PTR SS:,ECX
00415132|.C745 EC 00000>MOV DWORD PTR SS:,0            ;注意这里,局部变量赋值为0!
(省略部分代码)
0041517F|.68 B0EA4600   PUSH SuperPro.0046EAB0                   ; |RegSerial读取注册表中保存的注册码
00415184|.8B4D E8       MOV ECX,DWORD PTR SS:            ; |
00415187|.51            PUSH ECX                                 ; |hKey
00415188|.FF15 10E04500 CALL DWORD PTR DS:[<&ADVAPI32.RegQueryVa>; \RegQueryValueExA
0041518E|.8945 E0       MOV DWORD PTR SS:,EAX
00415191|.837D E0 00    CMP DWORD PTR SS:,0
00415195|.74 07         JE SHORT SuperPro.0041519E               ;若注册码为空则局部变量还为0
00415197|.33C0          XOR EAX,EAX
00415199|.E9 8D000000   JMP SuperPro.0041522B                  ;为零则跳过注册码验证环节!
0041519E|>C745 E4 00000>MOV DWORD PTR SS:,0
004151A5|.EB 09         JMP SHORT SuperPro.004151B0
004151A7|>8B55 E4       /MOV EDX,DWORD PTR SS:
004151AA|.83C2 01       |ADD EDX,1
004151AD|.8955 E4       |MOV DWORD PTR SS:,EDX
004151B0|>837D E4 14   CMP DWORD PTR SS:,14            ; 保存的假码长度与14H比较!
004151B4|.7D 17         |JGE SHORT SuperPro.004151CD
004151B6|.8B45 D8       |MOV EAX,DWORD PTR SS:
004151B9|.0345 E4       |ADD EAX,DWORD PTR SS:
004151BC|.8B4D E4       |MOV ECX,DWORD PTR SS:
004151BF|.8A90 C4000000 |MOV DL,BYTE PTR DS:             ; 依次取保存的假码每一位ASC
004151C5|.8891 10334700 |MOV BYTE PTR DS:,DL
004151CB|.^ EB DA         \JMP SHORT SuperPro.004151A7
004151CD|>C605 24334700>MOV BYTE PTR DS:,0               ;
004151D4|.68 10334700   PUSH SuperPro.00473310                   ; /读取保存的注册码
004151D9|.8B4D D8       MOV ECX,DWORD PTR SS:         ; |
004151DC|.E8 0F140000   CALL SuperPro.004165F0          ; \算法核心!接着F7
004151E1|.8945 EC       MOV DWORD PTR SS:,EAX
004151E4|.C745 FC 00000>MOV DWORD PTR SS:,0               ;这里,还有个局部变量置0
004151EB|.837D EC 00    CMP DWORD PTR SS:,0
004151EF|.74 07         JE SHORT SuperPro.004151F8
004151F1|.C745 FC 01000>MOV DWORD PTR SS:,1               ;注意看这里,赋值为1
004151F8|>6A 04         PUSH 4                                 ; /BufSize = 4
004151FA|.8D45 FC       LEA EAX,DWORD PTR SS:             ; |
004151FD|.50            PUSH EAX                                 ; |Buffer
004151FE|.6A 04         PUSH 4                                 ; |ValueType = REG_DWORD
00415200|.6A 00         PUSH 0                                 ; |Reserved = 0
00415202|.68 BCEA4600   PUSH SuperPro.0046EABC                   ; |syswell
00415207|.8B4D E8       MOV ECX,DWORD PTR SS:            ; |
0041520A|.51            PUSH ECX                                 ; |hKey
0041520B|.FF15 14E04500 CALL DWORD PTR DS:[<&ADVAPI32.RegSetValu>; \RegSetValueExA
00415211|.8945 F8       MOV DWORD PTR SS:,EAX
00415214|.837D F8 00    CMP DWORD PTR SS:,0
00415218|.74 04         JE SHORT SuperPro.0041521E
0041521A|.33C0          XOR EAX,EAX
0041521C|.EB 0D         JMP SHORT SuperPro.0041522B
0041521E|>8B55 E8       MOV EDX,DWORD PTR SS:
00415221|.52            PUSH EDX                                 ; /hKey
00415222|.FF15 00E04500 CALL DWORD PTR DS:[<&ADVAPI32.RegCloseKe>; \RegCloseKey
00415228|.8B45 EC       MOV EAX,DWORD PTR SS:            ;这里局部变量很关键,赋值给EAX。可以放C-4了!哈哈
0041522B|>8BE5          MOV ESP,EBP
0041522D|.5D            POP EBP
0041522E\.C3            RETN
004151DC| CALL SuperPro.004165F0                     ; \算法核心!接着F7004165F0/$55            PUSH EBP
004165F1|.8BEC          MOV EBP,ESP
004165F3|.6A FF         PUSH -1
004165F5|.68 3CAC4500   PUSH SuperPro.0045AC3C                   ;SE 处理程序安装
004165FA|.64:A1 0000000>MOV EAX,DWORD PTR FS:
00416600|.50            PUSH EAX
00416601|.64:8925 00000>MOV DWORD PTR FS:,ESP
00416608|.81EC 8C000000 SUB ESP,8C
0041660E|.898D 68FFFFFF MOV DWORD PTR SS:,ECX
00416614|.C745 F0 01000>MOV DWORD PTR SS:,1
0041661B|.C785 78FFFFFF>MOV DWORD PTR SS:,0
00416625|.EB 0F         JMP SHORT SuperPro.00416636
00416627|>8B85 78FFFFFF /MOV EAX,DWORD PTR SS:
0041662D|.83C0 01       |ADD EAX,1
00416630|.8985 78FFFFFF |MOV DWORD PTR SS:,EAX
00416636|>B9 40314700    MOV ECX,SuperPro.00473140               ;机器码
0041663B|.E8 50B6FEFF   |CALL SuperPro.00401C90
00416640|.3985 78FFFFFF |CMP DWORD PTR SS:,EAX
00416646|.7D 1D         |JGE SHORT SuperPro.00416665             ;机器码是否取完
00416648|.8B8D 78FFFFFF |MOV ECX,DWORD PTR SS:
0041664E|.51            |PUSH ECX                              ; /Arg1
0041664F|.B9 40314700   |MOV ECX,SuperPro.00473140               ; |
00416654|.E8 5733FFFF   |CALL SuperPro.004099B0                  ; \SuperPro.004099B0
00416659|.8B95 78FFFFFF |MOV EDX,DWORD PTR SS:         ;机器码
0041665F|.884415 D8   |MOV BYTE PTR SS:,AL         ;依次取机器码每一位ASC
00416663|.^ EB C2         \JMP SHORT SuperPro.00416627
00416665|>EB 0F         JMP SHORT SuperPro.00416676
00416667|>8B85 78FFFFFF /MOV EAX,DWORD PTR SS:
0041666D|.83C0 01       |ADD EAX,1
00416670|.8985 78FFFFFF |MOV DWORD PTR SS:,EAX
00416676|>83BD 78FFFFFF> CMP DWORD PTR SS:,14            ;机器码长度不小于20位吗?
0041667D|.7D 15         |JGE SHORT SuperPro.00416694
0041667F|.8B8D 78FFFFFF |MOV ECX,DWORD PTR SS:
00416685|.83C1 41       |ADD ECX,41
00416688|.8B95 78FFFFFF |MOV EDX,DWORD PTR SS:
0041668E|.884C15 D8   |MOV BYTE PTR SS:,CL
00416692|.^ EB D3         \JMP SHORT SuperPro.00416667
00416694|>8D45 80       LEA EAX,DWORD PTR SS:
00416697|.50            PUSH EAX                                 ; /Arg1
00416698|.E8 3085FFFF   CALL SuperPro.0040EBCD                   ; \机器码MD5运算,结果设为S1
0041669D|.83C4 04       ADD ESP,4
004166A0|.6A 14         PUSH 14                                  ; /Arg3 = 00000014
004166A2|.8D4D D8       LEA ECX,DWORD PTR SS:            ; 机器码
004166A5|.51            PUSH ECX                                 ; |Arg2
004166A6|.8D55 80       LEA EDX,DWORD PTR SS:            ; |
004166A9|.52            PUSH EDX                                 ; |Arg1
004166AA|.E8 5E85FFFF   CALL SuperPro.0040EC0D                   ; \SuperPro.0040EC0D
004166AF|.83C4 0C       ADD ESP,0C
004166B2|.8D45 80       LEA EAX,DWORD PTR SS:
004166B5|.50            PUSH EAX                                 ; /Arg2
004166B6|.8D8D 74FFFFFF LEA ECX,DWORD PTR SS:            ; |
004166BC|.51            PUSH ECX                                 ; |Arg1
004166BD|.E8 1F8DFFFF   CALL SuperPro.0040F3E1                   ; \SuperPro.0040F3E1
004166C2|.83C4 08       ADD ESP,8
004166C5|.C745 FC 00000>MOV DWORD PTR SS:,0
004166CC|.6A 00         PUSH 0                                 ; /第一位
004166CE|.8D8D 74FFFFFF LEA ECX,DWORD PTR SS:            ; |
004166D4|.E8 D732FFFF   CALL SuperPro.004099B0                   ; \SuperPro.004099B0
004166D9|.8845 D8       MOV BYTE PTR SS:,AL            ;S1第一位取代机器码第一位
004166DC|.6A 04         PUSH 4                                 ; /第5位
004166DE|.8D8D 74FFFFFF LEA ECX,DWORD PTR SS:            ; |
004166E4|.E8 C732FFFF   CALL SuperPro.004099B0                   ; \SuperPro.004099B0
004166E9|.8845 DC       MOV BYTE PTR SS:,AL            ;S1第5位取代机器码第5位
004166EC|.6A 06         PUSH 6                                 ; /第7位
004166EE|.8D8D 74FFFFFF LEA ECX,DWORD PTR SS:            ; |
004166F4|.E8 B732FFFF   CALL SuperPro.004099B0                   ; \SuperPro.004099B0
004166F9|.8845 DE       MOV BYTE PTR SS:,AL            ;S1第7位取代机器码第7位
004166FC|.6A 0C         PUSH 0C                                  ; /第13位
004166FE|.8D8D 74FFFFFF LEA ECX,DWORD PTR SS:            ; |
00416704|.E8 A732FFFF   CALL SuperPro.004099B0                   ; \SuperPro.004099B0
00416709|.8845 E4       MOV BYTE PTR SS:,AL            ;S1第13位取代机器码第13位
0041670C|.C785 7CFFFFFF>MOV DWORD PTR SS:,0            ;机器码变形完毕,设为Q
00416716|.EB 0F         JMP SHORT SuperPro.00416727
**** Hidden Message *****
004167B6|>^ E9 5DFFFFFF   \JMP SuperPro.00416718                   ;循环结束,得到再次变形后的机器码,设为P
004167BB|>8A55 D9       MOV DL,BYTE PTR SS:            ;P的第2位
004167BE|.8855 EC       MOV BYTE PTR SS:,DL            
004167C1|.8A45 DE       MOV AL,BYTE PTR SS:            ;P的第7位
004167C4|.8845 D9       MOV BYTE PTR SS:,AL            ;P的第7位替换P的第2位
004167C7|.8A4D EC       MOV CL,BYTE PTR SS:            ;P的第2位
004167CA|.884D DE       MOV BYTE PTR SS:,CL            ;P的第2位替换P的第7位
004167CD|.8A55 DB       MOV DL,BYTE PTR SS:            ;P的第4位(X)
004167D0|.8855 EC       MOV BYTE PTR SS:,DL            ;P的第4位
004167D3|.8A45 E2       MOV AL,BYTE PTR SS:            ;P的第11位
004167D6|.8845 DB       MOV BYTE PTR SS:,AL            ;P的第11位替换P的第4位
004167D9|.8A4D EC       MOV CL,BYTE PTR SS:            ;P的第4位
004167DC|.884D E2       MOV BYTE PTR SS:,CL            ;P的第4位替换P的第11位
004167DF|.8A55 DD       MOV DL,BYTE PTR SS:            ;P的第6位
004167E2|.8855 EC       MOV BYTE PTR SS:,DL            ;P的第6位
004167E5|.8A45 E4       MOV AL,BYTE PTR SS:            ;P的第13位
004167E8|.8845 DD       MOV BYTE PTR SS:,AL            ;P的第13位替换P的第6位
004167EB|.8A4D EC       MOV CL,BYTE PTR SS:            ;P的第6位
004167EE|.884D E4       MOV BYTE PTR SS:,CL            ;P的第6位替换P的第13位
004167F1|.8A55 DF       MOV DL,BYTE PTR SS:            ;P的第8位
004167F4|.8855 EC       MOV BYTE PTR SS:,DL
004167F7|.8A45 E6       MOV AL,BYTE PTR SS:            ;P的第15位
004167FA|.8845 DF       MOV BYTE PTR SS:,AL            ;P的第15位替换P的第8位
004167FD|.8A4D EC       MOV CL,BYTE PTR SS:            ;P的第8位
00416800|.884D E6       MOV BYTE PTR SS:,CL            ;P的第8位替换P的第15位
00416803|.8A55 E1       MOV DL,BYTE PTR SS:            ;P的第10位
00416806|.8855 EC       MOV BYTE PTR SS:,DL
00416809|.8A45 E5       MOV AL,BYTE PTR SS:            ;P的第14位
0041680C|.8845 E1       MOV BYTE PTR SS:,AL            ;P的第14位替换第10位
0041680F|.8A4D EC       MOV CL,BYTE PTR SS:            ;P的第10位
00416812|.884D E5       MOV BYTE PTR SS:,CL            ;P的第10位替换第14位
00416815|.C785 78FFFFFF>MOV DWORD PTR SS:,0            ;P再次变形,设为M
0041681F|.EB 0F         JMP SHORT SuperPro.00416830
00416821|>8B95 78FFFFFF /MOV EDX,DWORD PTR SS:
00416827|.83C2 01       |ADD EDX,1
0041682A|.8995 78FFFFFF |MOV DWORD PTR SS:,EDX
00416830|>83BD 78FFFFFF> CMP DWORD PTR SS:,10            ;暂时只比较M前16位
00416837|.7D 45         |JGE SHORT SuperPro.0041687E
00416839|.8B45 08       |MOV EAX,DWORD PTR SS:            ;假码
0041683C|.0385 78FFFFFF |ADD EAX,DWORD PTR SS:
00416842|.0FBE08      |MOVSX ECX,BYTE PTR DS:             ;依次取假码每一位ASC
00416845|.8B95 78FFFFFF |MOV EDX,DWORD PTR SS:
0041684B|.33C0          |XOR EAX,EAX
0041684D|.8A4415 D8   |MOV AL,BYTE PTR SS:         ;依次取M的每一位
00416851|.3BC8          |CMP ECX,EAX                           ;比较!
00416853|.74 27         |JE SHORT SuperPro.0041687C            ;必须跳,否则挂了!   
00416855|.C785 70FFFFFF>|MOV DWORD PTR SS:,0
0041685F|.C745 FC FFFFF>|MOV DWORD PTR SS:,-1
00416866|.8D8D 74FFFFFF |LEA ECX,DWORD PTR SS:
0041686C|.E8 AB200400   |CALL <JMP.&MFC42.#800>
00416871|.8B85 70FFFFFF |MOV EAX,DWORD PTR SS:
00416877|.E9 5F010000   |JMP SuperPro.004169DB
0041687C|>^ EB A3         \JMP SHORT SuperPro.00416821
0041687E|>6A 1E         PUSH 1E                                  ; /S1的第31位ASC
00416880|.8D8D 74FFFFFF LEA ECX,DWORD PTR SS:            ; |
00416886|.E8 2531FFFF   CALL SuperPro.004099B0                   ; \SuperPro.004099B0
0041688B|.A2 A0E74600   MOV BYTE PTR DS:,AL            ;第31位的asc到
00416890|.6A 0A         PUSH 0A                                  ; /S1的asc第11位
00416892|.8D8D 74FFFFFF LEA ECX,DWORD PTR SS:            ; |
00416898|.E8 1331FFFF   CALL SuperPro.004099B0                   ; \SuperPro.004099B0
0041689D|.A2 A1E74600   MOV BYTE PTR DS:,AL            ;S1的第11位asc到:
004168A2|.6A 06         PUSH 6                                 ; /S1的第7位
004168A4|.8D8D 74FFFFFF LEA ECX,DWORD PTR SS:            ; |
004168AA|.E8 0131FFFF   CALL SuperPro.004099B0                   ; \SuperPro.004099B0
004168AF|.A2 09334700   MOV BYTE PTR DS:,AL            ;S1的第7位asc到
004168B4|.6A 04         PUSH 4                                 ; /S1的第5位
004168B6|.8D8D 74FFFFFF LEA ECX,DWORD PTR SS:            ; |
004168BC|.E8 EF30FFFF   CALL SuperPro.004099B0                   ; \SuperPro.004099B0
004168C1|.A2 08334700   MOV BYTE PTR DS:,AL            ;S1的第5位ASC到
004168C6|.33C9          XOR ECX,ECX
004168C8|.8A0D A0E74600 MOV CL,BYTE PTR DS:            ;S1的第31位
004168CE|.83F9 61       CMP ECX,61                               ;S1的第31位asc与61比较
004168D1|.7C 19         JL SHORT SuperPro.004168EC               ;小则跳
004168D3|.33D2          XOR EDX,EDX
004168D5|.8A15 A0E74600 MOV DL,BYTE PTR DS:            ;第31位ASC
004168DB|.83FA 7A       CMP EDX,7A                               ;:7A(z)
004168DE|.7F 0C         JG SHORT SuperPro.004168EC               ;大则跳(判断是否小写字母)
004168E0|.A0 A0E74600   MOV AL,BYTE PTR DS:            ;第31位ASC
004168E5|.2C 20         SUB AL,20                              ;转大写字母
004168E7|.A2 A0E74600   MOV BYTE PTR DS:,AL            ;第31位转成大写
004168EC|>33C9          XOR ECX,ECX
004168EE|.8A0D A1E74600 MOV CL,BYTE PTR DS:            ;S1的第11位asc
004168F4|.83F9 61       CMP ECX,61                               ;流程同上
004168F7|.7C 19         JL SHORT SuperPro.00416912
004168F9|.33D2          XOR EDX,EDX
004168FB|.8A15 A1E74600 MOV DL,BYTE PTR DS:
00416901|.83FA 7A       CMP EDX,7A
00416904|.7F 0C         JG SHORT SuperPro.00416912
00416906|.A0 A1E74600   MOV AL,BYTE PTR DS:
0041690B|.2C 20         SUB AL,20
0041690D|.A2 A1E74600   MOV BYTE PTR DS:,AL            ;S1的第11位转为大写
00416912|>33C9          XOR ECX,ECX
00416914|.8A0D 09334700 MOV CL,BYTE PTR DS:            ;S1的第7位asc
0041691A|.83F9 61       CMP ECX,61                               ;流程同上
0041691D|.7C 19         JL SHORT SuperPro.00416938
0041691F|.33D2          XOR EDX,EDX
00416921|.8A15 09334700 MOV DL,BYTE PTR DS:
00416927|.83FA 7A       CMP EDX,7A
0041692A|.7F 0C         JG SHORT SuperPro.00416938
0041692C|.A0 09334700   MOV AL,BYTE PTR DS:
00416931|.2C 20         SUB AL,20
00416933|.A2 09334700   MOV BYTE PTR DS:,AL            ;S1的第7位转为大写
00416938|>33C9          XOR ECX,ECX
0041693A|.8A0D 08334700 MOV CL,BYTE PTR DS:            ;S1的第5位ASC
00416940|.83F9 61       CMP ECX,61                               ;流程同上
00416943|.7C 19         JL SHORT SuperPro.0041695E               ;本例为35,跳了
00416945|.33D2          XOR EDX,EDX
00416947|.8A15 08334700 MOV DL,BYTE PTR DS:
0041694D|.83FA 7A       CMP EDX,7A
00416950|.7F 0C         JG SHORT SuperPro.0041695E
00416952|.A0 08334700   MOV AL,BYTE PTR DS:
00416957|.2C 20         SUB AL,20
00416959|.A2 08334700   MOV BYTE PTR DS:,AL
0041695E|>33C9          XOR ECX,ECX
00416960|.8A0D A0E74600 MOV CL,BYTE PTR DS:            ;第31位大写
00416966|.8B55 08       MOV EDX,DWORD PTR SS:             ;假码
00416969|.0FBE42 10   MOVSX EAX,BYTE PTR DS:         ;假码第17位
0041696D|.3BC8          CMP ECX,EAX                              ;第31位大写:假码第17位
0041696F|.75 42         JNZ SHORT SuperPro.004169B3            ;不等就挂了!
00416971|.33C9          XOR ECX,ECX
00416973|.8A0D A1E74600 MOV CL,BYTE PTR DS:            ;S1的第11位大写
00416979|.8B55 08       MOV EDX,DWORD PTR SS:
0041697C|.0FBE42 11   MOVSX EAX,BYTE PTR DS:         ;假码第18位
00416980|.3BC8          CMP ECX,EAX                              ;S1的第11位大写:假码第18位
00416982|.75 2F         JNZ SHORT SuperPro.004169B3            ;不等就挂了!
00416984|.33C9          XOR ECX,ECX
00416986|.8A0D 09334700 MOV CL,BYTE PTR DS:            ;S1的第7位大写
0041698C|.8B55 08       MOV EDX,DWORD PTR SS:
0041698F|.0FBE42 12   MOVSX EAX,BYTE PTR DS:         ;假码第19位
00416993|.3BC8          CMP ECX,EAX                              ;S1的第7位大写:假码第19位
00416995|.75 1C         JNZ SHORT SuperPro.004169B3            ;不等就挂了!
00416997|.33C9          XOR ECX,ECX
00416999|.8A0D 08334700 MOV CL,BYTE PTR DS:            ;S1的第5位
0041699F|.8B55 08       MOV EDX,DWORD PTR SS:
004169A2|.0FBE42 13   MOVSX EAX,BYTE PTR DS:         ;假码第20位
004169A6|.3BC8          CMP ECX,EAX                              ;S1的第5位:假码第20位
004169A8|.75 09         JNZ SHORT SuperPro.004169B3            ;不等就挂了!
004169AA|.C745 F0 01000>MOV DWORD PTR SS:,1            ;注意这个局部变量赋值为1
004169B1|.EB 07         JMP SHORT SuperPro.004169BA
004169B3|>C745 F0 00000>MOV DWORD PTR SS:,0            ;跳到这里则置0,放炸药!
004169BA|>8B4D F0       MOV ECX,DWORD PTR SS:            ;这里接着改成004169b1处的命令
004169BD|.898D 6CFFFFFF MOV DWORD PTR SS:,ECX
004169C3|.C745 FC FFFFF>MOV DWORD PTR SS:,-1
004169CA|.8D8D 74FFFFFF LEA ECX,DWORD PTR SS:
004169D0|.E8 471F0400   CALL <JMP.&MFC42.#800>
004169D5|.8B85 6CFFFFFF MOV EAX,DWORD PTR SS:
004169DB|>8B4D F4       MOV ECX,DWORD PTR SS:
004169DE|.64:890D 00000>MOV DWORD PTR FS:,ECX
004169E5|.8BE5          MOV ESP,EBP
004169E7|.5D            POP EBP
004169E8\.C2 0400       RETN 4
============================================================================================================
ok,咱总结下这软件的算法:
1.取机器码的MD5(小写),结果设为S1。
本例为41c85dfd56b43e75774a2a5cc65b2bc8
2.取S1的第1、5、7、13位取代机器码相应位置上的字符。得到变形机器码,设为Q;
3.**** Hidden Message *****
4.P按照下列方式再次转换:
    P的第2和第7位互换;
    P的第4和第11位互换;
    P的第6和第13位互换;
    P的第8和第15位互换;
    P的第10和第14位互换;
P再次变形,设为M
5.取S1的第31、11、7、5位(如果是小写字母则转大写)分别取代:
    M的第17、18、19、20位。
(还记得先前暂时只比较了16位吗?现在齐活了!)



注册信息保存在:
**** Hidden Message *****

删除变回未注册版!
=================================================================================================



另(一):
-----------------------------------------------------------------------------------------------
S1的来历:
00416698|.E8 3085FFFF   CALL SuperPro.0040EBCD      ; \机器码MD5运算,咱进来看看就清楚了!
0040EBCD/$55            PUSH EBP
0040EBCE|.8BEC          MOV EBP,ESP
0040EBD0|.8B45 08       MOV EAX,DWORD PTR SS:
0040EBD3|.C740 14 00000>MOV DWORD PTR DS:,0
0040EBDA|.8B4D 08       MOV ECX,DWORD PTR SS:
0040EBDD|.C741 10 00000>MOV DWORD PTR DS:,0
0040EBE4|.8B55 08       MOV EDX,DWORD PTR SS:
0040EBE7|.C702 01234567 MOV DWORD PTR DS:,67452301      标准的MD5!
0040EBED|.8B45 08       MOV EAX,DWORD PTR SS:
0040EBF0|.C740 04 89ABC>MOV DWORD PTR DS:,EFCDAB89
0040EBF7|.8B4D 08       MOV ECX,DWORD PTR SS:
0040EBFA|.C741 08 FEDCB>MOV DWORD PTR DS:,98BADCFE
0040EC01|.8B55 08       MOV EDX,DWORD PTR SS:
0040EC04|.C742 0C 76543>MOV DWORD PTR DS:,10325476
0040EC0B|.5D            POP EBP
0040EC0C\.C3            RETN
---------------------------------------------------------------------------------------------------



另(二):
--------------------------------------------------------------------------------------------------
关于全局变量,再看看这里:
004135E7|.C705 9CE74600>MOV DWORD PTR DS:,0            ;全局变量!
参考位于 SuperPro:.text 到 0046E79C
地址       反汇编                                    注释
0040150D   CMP DWORD PTR DS:,0               DS:=00000001
0040C0A5   CMP DWORD PTR DS:,0               DS:=00000001
004122F4   CMP DWORD PTR DS:,0               DS:=00000001
004135E7   MOV DWORD PTR DS:,0               (初始 CPU 选择)
00413CAC   CMP DWORD PTR DS:,0               DS:=00000001
00416B79   CMP DWORD PTR DS:,0               DS:=00000001

看来是的哈。好几处呢!比如:
00416B79|.833D 9CE74600>CMP DWORD PTR DS:,0
00416B80|.74 1F         JE SHORT SuperPro.00416BA1
00416B82|.D905 74EC4600 FLD DWORD PTR DS:
00416B88|.83EC 08       SUB ESP,8
00416B8B|.DD1C24      FSTP QWORD PTR SS:
00416B8E|.68 94EC4600   PUSH SuperPro.0046EC94                   ;****精灵 V%.1f(未注册)
00416B93|.8D45 F0       LEA EAX,DWORD PTR SS:
00416B96|.50            PUSH EAX
00416B97|.E8 B8210400   CALL <JMP.&MFC42.#2818>
00416B9C|.83C4 10       ADD ESP,10
00416B9F|.EB 1D         JMP SHORT SuperPro.00416BBE
00416BA1|>D905 74EC4600 FLD DWORD PTR DS:
00416BA7|.83EC 08       SUB ESP,8
00416BAA|.DD1C24      FSTP QWORD PTR SS:
00416BAD|.68 B0EC4600   PUSH SuperPro.0046ECB0                   ;****精灵 V%.1f

又比如:
00413CA5/.55            PUSH EBP
00413CA6|.8BEC          MOV EBP,ESP
00413CA8|.51            PUSH ECX
00413CA9|.894D FC       MOV DWORD PTR SS:,ECX
00413CAC|.833D 9CE74600>CMP DWORD PTR DS:,0
00413CB3|.75 19         JNZ SHORT SuperPro.00413CCE
00413CB5|.68 FCE84600   PUSH SuperPro.0046E8FC                   ;您已经获得了注册版,已没有任何使用限制!\n感谢您的支持和购买!
00413CBA|.68 0E040000   PUSH 40E
---------------------------------------------------------------------------------------------------------











如果兄弟(姐妹)知道这个软件的名称,还请“沉默是金”!
毕竟我们要体谅下软件作者挑灯夜战,劳心费力的劳动,尊重他的劳动成果,尊重作者的版权!
谢谢!

qqq1001 发表于 2011-3-7 22:41:30

谢谢分享。

Lsyq5647 发表于 2011-3-8 09:20:28

很好,很强大的算法。

漏网小鱼 发表于 2011-3-8 14:53:10

看看了。。。。。

clw 发表于 2011-3-9 07:51:49

分析的很详细

ZHOU2X 发表于 2011-3-9 08:50:47

感谢楼主分享!学习!!支持!!!

GGLHY 发表于 2011-3-9 13:04:38

本帖最后由 GGLHY 于 2011-3-9 16:43 编辑

改正了一个导致出错的地方! 汗一个!看来半夜的时候大脑确实不如白天好用啊

lxcjy 发表于 2011-3-10 12:06:30

谢谢分享!!!

lcy925 发表于 2011-3-10 12:38:10

谢谢了。
楼主辛苦了。

kalahan 发表于 2011-3-10 16:23:43

顶一下 哈哈··
页: [1] 2 3 4 5 6
查看完整版本: ****精灵V3.2版的注册算法分析实录 by GGLHY