Reversing MSHearts and FreeCell  

                                                                                                        by     CoDe BreAkeR 

 

This tutorial teaches how to to reverse/crack the card games "MSHearts" and " FreeCell". This is a very easy tutorial but still should be a good practice .I choose this game because it is easily available with windows OS. Although this is written for beginners who have little knowledge of cracking, does not demand any knowledge of assembly, most of the things are easy to understand for any one who hasn’t even heard words like ASM or HEXEDITOR.

 

It is believed, although not proven, that every game can be won. May be you can prove this.  

 

 Tools Needed :

W32DASM

HEXWorkshop

 

You can search for the tools on filesearching

 

 

  Part 1:  MSHearts

 

1)  make backup of mshearts.exe on your desktop. (its in the windows folder)

 

2) Open the backed up file in w32dasm.

 

3) Now open mshearts.exe (one in your windows folder). (Try to) play it. You will notice that if other people have 

played  club  and also if you have any club then you cannot play a spade or any other card .It shows the message -

 "You must follow suit. Play a club"  at the bottom of the window.

 

4) So lets crack it...In w32dasm click on the second last button of "String Data References "

  Locate the string "You must follow suit. Play a %s" and double click it. You should land here...

 

---------------------

* Referenced by a (U)nconditional or (C)onditional Jump at Address:

|:0001.4FE9(C)

|

:0001.5098 8D46F0                   lea ax, [bp-10]

:0001.509B 50                          push ax

:0001.509C 9AF895A850           call 0001.95F8

:0001.50A1 8D46EA                  lea ax, [bp-16]

:0001.50A4 50                          push ax

:0001.50A5 9AF895B450           call 0001.95F8

 

* Possible Reference to String Resource ID=00312: "You must follow suit.  Play a %s."

                                  |

:0001.50AA 683801                 push 0138    ; <=== you landed here

:0001.50AD 8D46F0                lea ax, [bp-10]

:0001.50B0 50                        push ax

:0001.50B1 9AAEBECD50      call 0001.BEAE

 

----------------------

Note  : Your address might be different. My version of the file  is 4.90.0.3000

 

5)Now scroll up a little. As you see the part of the code you have reached is  Referenced by a (U)nconditional or (C)onditional Jump at Address: |:0001.4FE9(C) " So lets go to the address where the jump is. (a jump is a way of branching in assembly language just like if else statements in C). Click on Goto>Goto code location and type the address as follows and click ok.

 

Code seg    (Decimal)    0001

Code Offset (hex)          4fe9

 

You should land here:

 

----------------------

 

0001.4FE4 99                        cwd

:0001.4FE5 F7F9                   idiv cx

:0001.4FE7 3BD3                   cmp dx, bx

:0001.4FE9 0F84AB00            je 5098  ; <==You reached here. je = jump if equal.

 

* Referenced by a (U)nconditional or (C)onditional Jump at Address:

|:0001.4FD3(C)

|

:0001.4FED 83C608                 add si, 0008

:0001.4FF0 47                          inc di

 

----------------------

 

7) Make sure the green strip is on the je 5098 and note the offset number at the

 bottom of W32dasm just above the Taskbar.

 It is    @Offset 00005609h

 

6) Lets nop this jump.( nop means no operation or do nothing)

 Open the MSHeart.exe  in Hexworkshop.( not the one opened in W32DASM coz you cannot save changes made to the file)

 click Edit>goto..

 Choose HEX and write 5609

 

 7) Now you are at the offset where the jump is. We want to replace the jump with nop (90) so change the following bytes...

 

    0F 84AB 00  to 90 9090 90

Now save your file and play the game ...great ! you can play any card now.

 

 

Part 2  :  FreeCell

 

This is same as cracking MShearts. Moves to a column must be made in order of highest to lowest, alternating suit colors. If you don't it shows the message " This move is not allowed ". So remember this message and follow the same steps as above. Try it yourselves. Crack it so that you can move any card anywhere.

Click on Goto>Goto code location and type the address as follows and click ok.

 

Code seg    (Decimal)    0001

Code Offset (hex)          173B

 

You should reach here :

-----------------------------------

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0001.16F2(C)
|
:0001.1738  E9B200  jmp 17ED

-----------------------------------

nothing here, this is a jmp (i.e.  jump always) no condition here so we need to go to :0001.16F2

Go there as done above and nop that jump.

 This is fun :-).

 

Note  : Your address might be different. My version of file is 4.90.0.3000.(Windoze ME)

 

This file was downloaded from http://IndianCrackersOnline.cjb.net

If you find any mistakes or don't understand anything mail me codebreaker2k2@yahoo.com

 

 Happy Cracking !

 

This Site is owned by ICO copyright 2000-02©. Read the Disclaimer

 

Properties>