- UID
- 8671
注册时间2006-2-27
阅读权限40
最后登录1970-1-1
独步武林
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 编辑 ] |
评分
-
查看全部评分
|