Adynt's essay
(how to crack wdasm)

by adynts


Courtesy of Fravia's page of reverse engineering
~
A good essay, adynts is a "clean cut" +cracker

Alright, you wanted to know how I cracked wdasm, so here it is :

I will crack here W32Dasm 6.4 [w32demo6.exe] which is 604 192 bytes long. 
There's two things to crack here. First, we want to do as many operations 
as we want during one session. We want also to be able to save the 
disassembly listing to a text file.

Part I : limited number of operations

This is the harder part of the crack, I did it sometime ago and I didn't 
use a very zen way. Here a much better way ( in my opinion ). We know 
that there is a counter, let's supose this counter is decremented each 
time. So there should be a dec each time you use command, so that dec 
should appear often. We have a 32bits application, so let's search in the 
disassembly listing for "dec dword ptr" whith grep. Using grep is 
important here for it allows you to see the multiples occurence of the 
same location. Here it is :


:004070E9 FF8B34674000            dec dword ptr [ebx+00406734]
:00407100 FF8B34674000            dec dword ptr [ebx+00406734]
:00407117 FF8B34674000            dec dword ptr [ebx+00406734]
:0042618F FF8B34674000            dec dword ptr [ebx+00406734]
:004261A6 FF8B34674000            dec dword ptr [ebx+00406734]
:004261BD FF8B34674000            dec dword ptr [ebx+00406734]
:004261F8 FF8BDE5E4000            dec dword ptr [ebx+00405EDE]
:00443923 FF8BAA5D4000            dec dword ptr [ebx+00405DAA]
:00443EC5 FF8BAA5D4000            dec dword ptr [ebx+00405DAA]
:00445281 FF8BAA5D4000            dec dword ptr [ebx+00405DAA]
:00445A9C FF8BAA5D4000            dec dword ptr [ebx+00405DAA]
:00445E01 FF8BAA5D4000            dec dword ptr [ebx+00405DAA]
:00446090 FF8BAA5D4000            dec dword ptr [ebx+00405DAA]
:004467F0 FF8BAA5D4000            dec dword ptr [ebx+00405DAA]
:0044695D FF8BAA5D4000            dec dword ptr [ebx+00405DAA]
:0044795D FF8BAA5D4000            dec dword ptr [ebx+00405DAA]
:00447A3A FF8BAA5D4000            dec dword ptr [ebx+00405DAA]
:00448771 FF8B6E5A4000            dec dword ptr [ebx+00405A6E]
:00448782 FF8BDAE30100            dec dword ptr [ebx+0001E3DA]
:00448ED8 FF8B9E5F4000            dec dword ptr [ebx+00405F9E]
:00452A56 FF8BAA5D4000            dec dword ptr [ebx+00405DAA]
:00452CF1 FF8B9E5F4000            dec dword ptr [ebx+00405F9E]
:004531EC FF8BDEE30100            dec dword ptr [ebx+0001E3DE]
:00458610 FF8BDAE30100            dec dword ptr [ebx+0001E3DA]
:004586CC FF8BDAE30100            dec dword ptr [ebx+0001E3DA]
:00459AFA FF88EAE30100            dec dword ptr [eax+0001E3EA]
:00459B8A FF889E5D4000            dec dword ptr [eax+00405D9E]

So [ebx+0405DAA] is the one that appears the most often, let's look at 
that location closer. There is only one initialisation of this address, 
and many comparison, that looks nice, let's change the initialisation 
value :

   :00442381 C783AA5D40002C010000 mov dword ptr [ebx+405DAA], 0000012C
to replace with :
   :00442381 C783AA5D4000FFFF0F00 mov dword ptr [ebx+405DAA], 000FFFFF
 
And everything works nice.

Ok, the first time, I used winice, set a breakpoint when the window 
saying that you had to restart wdasm was poping. Then using backtracing I 
found a first location ( I think that was ebx+405F1A but my notes are not 
very easy to read ). And usr bpr I found the interesting location : 
ebx+00405DAA. That's not zen. Anyway I think the method I've described 
earlier is valuable even if I knew the solution before starting.


Part II : Saving in a text file

The routine to save in a text file is not in w32demo6.exe, so we connot 
use this way to enable the function save to text file. But w32demo6.exe 
is nice and in any case save the disassembly into a text file named 
winsys (in the same directory as the the program your are disassembling). 
This file is deleted when you quit the program. We just have to copy this 
file somewhere else while the program is running (in the background). The 
problem is that we do not have reading access to winsys. Let's change 
that. Looking at the disassembly listing and searching for winsys, you 
will find this section of code :

* Possible StringData Ref from Data Obj ->"\winsys"
                                  |
:004517AF 68BFEB4600              push 0046EBBF
:004517B4 8D838E5A4000            lea eax, [ebx+00405A8E]
:004517BA 50                      push eax
* Reference To: _strncat, Ord:0000h in cw3220.DLL
                                  |
:004517BB E87CC00000              call 0045D83C
:004517C0 83C40C                  add esp, 0000000C
:004517C3 8D8B8E5A4000            lea ecx, [ebx+00405A8E]
:004517C9 51                      push ecx
:004517CA 8D8300A13500            lea eax, [ebx+0035A100]
:004517D0 50                      push eax
* Reference To: lstrcpyA, Ord:0000h in KERNEL32.dll
                                  |
:004517D1 E878C00000              call 0045D84E
:004517D6 6A00                    push 00000000
:004517D8 6802010000              push 00000102
:004517DD 6A02                    push 00000002
:004517DF 8D93789F3500            lea edx, [ebx+00359F78]
:004517E5 52                      push edx
:004517E6 6A00                    push 00000000   


You are deep inside fravia's page of reverse engineering, choose your way out:

homepage links red anonymity +ORC students' essays tools cocktails
search_forms mailFraVia
Is reverse engineering illegal?