|
|
|
|
|
|
|
|
|
|
||
|
||
|
|
|
|
When running the program, using Regmon in the
background, we can see this
3 entries in
our Registry file that are not set with values :
HKCU\Software\Software By Design\DLLSow For Windows
95\Registration\Code
0x0
HKCU\Software\Software By
Design\DLLSow For Windows
95\Registration\User
""
HKCU\Software\Software By
Design\DLLSow For Windows 95\Registration\Organization ""
Those 3 entries will be set on successful registration.
To access the 'Registration Screen' you will need to select the 'Help' menu option then choose the 'Registration' sub menu option.
You will be asked to enter:
User
Name:
Organization: (optional)
Registration:
Lets go to have a closer look at this protection
routine.
|
This program using the 32 bit function
GETDLGITEMTEXTA to "read" the input.
Run
DLLShow, go in the Registration screen, and fill the user dedails.
Remember
that the Organization in
optional.
1. When you've done this fire up Softice by pressing CTL-D.
2. Type: bpx getdlgitemtexta then x to leave Softice.
3. Click on the 'OK' button.
4. Softice now breaks at the beginning of the 1st System Function GetDlgItemTexta.
5. press x two times
Press
'F11'
we are in DLLShow code, after the three input
calls, here is the code :
:0040AAF1
FFD5
call ebp ; last GetDlgitemTexta
:0040AAF3
8D442410
lea eax, dword ptr [esp+10] ; land
here
:0040AAF7
50
push eax ; fake s/n (ascii)
:0040AAF8
E8E3990000
call 004144E0 ; convert fake s/n to
hex
:0040AAFD
83C404
add esp, 00000004
:0040AB00
8BE8
mov ebp, eax ; ebp = hex
fake s/n
:0040AB02
56
push esi ; user name
:0040AB03
E898800000
call 00412BA0 ; generates basic code
!
:0040AB08
83C404
add esp, 00000004
:0040AB0B
3D92A71901
cmp eax, 0119A792 ; author check
(1)!!
:0040AB10
7518
jne 0040AB2A
:0040AB12
682C0C4200
push 00420C2C ; authors
name
:0040AB17
8B2D3CE54200
mov ebp, dword ptr [0042E53C]
:0040AB1D
56
push esi
:0040AB1E
FFD5
call ebp
:0040AB20
681C0C4200
push 00420C1C ; authors
organization
:0040AB25
53
push ebx
:0040AB26
FFD5
call ebp
:0040AB28
EB07
jmp 0040AB31
* Referenced by a
(U)nconditional or (C)onditional Jump at Address:
|:0040AB10(C)
|
:0040AB2A
3D3CCE5F0D
cmp eax, 0D5FCE3C ; author check (2)
!!
:0040AB2F
750C
jne 0040AB3D
* Referenced by a
(U)nconditional or (C)onditional Jump at Address:
|:0040AB28(U)
|
:0040AB31
53
push ebx
:0040AB32
56
push esi
:0040AB33
E8387B0000
call 00412670 ; generate/check serial
(1)
:0040AB38
83C408
add esp, 00000008
:0040AB3B
8BE8
mov ebp, eax
* Referenced by a
(U)nconditional or (C)onditional Jump at Address:
|:0040AB2F(C)
|
:0040AB3D
53
push ebx
:0040AB3E
56
push esi
:0040AB3F
E82C7B0000
call 00412670 ; generate/check serial
(2)
:0040AB44
83C408
add esp, 00000008
:0040AB47
3BC5
cmp eax, ebp ; serial
ok ?
:0040AB49
741E
je 0040AB69 ;
yes, register !
:0040AB4B
68CFEA0000
push 0000EACF ; beggar off
cracker !
:0040AB50
6888130000
push 00001388
:0040AB55
57
push edi
:0040AB56
E875C7FFFF
call 004072D0
:0040AB5B
83C40C
add esp, 0000000C
:0040AB5E
5D
pop ebp
:0040AB5F
5F
pop edi
:0040AB60
5E
pop esi
:0040AB61
5B
pop ebx
:0040AB62
81C400010000
add esp, 00000100
:0040AB68
C3
ret
Now, after we've seen all the code, lets give a look in the 3 different methods.
Method 1 : register with the author handle and serial number.
After SI breakes in the code,
keep press th 'f10' until landing on location
xxxxxx:0040ab10 :
--------- snip snip --------
:0040AB03
E898800000
call 00412BA0 ; generates basic code
!
:0040AB08
83C404
add esp, 00000004
:0040AB0B
3D92A71901
cmp eax, 0119A792 ; author check
(1)!!
:0040AB10
7518
jne 0040AB2A ;
<-- we are here
:0040AB12
682C0C4200
push 00420C2C ; authors
name
:0040AB17
8B2D3CE54200
mov ebp, dword ptr [0042E53C]
:0040AB1D
56
push esi
:0040AB1E
FFD5
call ebp
:0040AB20
681C0C4200
push 00420C1C ; authors
organization
:0040AB25
53
push ebx
:0040AB26
FFD5
call ebp
:0040AB28
EB07
jmp 0040AB31
At this point, the JNE takes control. if we will type in SI r eip=0040ab12, that going to tell the program to ignore the jne and continue on the next instraction.
When the programer test this utility, he probobly created this code to check if the Code get generated the way he wants. i have no idea waht User name he was typing in, but when he checked it, the program register with :
Code : the real code for this handle
User : Gregory Braun
Organization : Software Design
so, now type x in SI,
program registered.
Method 2 : register with your real serial number.
After SI breakes in the code,
keep press th 'f10' until landing on location
xxxxxx:0040ab2f :
--------- snip snip --------
:0040AB03
E898800000
call 00412BA0 ; generates the
code !
:0040AB08
83C404
add esp, 00000004
:0040AB0B
3D92A71901
cmp eax, 0119A792 ; author check
(1)!!
:0040AB10
7518
jne 0040AB2A
--------- snip snip --------
* Referenced by a
(U)nconditional or (C)onditional Jump at Address:
|:0040AB10(C)
|
:0040AB2A
3D3CCE5F0D
cmp eax, 0D5FCE3C ; author check (2)
!!
:0040AB2F
750C
jne 0040AB3D ;
<-- we are here
* Referenced by a
(U)nconditional or (C)onditional Jump at Address:
|:0040AB28(U)
|
:0040AB31
53
push ebx
:0040AB32
56
push esi
:0040AB33
E8387B0000
call 00412670 ; generate/check
serial (1)
:0040AB38
83C408
add esp, 00000008
:0040AB3B
8BE8
mov ebp, eax
* Referenced by a
(U)nconditional or (C)onditional Jump at Address:
|:0040AB2F(C)
|
:0040AB3D
53
push ebx
:0040AB3E
56
push esi
:0040AB3F
E82C7B0000
call 00412670 ; generate/check
serial (2)
:0040AB44
83C408
add esp, 00000008
:0040AB47
3BC5
cmp eax, ebp ; serial
ok ?
:0040AB49
741E
je 0040AB69 ;
yes, register !
:0040AB4B
68CFEA0000
push 0000EACF ; beggar off
cracker !
:0040AB50
6888130000
push 00001388
:0040AB55
57
push edi
:0040AB56
E875C7FFFF
call 004072D0
:0040AB5B
83C40C
add esp, 0000000C
:0040AB5E
5D
pop ebp
:0040AB5F
5F
pop edi
:0040AB60
5E
pop esi
:0040AB61
5B
pop ebx
:0040AB62
81C400010000
add esp, 00000100
:0040AB68
C3
ret
After the program failed for the aothur check(1) the code take us to location :
:0040AB2F 750C jne 0040AB3D
This jne skips the first part of generating the
real "full" real code, that on location
0040ab3, as so, our try to register will fail. the only way
to cheat the program to do
both of the
checks is to ignore this jne.
Type in SI r
eip=0040ab31, and type x.
The program
registered, and it is with the real code, not the *fake* you've entered.
|
For method no. 1 :
SEARCH FOR THE FOLLOWING BYTES :
3D92A719017518
REPLACE WITH
HIGHLIGHTED BYTES : 3D92A719019090
For method no. 2 :
SEARCH FOR THE FOLLOWING BYTES :
3D3CCE5F0D750C
REPLACE WITH
HIGHLIGHTED BYTES : 3D3CCE5F0D9090
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.
|
I'm very satisfied that on my
first crack i can show 2 methods for doing it.
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