| 
注册时间2006-2-27
阅读权限40
最后登录1970-1-1UID8671 独步武林  
 
 TA的每日心情|  | 开心 2018-5-6 16:27
 | 
|---|
 签到天数: 7 天 [LV.3]偶尔看看II | 
 
| 【破文标题】KeyMake编写算法注册机之〖KeyGen For 钢琴曲大全 1.03〗 【破文作者】WildCatIII[D.4s][PYG]
 【特别感谢】萧萧黄叶兄弟用易语言写了这个程序的KeyGen,本人抱着试试的态度而完成的这个汇编语言算法注册机,希望大家喜欢。在此感谢萧萧黄叶兄弟。
 【破解工具】PEiD,OD,KeyMake
 【破解平台】Windows XP
 【软件名称】钢琴曲大全 1.03安装目录下的musicreg.exe
 【软件大小】900KB
 【原版下载】http://www.onlinedown.net/soft/69913.htm
 【保护方式】注册码
 【软件简介】钢琴曲大全(钢琴音乐大辞典)收集了从文艺复兴时期到现代3490首经典(古典)钢琴音乐、钢琴曲,并收集整理了作曲家、演奏家、写作年份、曲目类型、作品号,有清晰明了的目录(作曲家、演奏家、写作年份、曲目类型、作品号)、作曲家生平、中文与原文对照,非常方便的查询搜索系统能快速的查找作曲家、演奏家、写作年份、曲目类型、作品号。播放系统可以单/多首连续循环播放。试用版的曲库只有**的德国组曲中BWV.825下面的6个乐章!
 【破解声明】我是一只小菜鸟,偶得一点心得,愿与大家分享:)
 ------------------------------------------------------------------------
 【破解过程】一、PEiD查无壳,用OD载入运行,输入机器码:ZXB-0001,假码:987点确定,软件报错。返回OD,F12暂停程序,观察到堆栈窗口友好提示:
 0012FD60  |0042923E  返回到 musicreg.0042923E 来自 musicreg.00429148
 0012FD64  |FFFFFFFF
 0012FD68  |FFFFFFFF
 0012FD6C  |00000000
 0012FD70  |0042922B  返回到 musicreg.0042922B 来自 musicreg.0042922C
 0012FD74  |00481E14  返回到 musicreg.00481E14 来自 musicreg.00429220 //在这里返回
 0012FD78  |0012FDBC  指向下一个 SEH 记录的指针
 0012FD7C  |00481E49  SE处理程序
 0012FD80  |0012FDA4
 0012FD84  |00A6461C
 0012FD88  |00000000
 0012FD8C  |00000000
 0012FD90  |00A67214  ASCII "987"
 0012FD94  |00A6D728  ASCII "987"
 0012FD98  |00A6DC9C  ASCII "ZXB-0001"
 0012FD9C  |00A64C68  ASCII "987"
 0012FDA0  |00A6C9A8  ASCII "ZXB-0001"
 0012FDA4  ]0012FDD4
 0012FDA8  |004379FE  返回到 musicreg.004379FE
 返回到这里:
 00481E14  |> \33C0          XOR EAX,EAX   看到EAX清零的操作,应该上面就有一些相关注册的提示,往上看:
 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 00481D09  |.  55            PUSH EBP                                 ;  在这下断
 00481D0A  |.  68 491E4800   PUSH musicreg.00481E49
 00481D0F  |.  64:FF30       PUSH DWORD PTR FS:[EAX]
 00481D12  |.  64:8920       MOV DWORD PTR FS:[EAX],ESP
 00481D15  |.  8D55 F4       LEA EDX,DWORD PTR SS:[EBP-C]
 00481D18  |.  8B83 00030000 MOV EAX,DWORD PTR DS:[EBX+300]
 00481D1E  |.  E8 4147FBFF   CALL musicreg.00436464
 00481D23  |.  8B45 F4       MOV EAX,DWORD PTR SS:[EBP-C]             ;  机器码:ASCII "ZXB-0001"
 00481D26  |.  8D55 FC       LEA EDX,DWORD PTR SS:[EBP-4]
 00481D29  |.  E8 A662F8FF   CALL musicreg.00407FD4
 00481D2E  |.  8D55 F0       LEA EDX,DWORD PTR SS:[EBP-10]
 00481D31  |.  8B83 04030000 MOV EAX,DWORD PTR DS:[EBX+304]
 00481D37  |.  E8 2847FBFF   CALL musicreg.00436464
 00481D3C  |.  8B45 F0       MOV EAX,DWORD PTR SS:[EBP-10]            ;  假码:ASCII "987"
 00481D3F  |.  8D55 F8       LEA EDX,DWORD PTR SS:[EBP-8]
 00481D42  |.  E8 8D62F8FF   CALL musicreg.00407FD4
 00481D47  |.  8D55 EC       LEA EDX,DWORD PTR SS:[EBP-14]
 00481D4A  |.  8B83 04030000 MOV EAX,DWORD PTR DS:[EBX+304]
 00481D50  |.  E8 0F47FBFF   CALL musicreg.00436464
 00481D55  |.  837D EC 00    CMP DWORD PTR SS:[EBP-14],0
 00481D59  |.  75 0F         JNZ SHORT musicreg.00481D6A              ;  假码有没有输,有就跳。
 00481D5B  |.  B8 601E4800   MOV EAX,musicreg.00481E60
 00481D60  |.  E8 BB74FAFF   CALL musicreg.00429220
 00481D65  |.  E9 AA000000   JMP musicreg.00481E14
 00481D6A  |>  8B55 F8       MOV EDX,DWORD PTR SS:[EBP-8]             ;  跳来这,假码放EDX
 00481D6D  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]             ;  机器码放EAX
 00481D70  |.  E8 FFF8FFFF   CALL musicreg.00481674                   ;  关键CALL,跟进。
 00481D75  |.  84C0          TEST AL,AL
 00481D77  |.  0F84 8D000000 JE musicreg.00481E0A                     ;  注册成功否?
 00481D7D  |.  E8 3EF8FFFF   CALL musicreg.004815C0
 00481D82  |.  84C0          TEST AL,AL
 00481D84  |.  74 78         JE SHORT musicreg.00481DFE
 00481D86  |.  6A 04         PUSH 4
 00481D88  |.  68 701E4800   PUSH musicreg.00481E70
 00481D8D  |.  68 781E4800   PUSH musicreg.00481E78
 00481D92  |.  8BC3          MOV EAX,EBX
 00481D94  |.  E8 A7AEFBFF   CALL musicreg.0043CC40
 00481D99  |.  50            PUSH EAX                                 ; |hOwner
 00481D9A  |.  E8 C94BF8FF   CALL <JMP.&user32.MessageBoxA>           ; \MessageBoxA
 00481D9F  |.  83F8 06       CMP EAX,6
 00481DA2  |.  75 70         JNZ SHORT musicreg.00481E14
 00481DA4  |.  6A 01         PUSH 1
 00481DA6  |.  68 981E4800   PUSH musicreg.00481E98
 00481DAB  |.  68 981E4800   PUSH musicreg.00481E98
 00481DB0  |.  8D55 E4       LEA EDX,DWORD PTR SS:[EBP-1C]
 00481DB3  |.  A1 FC424800   MOV EAX,DWORD PTR DS:[4842FC]
 00481DB8  |.  8B00          MOV EAX,DWORD PTR DS:[EAX]
 00481DBA  |.  E8 F145FDFF   CALL musicreg.004563B0
 00481DBF  |.  8B45 E4       MOV EAX,DWORD PTR SS:[EBP-1C]
 00481DC2  |.  8D55 E8       LEA EDX,DWORD PTR SS:[EBP-18]
 00481DC5  |.  E8 8268F8FF   CALL musicreg.0040864C
 00481DCA  |.  8D45 E8       LEA EAX,DWORD PTR SS:[EBP-18]
 00481DCD  |.  BA A41E4800   MOV EDX,musicreg.00481EA4                ;  ASCII "music.exe"
 00481DD2  |.  E8 9924F8FF   CALL musicreg.00404270
 00481DD7  |.  8B45 E8       MOV EAX,DWORD PTR SS:[EBP-18]
 00481DDA  |.  E8 8926F8FF   CALL musicreg.00404468
 00481DDF  |.  50            PUSH EAX                                 ; |FileName
 00481DE0  |.  68 B01E4800   PUSH musicreg.00481EB0                   ; |Operation = "open"
 00481DE5  |.  E8 2E49F8FF   CALL <JMP.&user32.GetActiveWindow>       ; |[GetActiveWindow
 00481DEA  |.  50            PUSH EAX                                 ; |hWnd
 00481DEB  |.  E8 A461FAFF   CALL <JMP.&shell32.ShellExecuteA>        ; \ShellExecuteA
 00481DF0  |.  A1 FC424800   MOV EAX,DWORD PTR DS:[4842FC]
 00481DF5  |.  8B00          MOV EAX,DWORD PTR DS:[EAX]
 00481DF7  |.  E8 9040FDFF   CALL musicreg.00455E8C
 00481DFC  |.  EB 16         JMP SHORT musicreg.00481E14
 00481DFE  |>  B8 C01E4800   MOV EAX,musicreg.00481EC0
 00481E03  |.  E8 1874FAFF   CALL musicreg.00429220
 00481E08  |.  EB 0A         JMP SHORT musicreg.00481E14
 00481E0A  |>  B8 FC1E4800   MOV EAX,musicreg.00481EFC
 00481E0F  |.  E8 0C74FAFF   CALL musicreg.00429220
 00481E14  |>  33C0          XOR EAX,EAX                              ;  返回这里
 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 跟进算法CALL:
 +++++++++++++
 00481674  /$  55            PUSH EBP                                 ;  跟进关键CALL来到这里,接着分析。
 00481675  |.  8BEC          MOV EBP,ESP
 00481677  |.  B9 0A000000   MOV ECX,0A
 0048167C  |>  6A 00         /PUSH 0
 0048167E  |.  6A 00         |PUSH 0
 00481680  |.  49            |DEC ECX
 00481681  |.^ 75 F9         \JNZ SHORT musicreg.0048167C
 00481683  |.  53            PUSH EBX
 00481684  |.  56            PUSH ESI
 00481685  |.  57            PUSH EDI
 00481686  |.  8955 F8       MOV DWORD PTR SS:[EBP-8],EDX
 00481689  |.  8945 FC       MOV DWORD PTR SS:[EBP-4],EAX
 0048168C  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
 0048168F  |.  E8 C42DF8FF   CALL musicreg.00404458
 00481694  |.  8B45 F8       MOV EAX,DWORD PTR SS:[EBP-8]
 00481697  |.  E8 BC2DF8FF   CALL musicreg.00404458
 0048169C  |.  33C0          XOR EAX,EAX
 0048169E  |.  55            PUSH EBP                                 ;  这里F4一次略过上面代码。
 0048169F  |.  68 591A4800   PUSH musicreg.00481A59
 004816A4  |.  64:FF30       PUSH DWORD PTR FS:[EAX]
 004816A7  |.  64:8920       MOV DWORD PTR FS:[EAX],ESP
 004816AA  |.  33DB          XOR EBX,EBX
 004816AC  |.  8D45 F4       LEA EAX,DWORD PTR SS:[EBP-C]
 004816AF  |.  8B55 FC       MOV EDX,DWORD PTR SS:[EBP-4]             ;  机器码,KeyMake里可以先使用MOV [EBP-4],EAX把机器码放到[EBP-4]的位置,在这里才可以调用。
 004816B2  |.  E8 8929F8FF   CALL musicreg.00404040
 004816B7  |.  8B45 F4       MOV EAX,DWORD PTR SS:[EBP-C]             ;  机器码ASCII "ZXB-0001"
 004816BA  |.  E8 A92BF8FF   CALL musicreg.00404268
 004816BF  |.  8BF0          MOV ESI,EAX                              ;  位数放ESI
 004816C1  |.  85F6          TEST ESI,ESI                             ;  检测小于或等于0不,也就是判定机器码存在不。
 004816C3  |.  7E 33         JLE SHORT musicreg.004816F8              ;  有就不跳。
 004816C5  |.  BF 01000000   MOV EDI,1                                ;  初始EDI=1,接下来开始进入循环。
 004816CA  |>  8D45 E0       /LEA EAX,DWORD PTR SS:[EBP-20]
 004816CD  |.  50            |PUSH EAX
 004816CE  |.  B9 01000000   |MOV ECX,1                               ;  ECX=1
 004816D3  |.  8BD7          |MOV EDX,EDI                             ;  EDX=EDI
 004816D5  |.  8B45 F4       |MOV EAX,DWORD PTR SS:[EBP-C]            ;  机器码
 004816D8  |.  E8 EB2DF8FF   |CALL musicreg.004044C8
 004816DD  |.  8B45 E0       |MOV EAX,DWORD PTR SS:[EBP-20]
 004816E0  |.  E8 832DF8FF   |CALL musicreg.00404468
 004816E5  |.  8A00          |MOV AL,BYTE PTR DS:[EAX]                ;  逐位取ASCII,放到AL中
 004816E7  |.  25 FF000000   |AND EAX,0FF                             ;  EAX与0FFH,作用就是只保留AL的值,EAX前面的值清零
 004816EC  |.  03D8          |ADD EBX,EAX                             ;  EBX=EBX+EAX
 004816EE  |.  81C3 04040000 |ADD EBX,404                             ;  EBX=EBX+404H,由此可见EBX累加的是最终值
 004816F4  |.  47            |INC EDI                                 ;  指针开始指向下一位机器码
 004816F5  |.  4E            |DEC ESI                                 ;  ESI减一,作为这个循环的判断条件。
 004816F6  |.^ 75 D2         \JNZ SHORT musicreg.004816CA             ;  往回跳,直至循环完机器码才不跳。
 004816F8  |>  D1EB          SHR EBX,1                                ;  循环出来EBX=2202H,右移一位,也就是除以2,结果=1101H
 004816FA  |.  81F3 DA870C00 XOR EBX,0C87DA                           ;  EBX与0C87DAH异或,结果=0C96DBH
 00481700  |.  03DB          ADD EBX,EBX                              ;  EBX=EBX+EBX=192DB6H
 00481702  |.  81CB 94850C00 OR EBX,0C8594                            ;  EBX与0C8594H,结果=1DADB6H
 00481708  |.  D1EB          SHR EBX,1                                ;  EBX再右移一位,结果=0EDH6DBH
 0048170A  |.  81C3 BA040000 ADD EBX,4BA                              ;  EBX=EBX+4BAH=0EDB95H
 00481710  |.  81F3 E0E00800 XOR EBX,8E0E0                            ;  EBX与8E0E0H=63B75H
 00481716  |.  8D55 F0       LEA EDX,DWORD PTR SS:[EBP-10]            ;  EDX指向[EBP-10]
 00481719  |.  8BC3          MOV EAX,EBX                              ;  EAX=EBX
 0048171B  |.  E8 B469F8FF   CALL musicreg.004080D4                   ;  跟踪到下面,发现这个CALL就是把EAX的16进制值转成10进制,放到[EBP-10]的位置。
 00481720  |.  8B45 F0       MOV EAX,DWORD PTR SS:[EBP-10]            ;  得到10进制值ASCII "408437"设为Str1,它是注册码的组成部分。现在放到EAX中,又开始新的运算。。。
 00481723  |.  33DB          XOR EBX,EBX                              ;  以下运算略过,在KeyMake里照抄到00481829地址即可。
 00481725  |.  8A58 05       MOV BL,BYTE PTR DS:[EAX+5]
 00481728  |.  8BC3          MOV EAX,EBX
 0048172A  |.  8B55 F0       MOV EDX,DWORD PTR SS:[EBP-10]
 0048172D  |.  33C9          XOR ECX,ECX
 0048172F  |.  8A4A 02       MOV CL,BYTE PTR DS:[EDX+2]
 00481732  |.  03C1          ADD EAX,ECX
 00481734  |.  03C3          ADD EAX,EBX
 00481736  |.  BE 05000000   MOV ESI,5
 0048173B  |.  99            CDQ
 0048173C  |.  F7FE          IDIV ESI
 0048173E  |.  80C2 61       ADD DL,61
 00481741  |.  8855 E6       MOV BYTE PTR SS:[EBP-1A],DL              ;  DL=62 ('b')注册码合成符,放在[EBP-1A]位置,以下类同。
 00481744  |.  8B45 F0       MOV EAX,DWORD PTR SS:[EBP-10]
 00481747  |.  0FB670 01     MOVZX ESI,BYTE PTR DS:[EAX+1]
 0048174B  |.  8BC6          MOV EAX,ESI
 0048174D  |.  03C6          ADD EAX,ESI
 0048174F  |.  BF 05000000   MOV EDI,5
 00481754  |.  99            CDQ
 00481755  |.  F7FF          IDIV EDI
 00481757  |.  80C2 61       ADD DL,61
 0048175A  |.  8855 E7       MOV BYTE PTR SS:[EBP-19],DL              ;  DL=62 ('b')-->[EBP-19]
 0048175D  |.  8BC3          MOV EAX,EBX
 0048175F  |.  8B55 F0       MOV EDX,DWORD PTR SS:[EBP-10]
 00481762  |.  0FB63A        MOVZX EDI,BYTE PTR DS:[EDX]
 00481765  |.  03C7          ADD EAX,EDI
 00481767  |.  51            PUSH ECX
 00481768  |.  B9 05000000   MOV ECX,5
 0048176D  |.  99            CDQ
 0048176E  |.  F7F9          IDIV ECX
 00481770  |.  59            POP ECX
 00481771  |.  80C2 61       ADD DL,61
 00481774  |.  8855 E8       MOV BYTE PTR SS:[EBP-18],DL              ;  DL=63 ('c')-->[EBP-18]
 00481777  |.  8BC7          MOV EAX,EDI
 00481779  |.  8B55 F0       MOV EDX,DWORD PTR SS:[EBP-10]
 0048177C  |.  0FB652 04     MOVZX EDX,BYTE PTR DS:[EDX+4]
 00481780  |.  03C2          ADD EAX,EDX
 00481782  |.  03C1          ADD EAX,ECX
 00481784  |.  51            PUSH ECX
 00481785  |.  B9 05000000   MOV ECX,5
 0048178A  |.  99            CDQ
 0048178B  |.  F7F9          IDIV ECX
 0048178D  |.  59            POP ECX
 0048178E  |.  80C2 61       ADD DL,61
 00481791  |.  8855 E9       MOV BYTE PTR SS:[EBP-17],DL              ;  DL=65 ('e')-->[EBP-17]
 00481794  |.  8BC1          MOV EAX,ECX
 00481796  |.  03C3          ADD EAX,EBX
 00481798  |.  51            PUSH ECX
 00481799  |.  B9 05000000   MOV ECX,5
 0048179E  |.  99            CDQ
 0048179F  |.  F7F9          IDIV ECX
 004817A1  |.  59            POP ECX
 004817A2  |.  80C2 61       ADD DL,61
 004817A5  |.  8855 EA       MOV BYTE PTR SS:[EBP-16],DL              ;  DL=62 ('b')-->[EBP-16]
 004817A8  |.  8BC1          MOV EAX,ECX
 004817AA  |.  03C6          ADD EAX,ESI
 004817AC  |.  8B55 F0       MOV EDX,DWORD PTR SS:[EBP-10]
 004817AF  |.  0FB652 05     MOVZX EDX,BYTE PTR DS:[EDX+5]
 004817B3  |.  03C2          ADD EAX,EDX
 004817B5  |.  51            PUSH ECX
 004817B6  |.  B9 05000000   MOV ECX,5
 004817BB  |.  99            CDQ
 004817BC  |.  F7F9          IDIV ECX
 004817BE  |.  59            POP ECX
 004817BF  |.  80C2 61       ADD DL,61
 004817C2  |.  8855 EB       MOV BYTE PTR SS:[EBP-15],DL              ;  DL=65 ('e')-->[EBP-15]
 004817C5  |.  8BC1          MOV EAX,ECX
 004817C7  |.  8B55 F0       MOV EDX,DWORD PTR SS:[EBP-10]
 004817CA  |.  0FB652 04     MOVZX EDX,BYTE PTR DS:[EDX+4]
 004817CE  |.  03C2          ADD EAX,EDX
 004817D0  |.  51            PUSH ECX
 004817D1  |.  B9 05000000   MOV ECX,5
 004817D6  |.  99            CDQ
 004817D7  |.  F7F9          IDIV ECX
 004817D9  |.  59            POP ECX
 004817DA  |.  80C2 61       ADD DL,61
 004817DD  |.  8855 EC       MOV BYTE PTR SS:[EBP-14],DL              ;  DL=63 ('c')-->[EBP-14]
 004817E0  |.  8BC7          MOV EAX,EDI
 004817E2  |.  03C7          ADD EAX,EDI
 004817E4  |.  8B55 F0       MOV EDX,DWORD PTR SS:[EBP-10]
 004817E7  |.  0FB652 02     MOVZX EDX,BYTE PTR DS:[EDX+2]
 004817EB  |.  03C2          ADD EAX,EDX
 004817ED  |.  BF 05000000   MOV EDI,5
 004817F2  |.  99            CDQ
 004817F3  |.  F7FF          IDIV EDI
 004817F5  |.  80C2 61       ADD DL,61
 004817F8  |.  8855 ED       MOV BYTE PTR SS:[EBP-13],DL              ;  DL=61 ('a')-->[EBP-13]
 004817FB  |.  8BC6          MOV EAX,ESI
 004817FD  |.  03C1          ADD EAX,ECX
 004817FF  |.  B9 05000000   MOV ECX,5
 00481804  |.  99            CDQ
 00481805  |.  F7F9          IDIV ECX
 00481807  |.  80C2 61       ADD DL,61
 0048180A  |.  8855 EE       MOV BYTE PTR SS:[EBP-12],DL              ;  DL=65 ('e')-->[EBP-12]
 0048180D  |.  8B45 F0       MOV EAX,DWORD PTR SS:[EBP-10]
 00481810  |.  0FB640 04     MOVZX EAX,BYTE PTR DS:[EAX+4]
 00481814  |.  03C3          ADD EAX,EBX
 00481816  |.  8B55 F0       MOV EDX,DWORD PTR SS:[EBP-10]
 00481819  |.  0FB612        MOVZX EDX,BYTE PTR DS:[EDX]
 0048181C  |.  03C2          ADD EAX,EDX
 0048181E  |.  B9 05000000   MOV ECX,5
 00481823  |.  99            CDQ
 00481824  |.  F7F9          IDIV ECX
 00481826  |.  80C2 61       ADD DL,61
 00481829  |.  8855 EF       MOV BYTE PTR SS:[EBP-11],DL              ;  DL=64 ('d')-->[EBP-11],一共10个字符,设为Str2
 0048182C  |.  8D45 DC       LEA EAX,DWORD PTR SS:[EBP-24]            ;  以下代码是将Str2穿插到Str1的过程。
 0048182F  |.  8A55 ED       MOV DL,BYTE PTR SS:[EBP-13]              ;  [EBP-13]值SS:[0012FD5D]=61 ('a')
 00481832  |.  E8 5929F8FF   CALL musicreg.00404190
 00481837  |.  8B45 DC       MOV EAX,DWORD PTR SS:[EBP-24]
 0048183A  |.  8D55 F0       LEA EDX,DWORD PTR SS:[EBP-10]
 0048183D  |.  B9 01000000   MOV ECX,1                                ;  所放位置=1
 00481842  |.  E8 092DF8FF   CALL musicreg.00404550
 00481847  |.  8D45 D8       LEA EAX,DWORD PTR SS:[EBP-28]
 0048184A  |.  8A55 EB       MOV DL,BYTE PTR SS:[EBP-15]              ;  [EBP-15]值SS:[0012FD5B]=65 ('e')
 0048184D  |.  E8 3E29F8FF   CALL musicreg.00404190
 00481852  |.  8B45 D8       MOV EAX,DWORD PTR SS:[EBP-28]
 00481855  |.  8D55 F0       LEA EDX,DWORD PTR SS:[EBP-10]
 00481858  |.  B9 02000000   MOV ECX,2                                ;  所放位置=2
 0048185D  |.  E8 EE2CF8FF   CALL musicreg.00404550
 00481862  |.  8D45 D4       LEA EAX,DWORD PTR SS:[EBP-2C]
 00481865  |.  8A55 EF       MOV DL,BYTE PTR SS:[EBP-11]              ;  [EBP-11]的值 SS:[0012FD5F]=64 ('d')
 00481868  |.  E8 2329F8FF   CALL musicreg.00404190
 0048186D  |.  8B45 D4       MOV EAX,DWORD PTR SS:[EBP-2C]
 00481870  |.  8D55 F0       LEA EDX,DWORD PTR SS:[EBP-10]
 00481873  |.  B9 04000000   MOV ECX,4                                ;  所放位置=4,第3位由Str1的第一位组成。大家看堆栈或调试就明白。
 00481878  |.  E8 D32CF8FF   CALL musicreg.00404550
 0048187D  |.  8D45 D0       LEA EAX,DWORD PTR SS:[EBP-30]
 00481880  |.  8A55 E9       MOV DL,BYTE PTR SS:[EBP-17]
 00481883  |.  E8 0829F8FF   CALL musicreg.00404190
 00481888  |.  8B45 D0       MOV EAX,DWORD PTR SS:[EBP-30]
 0048188B  |.  8D55 F0       LEA EDX,DWORD PTR SS:[EBP-10]
 0048188E  |.  B9 06000000   MOV ECX,6
 00481893  |.  E8 B82CF8FF   CALL musicreg.00404550
 00481898  |.  8D45 CC       LEA EAX,DWORD PTR SS:[EBP-34]
 0048189B  |.  8A55 E7       MOV DL,BYTE PTR SS:[EBP-19]
 0048189E  |.  E8 ED28F8FF   CALL musicreg.00404190
 004818A3  |.  8B45 CC       MOV EAX,DWORD PTR SS:[EBP-34]
 004818A6  |.  8D55 F0       LEA EDX,DWORD PTR SS:[EBP-10]
 004818A9  |.  B9 07000000   MOV ECX,7
 004818AE  |.  E8 9D2CF8FF   CALL musicreg.00404550
 004818B3  |.  8D45 C8       LEA EAX,DWORD PTR SS:[EBP-38]
 004818B6  |.  8A55 EA       MOV DL,BYTE PTR SS:[EBP-16]
 004818B9  |.  E8 D228F8FF   CALL musicreg.00404190
 004818BE  |.  8B45 C8       MOV EAX,DWORD PTR SS:[EBP-38]
 004818C1  |.  8D55 F0       LEA EDX,DWORD PTR SS:[EBP-10]
 004818C4  |.  B9 09000000   MOV ECX,9
 004818C9  |.  E8 822CF8FF   CALL musicreg.00404550
 004818CE  |.  8D45 C4       LEA EAX,DWORD PTR SS:[EBP-3C]
 004818D1  |.  8A55 E6       MOV DL,BYTE PTR SS:[EBP-1A]
 004818D4  |.  E8 B728F8FF   CALL musicreg.00404190
 004818D9  |.  8B45 C4       MOV EAX,DWORD PTR SS:[EBP-3C]
 004818DC  |.  8D55 F0       LEA EDX,DWORD PTR SS:[EBP-10]
 004818DF  |.  B9 0A000000   MOV ECX,0A
 004818E4  |.  E8 672CF8FF   CALL musicreg.00404550
 004818E9  |.  8D45 C0       LEA EAX,DWORD PTR SS:[EBP-40]
 004818EC  |.  8A55 E8       MOV DL,BYTE PTR SS:[EBP-18]
 004818EF  |.  E8 9C28F8FF   CALL musicreg.00404190
 004818F4  |.  8B45 C0       MOV EAX,DWORD PTR SS:[EBP-40]
 004818F7  |.  8D55 F0       LEA EDX,DWORD PTR SS:[EBP-10]
 004818FA  |.  B9 0C000000   MOV ECX,0C
 004818FF  |.  E8 4C2CF8FF   CALL musicreg.00404550
 00481904  |.  8D45 BC       LEA EAX,DWORD PTR SS:[EBP-44]
 00481907  |.  8A55 EE       MOV DL,BYTE PTR SS:[EBP-12]
 0048190A  |.  E8 8128F8FF   CALL musicreg.00404190
 0048190F  |.  8B45 BC       MOV EAX,DWORD PTR SS:[EBP-44]
 00481912  |.  8D55 F0       LEA EDX,DWORD PTR SS:[EBP-10]
 00481915  |.  B9 0D000000   MOV ECX,0D
 0048191A  |.  E8 312CF8FF   CALL musicreg.00404550
 0048191F  |.  8D45 B8       LEA EAX,DWORD PTR SS:[EBP-48]
 00481922  |.  8A55 EC       MOV DL,BYTE PTR SS:[EBP-14]              ;  第15位值=[EBP-14]
 00481925  |.  E8 6628F8FF   CALL musicreg.00404190
 0048192A  |.  8B45 B8       MOV EAX,DWORD PTR SS:[EBP-48]
 0048192D  |.  8D55 F0       LEA EDX,DWORD PTR SS:[EBP-10]
 00481930  |.  B9 0F000000   MOV ECX,0F                               ;  所放位置=15,第16位由Str1的末位组成,得到ASCII "ae4d0eb8bb4ce3c7",设为Str3。
 00481935  |.  E8 162CF8FF   CALL musicreg.00404550
 0048193A  |.  8D55 F0       LEA EDX,DWORD PTR SS:[EBP-10]
 0048193D  |.  B9 08000000   MOV ECX,8                                ;  接下来在Str3中插入一些固定符,ECX=8,即固定符所放位置,后面的字符各后移一位。
 00481942  |.  B8 741A4800   MOV EAX,musicreg.00481A74                ;  第1个固定符为S
 00481947  |.  E8 042CF8FF   CALL musicreg.00404550
 0048194C  |.  8D55 F0       LEA EDX,DWORD PTR SS:[EBP-10]            ;  从Str3的第8位取符到末位
 0048194F  |.  B9 07000000   MOV ECX,7                                ;  ECX=7
 00481954  |.  B8 801A4800   MOV EAX,musicreg.00481A80                ;  第2个固定符为X
 00481959  |.  E8 F22BF8FF   CALL musicreg.00404550
 0048195E  |.  8D55 F0       LEA EDX,DWORD PTR SS:[EBP-10]
 00481961  |.  B9 02000000   MOV ECX,2                                ;  ECX=2
 00481966  |.  B8 8C1A4800   MOV EAX,musicreg.00481A8C                ;  第3个固定符为5
 0048196B  |.  E8 E02BF8FF   CALL musicreg.00404550
 00481970  |.  8D55 F0       LEA EDX,DWORD PTR SS:[EBP-10]
 00481973  |.  B9 0C000000   MOV ECX,0C                               ;  ECX=0CH
 00481978  |.  B8 741A4800   MOV EAX,musicreg.00481A74                ;  第4个固定符同第1个为S,因为这里的00481A74和上面相同,下面有的也是一样。
 0048197D  |.  E8 CE2BF8FF   CALL musicreg.00404550
 00481982  |.  8D55 F0       LEA EDX,DWORD PTR SS:[EBP-10]
 00481985  |.  B9 06000000   MOV ECX,6                                ;  ECX=6
 0048198A  |.  B8 981A4800   MOV EAX,musicreg.00481A98                ;  第5个固定符为B
 0048198F  |.  E8 BC2BF8FF   CALL musicreg.00404550
 00481994  |.  8D55 F0       LEA EDX,DWORD PTR SS:[EBP-10]
 00481997  |.  B9 05000000   MOV ECX,5                                ;  ECX=5
 0048199C  |.  B8 A41A4800   MOV EAX,musicreg.00481AA4                ;  第6个固定符为-
 004819A1  |.  E8 AA2BF8FF   CALL musicreg.00404550
 004819A6  |.  8D55 F0       LEA EDX,DWORD PTR SS:[EBP-10]
 004819A9  |.  B9 0A000000   MOV ECX,0A                               ;  ECX=0AH
 004819AE  |.  B8 A41A4800   MOV EAX,musicreg.00481AA4                ;  同第6个
 004819B3  |.  E8 982BF8FF   CALL musicreg.00404550
 004819B8  |.  8D55 F0       LEA EDX,DWORD PTR SS:[EBP-10]
 004819BB  |.  B9 0F000000   MOV ECX,0F                               ;  ECX=0FH
 004819C0  |.  B8 A41A4800   MOV EAX,musicreg.00481AA4                ;  同第6个
 004819C5  |.  E8 862BF8FF   CALL musicreg.00404550
 004819CA  |.  8D55 F0       LEA EDX,DWORD PTR SS:[EBP-10]
 004819CD  |.  B9 12000000   MOV ECX,12                               ;  ECX=12H
 004819D2  |.  B8 A41A4800   MOV EAX,musicreg.00481AA4                ;  同第6个
 004819D7  |.  E8 742BF8FF   CALL musicreg.00404550
 004819DC  |.  8D55 F0       LEA EDX,DWORD PTR SS:[EBP-10]
 004819DF  |.  B9 14000000   MOV ECX,14                               ;  ECX=14H
 004819E4  |.  B8 A41A4800   MOV EAX,musicreg.00481AA4                ;  同第6个
 004819E9  |.  E8 622BF8FF   CALL musicreg.00404550
 004819EE  |.  8D55 B4       LEA EDX,DWORD PTR SS:[EBP-4C]
 004819F1  |.  8B45 F0       MOV EAX,DWORD PTR SS:[EBP-10]            ;  [EBP-10]=小写的真码ASCII "a5e4-dB0e-XbS8-Sb-b-4ce3c7"
 004819F4  |.  E8 CB64F8FF   CALL musicreg.00407EC4
 004819F9  |.  8B55 B4       MOV EDX,DWORD PTR SS:[EBP-4C]            ;  转大写:堆栈 SS:[0012FD24]=00A6804C, (ASCII "A5E4-DB0E-XBS8-SB-B-4CE3C7")
 004819FC  |.  8B45 F8       MOV EAX,DWORD PTR SS:[EBP-8]             ;  假码!接下来会发生什么事,相信大家都会预料!
 004819FF  |.  E8 B029F8FF   CALL musicreg.004043B4                   ;  比较CALL
 00481A04  |.  75 29         JNZ SHORT musicreg.00481A2F              ;  注册失败,跳!
 00481A06  |.  B3 01         MOV BL,1                                 ;  如果注册码相等,设BL的标志位为1
 00481A08  |.  B8 E45C4800   MOV EAX,musicreg.00485CE4
 00481A0D  |.  8B55 F4       MOV EDX,DWORD PTR SS:[EBP-C]
 00481A10  |.  E8 E725F8FF   CALL musicreg.00403FFC
 00481A15  |.  8D55 B0       LEA EDX,DWORD PTR SS:[EBP-50]
 00481A18  |.  8B45 F0       MOV EAX,DWORD PTR SS:[EBP-10]
 00481A1B  |.  E8 A464F8FF   CALL musicreg.00407EC4
 00481A20  |.  8B55 B0       MOV EDX,DWORD PTR SS:[EBP-50]
 00481A23  |.  B8 E85C4800   MOV EAX,musicreg.00485CE8
 00481A28  |.  E8 CF25F8FF   CALL musicreg.00403FFC
 00481A2D  |.  EB 02         JMP SHORT musicreg.00481A31
 00481A2F  |>  33DB          XOR EBX,EBX                              ;  注册失败跳来这,EBX标志为0
 ------------------------------------------------------------------------
 
 ------------------------------------------------------------------------
 【破解总结】
 简单算法流程以下:
 1、将机器码经一系列运算后,得10进制的字符,设为Str1。
 2、将Str1再次运算得到Str2。
 3、将Str2插入到Str1中,组成一组字符,设为Str3。
 4、将Str3各处插入预设符,转成大写即成注册码。
 
   【注册机编写】
 KeyMake算法注册机编写以下:
 数据段:
 szHomePage db "https://www.chinapyg.com/",0
 szEmail    db "mailto:[email protected]",0
 szErrMess  db "输入的序列号不正确!",0
 szTemp dd 0
 szXor db "%lu",0
 szCode db 26 dup (0)   ;szCode存放注册码
 ;KeyGener WildCatIII 20090918
 ;引用请保持完整性,谢谢!
 ----------------------------------------
 代码段:
 MOV [EBP-4],EAX    ;机器码(ZXB-0001)放到[EBP-4],模仿00481689
 MOV EDX,[EBP-4]  ;再把它放到EDX,模仿004816AF
 invoke lstrlen,edx  ;计算机器码位数,返回值放在EAX
 MOV ESI,EAX   ;ESI存放机器码位数,模仿004816BF
 XOR EBX,EBX   ;EBX清零,为下面做准备
 MOV EDI,1     ;计数器初始为1
 AT004816CA:           ;循环开始,我习惯在地址004816CA前面加AT,方便使用
 MOV EAX,[EBP-4]       ;机器码
 MOV AL,BYTE PTR DS:[EDI+EAX-1];  逐位取ASCII到AL
 AND EAX,0FFH          ;汇编语言16进制表达法,末位加H;英文开头,前面再补0
 ADD EBX,EAX
 ADD EBX,404H
 INC EDI
 DEC ESI
 JNZ AT004816CA        ;循环
 SHR EBX,1
 XOR EBX,0C87DAH
 ADD EBX,EBX
 OR EBX,0C8594H
 SHR EBX,1
 ADD EBX,4BAH
 XOR EBX,8E0E0H
 MOV EAX,EBX   ;  运算结果16进制放在EBX,放到EAX中,
 PUSH EAX      ;  以下代码转成10进制ASCII码
 LEA EAX,szXor    ;  "%lu"长的无符号十进制整数值,见KeyMake使用说明,以下引用
 ;  数据格式化选项:%d,%i  有符号十进制数值
 ;          %ld,%li 长的有符号十进制整数值
 ;          %u    无符号十进制整数值
 ;          %lu   长的无符号十进制整数值
 ;          %x,%X  十六进制整数值,%x输出小写,%X输出大写
 ;          %lx,%lX 长的十六进制整数值,%lx输出小写,%lX输出大写
 ;          #    0x字符串的前缀数据,一般在显示十六进制值时使用
 PUSH EAX
 LEA EAX,szTemp
 PUSH EAX
 CALL wsprintf
 LEA EAX,szTemp   ; 最终出来的10进制字符
 MOV DWORD PTR SS:[EBP-10H],EAX ;[EBP-10H]暂放10进制数 ASCII "408437"
 ;以下仿抄00481723-0048182C段
 ;|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
 XOR EBX,EBX
 MOV BL,BYTE PTR DS:[EAX+5]
 MOV EAX,EBX
 mov EDX,DWORD PTR SS:[EBP-10H]
 XOR ECX,ECX
 MOV CL,BYTE PTR DS:[EDX+2]
 ADD EAX,ECX
 ADD EAX,EBX
 MOV ESI,5
 CDQ
 IDIV ESI
 ADD DL,61h
 MOV BYTE PTR SS:[EBP-1Ah],DL              ;  DL=62 ('b')
 MOV EAX,DWORD PTR SS:[EBP-10H]
 MOVZX ESI,BYTE PTR DS:[EAX+1]
 MOV EAX,ESI
 ADD EAX,ESI
 MOV EDI,5
 CDQ
 IDIV EDI
 ADD DL,61h
 MOV BYTE PTR SS:[EBP-19h],DL
 MOV EAX,EBX
 MOV EDX,DWORD PTR SS:[EBP-10H]
 MOVZX EDI,BYTE PTR DS:[EDX]
 ADD EAX,EDI
 PUSH ECX
 MOV ECX,5
 CDQ
 IDIV ECX
 POP ECX
 ADD DL,61h
 MOV BYTE PTR SS:[EBP-18h],DL              ;  DL=63 ('c')
 MOV EAX,EDI
 MOV EDX,DWORD PTR SS:[EBP-10H]
 MOVZX EDX,BYTE PTR DS:[EDX+4]
 ADD EAX,EDX
 ADD EAX,ECX
 PUSH ECX
 MOV ECX,5
 CDQ
 IDIV ECX
 POP ECX
 ADD DL,61h
 MOV BYTE PTR SS:[EBP-17h],DL              ;  DL=65 ('e')
 MOV EAX,ECX
 ADD EAX,EBX
 PUSH ECX
 MOV ECX,5
 CDQ
 IDIV ECX
 POP ECX
 ADD DL,61h
 MOV BYTE PTR SS:[EBP-16h],DL              ;  DL=62 ('b')
 MOV EAX,ECX
 ADD EAX,ESI
 MOV EDX,DWORD PTR SS:[EBP-10H]
 MOVZX EDX,BYTE PTR DS:[EDX+5]
 ADD EAX,EDX
 PUSH ECX
 MOV ECX,5
 CDQ
 IDIV ECX
 POP ECX
 ADD DL,61h
 MOV BYTE PTR SS:[EBP-15h],DL              ;  DL=65 ('e')
 MOV EAX,ECX
 MOV EDX,DWORD PTR SS:[EBP-10H]
 MOVZX EDX,BYTE PTR DS:[EDX+4]
 ADD EAX,EDX
 PUSH ECX
 MOV ECX,5
 CDQ
 IDIV ECX
 POP ECX
 ADD DL,61h
 MOV BYTE PTR SS:[EBP-14h],DL              ;  DL=63 ('c')
 MOV EAX,EDI
 ADD EAX,EDI
 MOV EDX,DWORD PTR SS:[EBP-10H]
 MOVZX EDX,BYTE PTR DS:[EDX+2]
 ADD EAX,EDX
 MOV EDI,5
 CDQ
 IDIV EDI
 ADD DL,61h
 MOV BYTE PTR SS:[EBP-13h],DL              ;  DL=61 ('a')
 MOV EAX,ESI
 ADD EAX,ECX
 MOV ECX,5
 CDQ
 IDIV ECX
 ADD DL,61h
 MOV BYTE PTR SS:[EBP-12h],DL              ;  DL=65 ('e')
 MOV EAX,DWORD PTR SS:[EBP-10H]
 MOVZX EAX,BYTE PTR DS:[EAX+4]
 ADD EAX,EBX
 MOV EDX,DWORD PTR SS:[EBP-10H]
 MOVZX EDX,BYTE PTR DS:[EDX]
 ADD EAX,EDX
 MOV ECX,5
 CDQ
 IDIV ECX
 ADD DL,61h
 MOV BYTE PTR SS:[EBP-11h],DL              ;  DL=64 ('d')
 LEA EAX,DWORD PTR SS:[EBP-24h]
 ;|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
 MOV ECX,1
 MOV DL,BYTE PTR SS:[EBP-13h]        ;开始组合注册码
 MOV BYTE PTR [szCode+ECX-1],DL          ;第1位
 INC CL                              ;按最终注册码的顺序,与源码有别
 MOV DL,'5'                          ;
 MOV BYTE PTR [szCode+ECX-1],DL          ;
 INC CL
 MOV DL,BYTE PTR SS:[EBP-15h]
 MOV BYTE PTR [szCode+ECX-1],DL
 INC CL
 MOV EAX,DWORD PTR SS:[EBP-10H]
 MOV DL,BYTE PTR [EAX]
 MOV BYTE PTR [szCode+ECX-1],DL
 INC CL
 MOV DL,'-'
 MOV BYTE PTR [szCode+ECX-1],DL
 INC CL
 MOV DL,BYTE PTR SS:[EBP-11h]
 MOV BYTE PTR [szCode+ECX-1],DL
 INC CL
 MOV DL,'B'
 MOV BYTE PTR [szCode+ECX-1],DL
 INC CL
 MOV DL,BYTE PTR [eax+1]
 MOV BYTE PTR [szCode+ECX-1],DL
 INC CL
 MOV DL,BYTE PTR SS:[EBP-17h]
 MOV BYTE PTR [szCode+ECX-1],DL
 INC CL
 MOV DL,'-'
 MOV BYTE PTR [szCode+ECX-1],DL
 INC CL
 MOV DL,'X'
 MOV BYTE PTR [szCode+ECX-1],DL
 INC CL
 MOV DL,BYTE PTR SS:[EBP-19h]
 MOV BYTE PTR [szCode+ECX-1],DL
 INC CL
 MOV DL,'S'
 MOV BYTE PTR [szCode+ECX-1],DL
 INC CL
 MOV DL,BYTE PTR [eax+2]
 MOV BYTE PTR [szCode+ECX-1],DL
 INC CL
 MOV DL,'-'
 MOV BYTE PTR [szCode+ECX-1],DL
 INC CL
 MOV DL, 'S'
 MOV BYTE PTR [szCode+ECX-1],DL
 INC CL
 MOV DL,BYTE PTR SS:[EBP-16h]
 MOV BYTE PTR [szCode+ECX-1],DL
 INC CL
 MOV DL,'-'
 MOV BYTE PTR [szCode+ECX-1],DL
 INC CL
 MOV DL,BYTE PTR SS:[EBP-1Ah]
 MOV BYTE PTR [szCode+ECX-1],DL
 INC CL
 MOV DL,'-'
 MOV BYTE PTR [szCode+ECX-1],DL
 INC CL
 MOV DL,BYTE PTR [eax+3]
 MOV BYTE PTR [szCode+ECX-1],DL
 INC CL
 MOV DL,BYTE PTR SS:[EBP-18h]
 MOV BYTE PTR [szCode+ECX-1],DL
 INC CL
 MOV DL,BYTE PTR SS:[EBP-12h]
 MOV BYTE PTR [szCode+ECX-1],DL
 INC CL
 MOV DL,BYTE PTR [EAX+4]
 MOV BYTE PTR [szCode+ECX-1],DL
 INC CL
 MOV DL,BYTE PTR SS:[EBP-14h]
 MOV BYTE PTR [szCode+ECX-1],DL
 INC CL
 MOV DL,BYTE PTR [EAX+5]
 MOV BYTE PTR [szCode+ECX-1],DL
 LEA EDX,szCode                       ;注册码(小写),放EDX,接着转成大写
 invoke lstrlen,EDX
 XOR EBX,EBX
 DEC EDX
 MOV ESI,1       ;初始ESI=1
 MOV EDI,EAX     ;位数放EDI
 UCASE:
 MOV BL,BYTE PTR [EDX+ESI-1]
 CMP BL,61H ;'a'
 JB NoChange
 CMP BL,7AH ;'z'
 JG NoChange
 SUB BL,20H
 NoChange:
 MOV BYTE PTR [EDX+ESI-1],BL
 INC ESI
 DEC EDI
 JNZ UCASE
 XOR EAX,EAX
 LEA EAX,szCode;
 ------------------------------------------------------------------------
 【版权声明】本破文纯属技术交流,转载请注明作者并保持文章的完整, 谢谢!
 
 [ 本帖最后由 野猫III 于 2009-10-21 16:31 编辑 ]
 | 
 评分
查看全部评分
 |