PCAnywhere Version 7.5
(Time trial protection busting)

by Hackmore Readrite
(Revised version: 03 July 1997)


Courtesy of Reverser's page of reverse engineering


        PCAnywhere Version 7.5   is available at http://www.symantec.com

                            PCAnywhere Version 7.5

                      REVISED Crack by Hackmore Readrite

                     Available at http://www.symantec.com

        PCAnywhere is a MUST HAVE program for anyone with a reason to connect
two or more computers together. It allows you to connect computers using a
paralel port, com port, telephone lines, or even the internet. Once connected
you can transfer files, control the other computer from YOUR keyboard, run
programs on the other computer, etc. You can even use it to set up one of
your office computers as a gateway. Imagine being a thousand miles from home,
and being able to run debug on your home computer, for the price of a local
phone call, just by connecting through the internet! Or get that file you
left at the office without even leaving home! It even has a chat feature so
you can teach someone how to use thier own computer, while they see it 
happening on thier screen, and you sit at home sipping martini's explaining
the program to them on the phone. I LIKE IT!

        Here's a short story so you'll know why I decided to crack this
program. Call it "getting even" if you want.

        Right after I got my first computer three years ago, it became
evident that I absolutely must have a way to connect two computers together
via the telephone lines. So I shopped around and decided PCAnywhere was the
product I needed. (For those of you who don't know me, three years ago I knew
absolutely NOTHING about computers!) So I emptied my bank account and left
my money at the software store.

        One year, and one lightning bolt later, it was time to buy a new
computer. It just happened that my new computer came to me loaded with
Win95! And the first thing I did was dive into my software repository to get
my PCAnywhere disks. Install went fine, but when I rebooted and tried to run
PCAnywhere. CRASH!!!, and Win95 was kind enough to tell me the program
wouldn't run on Win95, but gave me the phone number to call to get an
updated version of PCAnywhere. Win95 actually KNEW Symantecs phone number!

        I called the number. The nice lady on the other end said I had too
much money in my bank account, and I should send some to her. There went my
life's savings again. This realy pissed me off at Win95 and Symantec, but
what else could I do? I got PCAnywhere Version 2.0!

        Just over a year later, I was helping +reverser locate a piece of
software. (Whitewater Resource Toolkit - if you have a version newer than
version 3.01a PLEASE send it!) My search led me to Symantecs home page, where
they are offering ALL of their software for a FREE 30 day trial. So I scanned
the list looking for "WRT" and what do I see! PCAnywhere VERSION 7.5!

        Four megs of download time later, I was installing my "new" version.
Just reading the display during install told me this program was WAY ahead
of the "old" version I was using.

        Installed and rebooted, I started the program. I LOVED the new look.
But, curious about what I was about to crack, I shut it down and set my
clock 30 days ahead. DON'T DO THAT! The program expired, as expected, but
turning my clock back did not turn back the expiration! I deleted all traces
of the program from my computer and re-installed it, but it still said the
time limit had expired. I downloaded a whole new four megs and re-installed
again, but the time limit was still expired! It had looked SO GOOD, I wanted
to TRY IT! All it would do is tell me the time limit had expired, and I
should phone a number to order it. Then it would disapear from my screen.

        I knew I was up against one of the best. Peter Norton TAUGHT me
programming. (His book "PC Programers Bible" is my entire education on
computing.) I was sure he would pull a trick like this. I figured he jiggled
a byte in my bios or played with my registry. A quick check of the registry
came up empty, but I didn't want to waste too much time looking for
something when I had no idea what it might be.

        So, I tried a little "social engineering" on the telephone. Peter
has his ladys trained well. They told me ALL I could do was drain my life
savings again! There's NO way I could "try before I buy" because "I blew it!"
Send Peter more money, THEN I could try it. Peter, this means WAR!

        I decided to try the "dead aproach" this time, to "test" how smart
I was. I loaded Winaw32.exe into Wdasm7 (thanx Frog!) and began to read.
I scaned down the page, and in the section labeled "Imported Modules",
under the heading "Imported module 004: AWCOMM32.DLL", was the title
"TimeBombCheck@4"! I had expected a challenge!

        I did a search, and "TimeBombCheck@4" came up twice, in the listing
I had read, and at the call to it in the program. Break out SoftIce.

        Bpx on the offending line and run the program. SoftIce kicks in at
the following code:

  :00406350 FF15989D4700          CALL  DWORD PTR [EBP+FFFFF728] (TimeBomb)
  :00406356 85C0                  TEST  EAX, EAX                 (check)
  :00406358 0F8521000000          JNE   0040637F                 (good guy)
  :0040635E C78520F7FFFF00000000  MOV   DWORD PTR [EBP+FFFFF720], 00000000
  :00406368 C745FCFFFFFFFF        MOV   [EBP-04], FFFFFFFF
  :0040636F E809010000            CALL  0040647D                 (bad guy)
  :00406374 8B8520F7FFFF          MOV   EAX, [EBP+FFFFF720]
  :0040637A E914010000            JMP   00406493

        The CALL was suitably named "TimeBombCheck@4", and I usualy find all
those zero's on the line after a jump mean bad news, (I DID say USUALY!)
I assumed the TEST should come out "not" even IF I was registered. 
(For those who do not know, the TEST instruction looks for a "1" anywhere in
the binary representation of the number being TESTed, and trips the zero
flag accordingly.) Still in SoftIce, I began to assemble...

  :a cs:00406358
  :00406358 jmp 0040637f     (EB25)-> jump to the "good guy" address
  :0040635A push eax         (50)  -> then fill the extra 4 bytes 
  :0040635B push edx         (52)
  :0040635C pop edx          (5A)
  :0040635D pop eax          (58)



        To my total disgust, the "expired" picture was there, telling me
Peter was greedy, and I should send him my money! Frustrated, (but not ready
to give up yet), I lied and pushed the button that said "O.K."

        To my surprise, the program came up on my screen! This time I pushed
some buttons to see just what this puppy could do. I LIKE IT! Thanks Peter!

----------------------------------------------------------------------------
        (NOTE: This WORKED on MY computer for over a week, until I did some
house cleaning in my registry, which caused the program to shut down every
time I selected a function. It's a BAD crack, because there are several .exe
files in this program, each with it's own CALL to TimeBombCheck, and each
with its own TEST instruction after the call. Almost every .exe file would
have to be cracked! Sorry to all those who have tried this crack and became
angry because it did not work! The REAL fix is at the end of this page.)
+reverser has been on vacation, so I could not get the REAL fix posted sooner.
----------------------------------------------------------------------------

        Now, the nag screen had to go. Just a tiny bit of Zen told me it
must be in the AWCOMM32.DLL module, because thats where the CALL to
"TimeBombCheck@4" pointed to. A little more SoftIce-ing was needed.

        Reload the program, Bpx on the CALL to "TimeBombCheck@4" and
SoftIce breaks at the call again, but this time trace into it. Keep tracing
("t") untill you get to a CALL instruction, then set the cursor on the line
right after the call, and type "here" at the prompt, (or "F7") watching the
screen closely each time to see if the "nag screen" is visible.

        For the begginers amoung us, tracing ("t") through code is nessesary
in order to stay with the code when it branches off (JMP's). The "here"
instruction, with the cursor on the next line of code after the "CALL" will
process the call, then stop at the cursor, then you can "t" trace again.

        I had passed through about 12 calls when I saw the "nag screen" so I
cancelled my breakpoint and set a new one on the call which I had just passed
through. Then I let the program run its course.

        After the program shut down, I re-loaded it, and pressed "ctrl-d"
to run it to my breakpoint. Here's the code from cs:088fB7F2...

        8D8DE0F3FFFF            LEA   ECX, [EBP+FFFFF3E0]  (load address)
        E8F7F30000              CALL  0890ABEE             (make nag screen)
        C78580F2FFFF00000000    MOV   DWORD PTR [EBP+FFFFF280], 00000000

        Here, I just wanted to defeat this call, so the "nag screen" would
leave me alone. So I re-assembled the bad call line to...

                  "a"
                  "jmp 088FB7F7"    (EB03)  -> (skip this call)
                  "push eax"        (50)    -> (cover the extra bytes)
                  "nop"             (90)
                  "pop eax"         (58)

-----------------------------------------------------------------------------
        (NOTE: Remember, this turned out to be a dirty fix because of my
dirty registry, read on for the real fix!)
-----------------------------------------------------------------------------

        The program ran its course without showing me that ugly "nag screen"
so I broke out my old friend "HexEdit" and got to work.

                Load...   Winaw32.exe    (To fix the TimeBombCheck)
              Search...   "0F8521000000" (The JNZ 0040637F line)
        and typed in...   "EB2550525A58" (the "fix", JMP anyway)
                Save...   to disk

                Load...   AWCOMM32.DLL   (To fix the NAG screen)
              Search...   "E8F7F30000"   (The CALL 0890ABEE line)
        and typed in...   "EB03509058"   (the "fix", pass right through)
                Save...   to disk

        Thats it. Now a test run, and I learn that I now have a program I can
test drive for as long as it takes for me to decide IF I like it. Or at least
until Peter comes up with a newer version. Thanks Peter. You, and +ORC,
have taught me well, but I thought YOU of all people, would have given me
a more challenging puzzle. This one took less than an hour to solve!

-----------------------------------------------------------------------------
        Peter must have laughed when he read that last paragraph! I don't
know how my registry allowed this crack to work, but when I cleaned my
registry, the program did just what Peter designed it to do. SHUT DOWN! And
Peter got another 30 minutes of my time. Stop laughing Peter, here's the
real way to "repair" your TimeBomb!
-----------------------------------------------------------------------------

        As mentioned earlier, several of the .exe files call TimeBombCheck,
and each .exe has it's very own CALL to TimeBombCheck and then does a 
"TEST EAX, EAX" right after the call. Since the TEST is looking for a "1" in
the binary representation of whatever number is in EAX, it should be obvious
that EAX should contain some number larger than a "0". We need to back up,
into the TimeBombCheck sub, to find where the value is placed into EAX.
(By the way, the second EAX in the instruction "TEST EAX, EAX" is just a
"mask" that doesn't hide very much.)

        So I repaired my registry, re-installed PCAnywhere so I would be
working with a "virgin" copy, then loaded WINAW32.EXE into SoftIce, and set
a breakpoint at the call to TimeBombCheck.

        Then trace into the call, and each time a new CALL instruction comes
up, drop the cursor down to the following line and do a "here" instruction
in SoftIce to pass through the CALL.

        The call to the nag screen is slightly different this time, but the
same "fix" will get rid of it. And after passing 16 CALLs, we see what we're
looking for. The program loads EAX with a value that has been stored on the
stack, then JMPs to the RET.

        Now let the program run itself out, and pull out HexEdit so we can
REALY fix this thing!

                Load...   AWCOMM32.DLL   (To fix BOTH "problems")
              Search...   "E8ADF40000"   (The CALL NAG screen line)
        and typed in...   "EB03509058"   (the "fix", pass right through)
              Search...   "8B8584F2FFFF" (The MOV "0" on stack to EAX line)
        and typed in...   "B801000000"   (the "fix", MOV A "1" into EAX)
                 and...   "90"           (NOP to fill the extra "lost byte")
                Save...   to disk

        No repairs will be nessesary on the other .exe files now since they
will all find a "1" in EAX when they return from TimeBombCheck. This, of
course, is a much cleaner crack, and I should have done it this way the first
time. Sorry.

        Too hard for you? You want to crack this program by changing only a
SINGLE BYTE! O.K., I'll show you how to do that too. Just load AWCOMM32.dll
into your hex editor, and search for these bytes (without the *'s)...

        8B8508F7FFFF   MOV EAX, [EBP+FFFFF708] ; the byte that kicks
        89855CF2FFFF   MOV [EBP+FFFFF25C], EAX ; moves to new home
        E9*05*060000   JMP 088FBAE0            ; then gets checked

        Then replace the byte inside the *'s (in the jump instruction) to...

        E9*FE*060000   JMP 088FBBD9            ; skip all of those checks!

        This bypasses all validation checks, so the program doesn't check to
see if you need to see a nag screen, or if you've been using the program too
long. Yes, it does BEGIN to check, thats whats in [EBP+FFFFF708], but if we
try to bypass that check also, by not calling the sub that places the value
into [EBP+FFFFF708], other data gets left out which causes the program not
to function completely. And besides, to bypass this sub would take more than
a one byte change, which takes some of the fun out of the crack.


        Yes, Peter, the "cleanest" crack would have been a repair to your
"time keeper", or the code that reads it, but many people hesitate to play
with things they do not understand, like bios or registry files, when they
know it could cause them problems with thier system. So I've tried to make
this simple enough for anyone to do. After all, EVERYONE should have
PCAnywhere, and EVERYONE should know how to CRACK.

                                       Happy Cracking 'till next time;
                                                       Hackmore Readrite
                                                       DataMiners Inc.

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

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