-
-
[原创]关于Muse软件——一款制谱软件的内存注册机的制作过程
-
发表于:
2010-12-25 15:35
8012
-
[原创]关于Muse软件——一款制谱软件的内存注册机的制作过程
Muse软件,是一款柔韧性很强的综合乐谱排版软件,拥有世界上唯一能够将五线谱、简谱、吉他谱、歌词无缝整合的能力。灵活快捷的编辑输入方式,清晰的乐谱屏幕渲染能力,还有高保真矢量打印输出,使它必然成为您优雅的音乐生活的好帮手。
前些日子要用这个软件,用OD调试了一下,在看雪搜了一下,没有关于这个软件的记录,今天把当时调试时的手记发一下,也为看雪贡献一些力量。
下 bp MessageBoxA 断点,
0012F734 004C16A9 /CALL 到 MessageBoxA 来自 Muse.004C16A3
0012F74C 00403592 返回到 Muse.00403592 来自 Muse.004C167B
一步步回溯,找到关键跳:
00403547 /75 78 je short 004035C1
改jne
打印是跳过了,可是不行,预览不出内容。继续向上找一下,到了段首,找eax的条件,进了一个call,到了下面的地址。
00403535 . 8B0D 64770801 mov ecx, dword ptr [1087764]
到了这个地址,寄存器里出了数字:2637142136。
EAX 017075C8 ASCII "2637142136"
ECX 0012F768
EDX 00000000
EBX 00000001
ESP 0012F75C
EBP 0012F780
ESI 019C89E8
EDI 019C89E8
EIP 00403535 Muse.00403535
这就是真的注册码与假的进行的比较。在解释窗口里出现了假的注册码。也就是
00403530 . A1 60770801 mov eax, dword ptr [1087760]
这个地址是放入了真的注册码。
写一个内存注册机就是了,只是需要页面视图点打印,才能出现注册码,而不是一打开就出现注册码,继续做的完美点儿。
实际上,真正的内容全在这里。
0040351D . 50 push eax
0040351E . 64:8925 00000>mov dword ptr fs:[0], esp
00403525 . 83EC 08 sub esp, 8
00403528 . 56 push esi
00403529 . 8BF1 mov esi, ecx
0040352B . E8 5D310D00 call 004D668D
00403530 . A1 60770801 mov eax, dword ptr [1087760]
00403535 . 8B0D 64770801 mov ecx, dword ptr [1087764] //将1087764改成1087760 实现爆破 ,这里只爆破了打印问题,而没有从根本上解决预览问题。
0040353B . 50 push eax
0040353C . 51 push ecx
0040353D . E8 A9440A00 call 004A79EB
00403542 . 83C4 08 add esp, 8
00403545 . 85C0 test eax, eax
00403547 74 78 je short 004035C1
因为没有解决页面视图的问题,所以这里不是关键点。搜注册表。
发现,这是一个注册表保存注册信息的程序。
可以下注册表断点: bp RegOpenKeyExA
断下后,返回单步走。注意在返回的地方下好断。
注册,拦下后,F8单步,反复跟了几遍,到了下面的这个地址,
004D6D8A E8 F533FDFF call Muse.004AA184
堆栈里出现了
0012FDAC 00509060 ASCII "REGSECTION"
0012FDB0 0050906C ASCII "REGCODE"
有注册码的地方就快了,下好断,第二次运行,
shift+F9,Alt+F9返回,走到"REGSECTION"的地方单步走。
到了下面的地址,注册码出现在堆栈里。
004530B4 50 push eax
堆栈内容:
0012FDB8 0108A1C0 Muse.0108A1C0
0012FDBC 0108A1C0 Muse.0108A1C0
0012FDC0 FFFFFFFF
0012FDC4 01707758 ASCII "2637142136"
0012FDC8 5ADC1B25 uxtheme.5ADC1B25
0012FDCC 5ADF1C78 uxtheme.5ADF1C78
是不是可以做注册机了。
出现在寄存器里最好。继续追试一下。有一个key.def的文件,不过没有结果。
向上找一下进了这个call。
004530AC E8 9F8B0100 call Muse.0046BC50
下面是算注册码的地方,在堆栈里逐渐出现的注册码,这段应该仔细分析算法,发现蛛丝马迹。
0046BD47 8A17 mov dl,byte ptr ds:[edi]
0046BD49 8D4C24 10 lea ecx,dword ptr ss:[esp+10]
0046BD4D 80C2 30 add dl,30
0046BD50 52 push edx
0046BD51 E8 6D3A0500 call Muse.004BF7C3
0046BD56 83C7 04 add edi,4
0046BD59 4E dec esi
0046BD5A ^ 75 EB jnz short Muse.0046BD47
重跟了几次下了几次断,下面注释里出现了REGSECTION,应该仔细跟了。下好断,分别跟。
00452F66 6A 00 push 0
00452F68 68 109B5000 push Muse.00509B10 ; ASCII "EXITCODE"
00452F6D 68 60905000 push Muse.00509060 ; ASCII "REGSECTION"
00452F88 53 push ebx
00452F89 68 109B5000 push Muse.00509B10 ; ASCII "EXITCODE"
00452F8E 68 60905000 push Muse.00509060 ; ASCII "REGSECTION"
0045305B 6A 00 push 0
0045305D 68 6C905000 push Muse.0050906C ; ASCII "REGCODE" //这应该是关键地方。
00453062 8D4C24 14 lea ecx,dword ptr ss:[esp+14]
00453066 68 60905000 push Muse.00509060 ; ASCII "REGSECTION" //上面有几个call跟进去看,没有什么。
0045306B 51 push ecx
继续追,下面这个地址,堆栈里又出现注册码。
004530B4 50 push eax
004530B5 B9 60770801 mov ecx,Muse.01087760
004530BA C68424 5C010000>mov byte ptr ss:[esp+15C],3
004530C2 E8 32C40600 call Muse.004BF4F9
堆栈
0012FDB4 0012FDC4
0012FDB8 0108A1C0 Muse.0108A1C0
0012FDBC 0108A1C0 Muse.0108A1C0
0012FDC0 FFFFFFFF
0012FDC4 01707758 ASCII "2637142136"
0012FDC8 5ADC1B25 uxtheme.5ADC1B25
0012FDCC 5ADF1C78 uxtheme.5ADF1C78
与前面的相同了。继续,有Call就F7进去看一下。
004530C2 E8 32C40600 call Muse.004BF4F9
这个call进去,F8单步走,
这个地址,
004BF503 8B07 mov eax,dword ptr ds:[edi] //这个地址实际上,打开软件后被调用了很多次,第次内容都不用,只有顺着上面走下来,才会下列内容,所以破解要有耐心。
寄存器出现,出现了一组数,可能是机器码。
EAX 0012FDC4
ECX 01707668 ASCII "51982612"
继续F8单步,那么
004BF501 8B0E mov ecx,dword ptr ds:[esi] //ds:[01087760]=01707668, (ASCII "51982612") ecx=01087760 (Muse.01087760)
004BF503 8B07 mov eax,dword ptr ds:[edi] //堆栈 ds:[0012FDC4]=01707758, (ASCII "2637142136") eax=0012FDC4
004BF505 3BC8 cmp ecx,eax
这就是机器码与注册码比较的地方了。寄存器里就是
EAX 01707758 ASCII "2637142136"
ECX 01707668 ASCII "51982612"
EDX 0012FD14
EBX 00000001
ESP 0012FDA8
EBP 0012FFC0
ESI 01087760 Muse.01087760
EDI 0012FDC4
EIP 004BF505 Muse.004BF505
注册码出现在寄存器里,可以做注册机了。要个好地方写注册机吧,继续单步走,找到这个有call的地方,就比较好了
004BF52F E8 C3FDFFFF call Muse.004BF2F7,这在这里拉。做内存注册机吧。
寄存器内容:
EAX 01707758 ASCII "2637142136"
ECX 01087760 Muse.01087760
EDX 0012FD14
EBX 00000001
ESP 0012FDA8
EBP 0012FFC0
不过不行啊。中断1次不行啊。可能注册机运用的不熟练。
还是到算注册码的地方另来吧。
0046BD41 /7E 19 jle short Muse.0046BD5C //这也是一个爆破的地方了,改成jmp也不行。
0046BD43 |8D7C24 1C lea edi,dword ptr ss:[esp+1C]
0046BD47 |8A17 mov dl,byte ptr ds:[edi]
0046BD49 |8D4C24 10 lea ecx,dword ptr ss:[esp+10]
0046BD4D |80C2 30 add dl,30
0046BD50 |52 push edx
0046BD51 |E8 6D3A0500 call Muse.004BF7C3
0046BD56 |83C7 04 add edi,4
0046BD59 |4E dec esi
0046BD5A ^|75 EB jnz short Muse.0046BD47
0046BD5C \B8 67666666 mov eax,66666667
在下面的这个Call F7进去
0046BD51 E8 6D3A0500 call Muse.004BF7C3
在下面的这个Call F7进去,也不行。
在下面这个地址注册码在堆栈里调齐。那么下面的这个call一定是一个关键call跟进去。
0046BD7F E8 3F3A0500 call Muse.004BF7C3
在下面这个地址注册码在寄存器里齐了。
004BF77E /EB 16 jmp short Muse.004BF796 //这一个下断,被调用过很多次的
寄存器内容
EAX 01707758 ASCII "2637142136"
ECX 0000000A
EDX 00000003
EBX 0170774C
ESP 0012FCE0
EBP 00000007
ESI 0012FD14
EDI 00000001
EIP 004BF77E Muse.004BF77E
做注册机吧
第一次中断在0046BD7F
第二次中断在004BF77E
成功
比较困难不往下追了。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!