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?