****精灵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
---------------------------------------------------------------------------------------------------------
如果兄弟(姐妹)知道这个软件的名称,还请“沉默是金”!
毕竟我们要体谅下软件作者挑灯夜战,劳心费力的劳动,尊重他的劳动成果,尊重作者的版权!
谢谢! 谢谢分享。 很好,很强大的算法。 看看了。。。。。 分析的很详细 感谢楼主分享!学习!!支持!!! 本帖最后由 GGLHY 于 2011-3-9 16:43 编辑
改正了一个导致出错的地方! 汗一个!看来半夜的时候大脑确实不如白天好用啊 谢谢分享!!! 谢谢了。
楼主辛苦了。 顶一下 哈哈··