1999 |
( 'Think it is registered' ) |
Win Code Reversing |
|
|
|
|
|
|
Program Details
|
||
Softice V3.25 - Win'95 Debugger W32Dasm V8.93 - Win'95 Dissembler |
||
|
|
|
The author of TotalRecorde v2.0 says :
Total Recorder represents
a new generation of sound recording programs. It
can record sound being
played by other sound players, either from a file or
from the Internet. It
can also record conventional audio from CD's,
microphone and other
lines on a sound card.
The evaluation version
is fully functional except that your recordings
are limited to 40 seconds
each.
|
This protection routine checks the
registration key, but i didn't find that it creates the
real one.
Since i couldn't find the real one,
i decided to crack it by fool the program to "think"
it's registered.
Usualy, when the key entered it
the correct one, the program need to sign to it self
that the program is registered.
This usualy done by move '0' or '1' to one of
the registers. By checking this
register later on, then comes the decision.
We will see how it get done, and
checked later, when the program is re-run.
The program keeps its settings at the registry :
HKCU\Software\HighCriteria\TotalRecorder\RegKey
HKCU\Software\HighCriteria\TotalRecorder\RegName
In our case, the *fake* details
will be there, and we will make the program to think
that it's the *real* one :)
|
Create a deadlist with w32dasm, you can find the "wrong key" message :
*
Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:0040623A(C),
:0040624A(C)
|
:004062A9
6A00
push 00000000
:004062AB
6A45
push 00000045
:004062AD
6A01
push 00000001
*
Possible Reference to String Resource ID=61216: "Invalid
name or registration key"
|
:004062AF
6820EF0000
push 0000EF20
:004062B4
E8F7AF0000
call 004112B0
We can see that we
get here from 2 locations : 0040623A
and 0040624A.
Run TotalRecorder
and go to the Help/Registration menu.
Type in your name
and registration key, but befor you hit the 'ok', set up Softice
to break with 'bpx
getwindowtexta', and 'x'.
Hit the 'ok' button,
and SI poped up, type x once, and SI poped on the 2nd time.
Press 'F11' once,
and we are here :
:00439031
FF1570344400 Call dword ptr [00443470]
; getwindowtexta
:00439037
8B4D10
mov ecx, dword ptr [ebp+10]
:0043903A
6AFF
push FFFFFFFF
:0043903C
E89491FFFF call 004321D5
:00439041
EB0B
jmp 0043904E
Since we know that
we entered the wrong key, we want to set up new break points
at the locations
that we saw above, to see why we jump there.
Disable the previous
bpx (bd *) and set up 2 new : 'bpx 0040623A' & 'bpx 0040624A',
and type x to leave
SI. SI break on the first one :
:00406230
8B4E5C
mov ecx, dword ptr [esi+5C]
:00406233
8D5E5C
lea ebx, dword ptr [esi+5C]
:00406236
8379F827 cmp dword
ptr [ecx-08], 00000027
:0040623A
756D
jne 004062A9
; we land here
:0040623C
6A00
push 00000000
The protection routine
is checking if the lenght of our key is equal to 27h, it is
length of 39 characers
in decimal. We know that it's not, so type 'r fl z' to set back the
zero flag so we
will not jump here. type x and we break on the 2nd bpx :
:0040623F
50
push eax
:00406240
E83BA60000 call 00410880
:00406245
83C40C
add esp, 0000000C
:00406248
85C0
test eax, eax
:0040624A
755D
jne 004062A9
; we land here
:0040624C
E883730300 call 0043D5D4
:00406251
8B4004
mov eax, dword ptr [eax+04]
:00406254
57
push edi
Take a look at register
EAX, it contains 00000001. the program checks if EAX = 0
test
eax, eax if not it jumps to
004062A9 ("wrong key message").
The
call 00410880 makes checks on
the registration key, if it's the *real* one, EAX
get the value of
0, else 1. Type 'r fl z' to set back the zero flag so we will not jump
here. type x and
we didn't get any message. At this time, our name and "fake" key
is in the registry.
Goto Help/About and see that it registered to your name.
But we are not done
yet. If you re-run the program, you wiil see that it's not
registered. The
program checks the information from the registry file and decides
that it's *fake*
key. The checks beeing done in here : call
00410880
In our deadlist
it looks like this :
*
Referenced by a CALL at Addresses:
|:00406240
, :00411B68
|
:00410880
83EC40 sub esp, 00000040
:00410883
53
push ebx
:00410884
55
push ebp
:00410885
56
push esi
It get called from
2 places 00406240
is when the key entered get
checked,
and the other place
is at 00411B68
this is when we strat Totalrecorder.
To check it, set
a new bpx 00411b68 and re-run Totalrecorder.
When SI break type
a to change to assembly mode, and type mov
eax,00
and
enter twice, then
x to leave. Now you can see
that it registered.
we can see that
instead of going into that call and return with 1 in EAX, we put
0 in EAX and that
means that the key is ok and the prog registered.
|
Load up TotalRecorder.exe into your Hex-Editor
( I use hexWorkshop-32).
Our name is already in the registry, so
this is the only change needed :
SEARCH FOR THE FOLLOWING BYTES
: 51E813EDFFFF8B
REPLACE WITH HIGHLIGHTED
BYTES : 51B8000000008B
REMEMBER, i'm
doing my cracks as a hobby and challenge, so please, if you like
this utility and
want to keep using it, support the author and pay for it.
|
There is no need to find the *real* serial/key,
there are a few ways to fool the
protection routine to think that
the key is the right one :)
My thanks and gratitude goes to:-
The Sandman for all what he is doing for us, newbies.
Rhayader for helping me with Reverse Code Engineering and useful tips