Guitar Pro v2.2 Demo
|
|
Subject: Cracking |
This essay is for knowledge purposes only!! Software developers spend much time in making their programs. They live from the money we give them! Please buy good software!! |
I. Introduction |
Hi there! Welcome to this tutorial. I never thought I 'd ever write a
tutorial on this bitch of a program. Well, the program is not a bitch,
but its protection is. To be honest: this is my toughest target I _ever_
did, and I had many moments I wanted to give up. However, pausing for
a couple of hours, doing some other stuff but computer and playing much
guitar (*g*) gave me the courage to go on. |
II. About the protection |
Nag - 30 day trial - CRC - three important limits: Only 24 measures saving, evaluation string on printouts, 50-note limit on ASCII and MIDI importation - "mislead cracker" code |
III. Cracking it |
Looks quite tough huh? Well it was. Of course, if you read this tutorial, this all won't look that hard because I almost immediately will tell you what path to follow to crack a certain item. But please keep in mind, that if you start cracking this program without any help, you don't know what the best approach will be. Just trying trying and trying different methods leads to a solution! I started with the easiest part: disabling the nag and time trial:
run the program and you'll see it appear. The continue button will appear
after a few seconds. For this nag I took the same approach as with the
The Bat! nagscreen (see The Bat v1.44 tutorial on my homepage), because
it was a similar nagscreen (a TPanel). You can find out with a program
named Windowse. Start partial code :004CC614 53 push ebx :004CC615 8BD8 mov ebx, eax :004CC617 80BBE202000000 cmp byte ptr [ebx+000002E2], 00 (1.) :004CC61E 7439 je 004CC659 :004CC620 E817DDF3FF call 0040A33C (2.) :004CC625 DCA3D8020000 fsub qword ptr [ebx+000002D8] :004CC62B DB2DF0C64C00 fld tbyte ptr [004CC6F0] End partial code (1.) If ebx+2e2 == 0 then the program is 'registered' and it doesn't
need to draw the nag It's ebx+47 and not ebx+2e2. If you look further to the code you
will see that there's a 'cmp byte ptr [ebx+47], 00'. Start partial code :0054D8DC A128765500 mov eax, dword ptr [00557628] :0054D8E1 83B8E002000018 cmp dword ptr [eax+000002E0], 00000018 (1.) :0054D8E8 7E5E jle 0054D948 :0054D8EA 66A134DB5400 mov ax, word ptr [0054DB34] :0054D8F0 50 push eax :0054D8F1 6A02 push 00000002 :0054D8F3 6A00 push 00000000 :0054D8F5 8D55F0 lea edx, dword ptr [ebp-10] * Possible StringData Ref from Code Obj ->"Gene-VersionEvaluation24Mesures" | :0054D8F8 B840DB5400 mov eax, 0054DB40 :0054D8FD E8C6C9FBFF call 0050A2C8 :0054D902 FF75F0 push [ebp-10] :0054D905 6868DB5400 push 0054DB68 :0054D90A 6868DB5400 push 0054DB68 :0054D90F 8D55EC lea edx, dword ptr [ebp-14] * Possible StringData Ref from Code Obj ->"Gene-MerciDeVousEnreg" End partial code (1.) If the number of measures is lower then 24 (=18h), then jump.
Patch this jle to a jmp. Anyway, we just patched the save limit. So, let's try it! Open an existing
.gtp file provided with the program with more then 24 measures and save
it under another filename. Cool :) No more messages. Now open the file
you just saved and......baha, did you really think it would be _that_
easy? It doesn't work. Well, let me tell you: the jump we patched is just
a jump that only avoids or shows a messagebox, but it isn't the real "Save"
check. Start partial code :004F5905 A128765500 mov eax, dword ptr [00557628] :004F590A 83B8E002000018 cmp dword ptr [eax+000002E0], 00000018 (1.) :004F5911 7E09 jle 004F591C :004F5913 C745D018000000 mov [ebp-30], 00000018 (2.) :004F591A EB0E jmp 004F592A End partial code (1.) Check again if number of measures and jumps if it's less
than 24 (18h). Again, patch this jle to a jmp. Open again an existing .gtp file and
save it under another filename. Try to open it. Now Guitar Pro gives an
error message: "Already at end of file", but in French, and
everything kinda crashes. 1. Program checks number of measures and shows messagebox if more then
24 measures As a concequence, Windows gives a "EOF error" and Guitar Pro
crashes. We have to find the real check made in nr. 4. Start partial code :004F577E 6A00 push 00000000 (1.) :004F5780 8B1528765500 mov edx, dword ptr [00557628] :004F5786 B965000000 mov ecx, 00000065 :004F578B 8D8558FEFFFF lea eax, dword ptr [ebp+FFFFFE58] :004F5791 E80207F1FF call 00405E98 :004F5796 E831D0F0FF call 004027CC (2.) End partial code (1.) This and next parameters are pointers to what to save Just keep tracing and notice this keeps coming back. Keep tracing and don't forget to get out of loops by setting breakpoints just after them. After a while (not too fast tho) you see this.....and it made me (oh man!) very happy :-) Start partial code :004F7075 FF45E8 inc [ebp-18] :004F7078 83C304 add ebx, 00000004 :004F707B 837DE819 cmp dword ptr [ebp-18], 00000019 :004F707F 0F853BEBFFFF jne 004F5BC0 End partial code This portion of code is the REAL check ! EBP-18 is the counter
of the number of measures. Once the number of measures equals 25, the
program jumps out of the saving routine. To patch this, change the 'jne'
into 'jmp'. "Yea, that f##king save limit disabled", I thought.
And happy I was, I saved a file and reopened it to look if no error messages
or faults were displayed......and my god, then frustration really got
out of controle and I had to stop for several hours. Start partial code :004F6531 837DE81A cmp dword ptr [ebp-18], 0000001A :004F6535 7E2C jle 004F6563 End partial code To patch, change the 'jle' into 'jmp'. Hehe, that's limit one of three. Two to go :-P No, the next two weren't as difficult. I thought about enabling the import functions first. So I clicked File
- Import - Midi. *kaboom* "Access violation at.....". My first
thought was that all the patching I previously did, caused the crash.
But as I couldn't find any mistake I started thinking about a CRC check.
Start partial code :004A27E4 8BC3 mov eax, ebx :004A27E6 E811010000 call 004A28FC (1.) :004A27EB 3B0598665500 cmp eax, dword ptr [00556698](2.) :004A27F1 7430 je 004A2823 :004A27F3 66837B2E00 cmp word ptr [ebx+2E], 0000 :004A27F8 740A je 004A2804 :004A27FA 8BD3 mov edx, ebx :004A27FC 8B4330 mov eax, dword ptr [ebx+30] :004A27FF FF532C call [ebx+2C] :004A2802 EB1F jmp 004A2823 * Referenced by a (U)nconditional or (C)onditional Jump at Address: |:004A27F8(C) | :004A2804 6A10 push 00000010 * Possible StringData Ref from Code Obj ->"Program error" | :004A2806 6888284A00 push 004A2888 * Possible StringData Ref from Code Obj ->"This program has been modified " ->"either by a virus or by a transfer " ->"problem. It will terminate now." End partial code The string "This program has been modified...." never gets
displayed btw. To patch, change the 'je' into 'jmp'. Start partial code * Referenced by a (U)nconditional or (C)onditional Jump at Address: |:005009E0(C) | :0050090A 83FF32 cmp edi, 00000032 :0050090D 7E38 jle 00500947 :0050090F 8B15EC735500 mov edx, dword ptr [005573EC] :00500915 691217070000 imul edx, dword ptr [edx], 00000717 End partial code EDI contains the number of notes read. It's obvious that you should patch
the 'jle' to 'jmp'. ;-) I also managed to enable the ASCII import function, which is a lot more difficult. As I don't know exactly how the checks work I won't explain it here, but I'll just give you the location where you can find the checks (there are 4 of them in the direct environment of the location I'll give you). They are like cmp [ebp-28], 32 and cmp [ebp-28], 33. Location is: 4D454D Only one (!!) limit to go: the print string. It's not very difficult,
but we'll use some (sloppy?) alternative approach for this. I tried to
find a conditional jump that avoids or jumpes to the "PrintEvalString"
but I wasn't able to find it. Because it's a demo version, I don't think
there actually is a conditional jump to print the string or not. |
IV. In the end |
I hate Guitar Pro kinda now :) I ran it soooo many many times that I'm
tired of looking at it. But if you just crack this with this tutorial
or use a crack.....I'm sure you 'll find it a very good and usefull program
(at least if you're into music, like I am). I guess this is the one and only tutorial on Guitar Pro v(anyversion)
Demo (until 05-06-2000) and there's also no crack available for it yet.
I guess this proves that many crackers are or: 1. not skilled enough to
crack this, but more 2. too lazy to crack this or to write a tutorial
on it. Get up and reverse, write guys! Greets, The Blackbird |
Essay written by The Blackbird © 1999-2000 This essay can be freely distributed/ published/ printed etc... as long as no modifications are made. |