Speak & Mail v1.9.6
Visual Basic 6
Written by McCodEMaN


Greetings and welcome to the noble art of reverse engineering!

This program is similar to Talking E-mail, it reads your mail and more!
If you haven`t cracked any VB6 programs before you might need to download runtime files for VB6 (VBRUN60.exe),


If you would like to use SoftIce you need to add:


in your softice.dat file.

Tools required

Numega SmartCheck v6.x

Target's URL





Step1 Run Smartcheck and configure the settings, like this:

      Under Program/settings menu:

     *ERROR DETECTION: Check all boxes except 'Report errors immediately'

     *ADVANCED SETTINGS: Check the first four boxes. The others should be emty!

     *REPORTING: All boxes should be checked except the one for:
                                'Report Mouse Move events from ocx controls'

Step2  OK, now you are ready to fight!

Step3  Load speak.exe by clicking 'File' and 'Open', => open speak.exe!

Step4  Run speak.exe in SmartCheck by pressing F5 or by pressing the runbuttom in the

Step5  Ok, now you are going to type in name and a fake serial, i use:
          McCodEMaN & 1234567890,
          the program validates the serial and tell you that it was wrong.
          Now terminate speak.exe by clicking on the stop buttom.

Step7  Ok, now look through the strings, do you see 'frmMain_Load'?
           Good, open it by clicking the ' + ' sign.

Step8  Now go into: 'mnuAboutUnlock_Click' ,then down and into: 'frmUnlock.Show'
          Ok, we are inside frmUnlock.Show...were should we go now?

Överföring avbröts!

Click' .
          Now you should be able to see:

          Len returns LONG:9  <= McCodEMaN (Your username)!
          Len returns LONG:)  <= McCodEMaN

          Skip the: Chr$ and go down to.......

          Len returns LONG:9 <=McCodEMaN
          Len returns LONG:54 <=EIcaDkZsjQSdh.........

          Keep tracing down trough the code until you find........

          Double (209952)-->Long (209952)

          Hmm, this was very interesting, can this be a part of the valid serial?
          Three strings down we can see......

          Long (209952)-->String ("209952")

          An other tree strings down we find......

          Long (xxxxxxx)-->String ("xxxxxxx")

          And farther down we find.............

          Long (xxxxx)-->String ("xxxxx")

          Well, i think that this can be the valid serial, but to confirm and see so that we ain`t
          missing anything let`s check the routine!
          Go up to: Long(209952)-->String ("209952")!
          Make sure the blue bar is on it!
          Go to "View" and choose: "Show All Events" now you will see almost everything
          that happens inside the program.

           This is what we see.............

           Long(209952)-->String ("209952") <= Here we are!

            __vbaStrMove  returns  DWORD:4E0E9C
                      = "209952"


            __vbaStrMove  returns  DWORD:4D4F08

                      = ";"

            __vbaStrCat  returns  DWORD:481BB8

                       = ";"

                       = "209952"

             __vbaStrMove  returns  DWORD:481BB8

                       = "209952;"

              Len returns LONG:9

                       = "McCodEMaN"

               Long(xxxxxxx)-->String ("xxxxxxx")

               __vbaStrMove  returns  DWORD:4D0BC4

                        = "xxxxxxx"

               __vbaStrCat  returns  DWORD:4D8814

                        = "xxxxxxx"

                        = "209952;"

               __vbaStrMove  returns  DWORD:4D8814

                         = "209952;xxxxxxx"


               __vbaStrMove  returns  DWORD:4E0E88

                          = "y"   <= This 'y' symbolize a sign!

               __vbaStrCat  returns  DWORD:4D62AC

                           = "y"

                           = "209952;xxxxxxx"

               __vbaStrMove  returns  DWORD:4D62AC

                           = "209952;xxxxxxxy"

               __vbaStrVarVal  returns  DWORD:4D4E28

               Asc returns Integer:67

               Len  returns  LONG:9

               __vbaStrVarVal  returns  DWORD:4D5418

               Asc  returns  Integer: 111

               Long(xxxxx)-->String ("xxxxx")

               __vbaStrMove  return  DWORD:4E0760

                          = "xxxxx"

               __vbaStrCat  returns  DWORD:4D87D0

                           = "xxxxx"

                           = "209952;xxxxxxxy"

               __vbaStrMove  return  DWORD:4D87D0

                            = "209952;xxxxxxxyxxxxx"


                If you jump down to...........
                __vbaStrCmp  returns  DWORD:FFFFFFFF

                                     compare string1 and string2
                                     string1= valid serial
                                     string2= fake serial

                __vbaFreeStr  returns  DWORD:1

                               = "209952;xxxxxxxyxxxxx"

                                                      Work Done!

Final Notes

I would like to thank:

Razzia, for making me interested in VB in the first place!
Jeff, for making me come back to the VB environment after a long vacation!
Eternal Bliss, for providing us with a great VB source!
MiZ, Bjanes, The Sandman and my friends in TRES2000!

When ever there is a door,
there is an entrance.
And behind an entrance can no secret hide,
when a cracker takes his knowledge for a ride


The information in this essay is for educational purpose only!
You are only allow to crack, reverse engineer, modify code and debugg programs that you legaly bought and then for personal use only!!
To ignore this warning is a criminell act and can result in lawful actions!

So please note!
I take no responebility for how you use the information in this essay, i take NO responebility for what might happen to you or your computer! You use this information on your own risk!!

What i mean is: Please buy the software!


Essay written by McCodEMaN ©TRES2000. All Rights Reserved.