Flu[X]/PC98 Cracking tutor #4 - Using W32Dasm to its potential

Tools
-Unreal Player MAX (i used v1.27)
-W32Dasm
-Byte patch maker
-Hackers view 5.65+
-Brain (Stop by your local hardware store and pick one up)

OK, not many people have actually used W32 Dasm's debugger..
Well, why not?

Heres a good example of how to use the debugger..
This program is protected by two checks (yep count em')
Once when the program loads and once when you try to play
a file. The first one is easy... and unless you use W32's debugger..
the second could be hard...

OK, lets run the program once.. now exit... move the date
ahead 2 months or so.. restart.. hey look its expired..
ok.. remember the messages it gives us...
Disassemble the file in w32dasm... wait..wait..wait..

ok once its done decompiling do a text search for.. "This version is expired"
or whatever it's message was..

you should scroll up a bit until we come to this interesting code..

mov eax,esi
call 0047ca6c
mov eax, dword ptr [00489600]
cmp dword ptr [eax], 0000001E  <-- 1E = 30 decimal | compare counter to 30 days
jg 004810d6                    <-- if weve been using for 30+ days jump to expire
mov eax, dword ptr [00489600]  <-- move counter in again
cmp dword ptr [eax], FFFFFFD   <-- compare for clock rollback
jge 0048112b                   <-- if no roll back detected.. make the jump

so how would we fix this?
like so


mov eax,esi
call 0047ca6c
mov eax, dword ptr [00489600]
cmp dword ptr [eax], 0000001E  <-- 1E = 30 decimal | compare counter to 30 days
nop                            <-- use 2 nops to remove jump and fill bytes
nop                   
mov eax, dword ptr [00489600]  <-- move counter in again
cmp dword ptr [eax], FFFFFFD   <-- compare for clock rollback
jmp 0048112b                   <-- always jump to good code


ok.. we simply remove the one jump.. because it goes to "bad" stuff
and we never want it to goto there. Then we make it so under ALL
conditions it jumps to the good code :)
Ok, load up Hackers View and make the changes to the file.

Ok run our target...
looks good dont it?
ok play a mp3 file or wav file or whatever.. what?.. it just closed on us
hrmmm.. we must have missed something.. oh wait.. remember.. i said
there were 2 checks.. ok load un w32dasm again and de-compile it (again)
ok hit the 'debug' menu item and select 'load process' hit 'load' button
when a new window pops up...

wait for it to load the file into mem.. hit the Run button on
the one side window.. Ok, unreal player MAX starts.. ok try to
play a file again
it will exit. now hit the close button.. re-enlarge W32

ok,, it conveniently dropped us off where the program quit..
hey look there is a function called Exit Process.. i wonder what that
does? maybe closes a program!!  ok.. so we want to skip that beast.
scroll up a bit...  hey look at this.. dont it look somewhat
familiar with a few small changes ???

.
.
.
mov eax, dword ptr [00489600]
cmp dword ptr [eax], 0000001E  <-- 1E = 30 decimal | compare counter to 30 days
jg 004810d6                    <-- if weve been using for 30+ days jump to expire
mov eax, dword ptr [00489600]  <-- move counter in again
cmp dword ptr [eax], FFFFFFD   <-- compare for clock rollback
jge 0048112b                   <-- if no roll back detected.. make the jump
.
.
.
call Exit Process

make the same changes as above.. try to play a file now. wow it works!!
congrats.. you just cracked Unreal Player MAX!
 now use your patch maker and make a patch file. BAM.. your all set!

