packers
Patching the Patcher: Cracking .RTPatch Professional
4.00 Eval Release - (Fun with packed files)

by snickers , 9 January 1998
f
Courtesy of Fravia's page of reverse engineering
fravia's comments
A nice addition for our unpacker section. I like essays that "show the way" for others to learn instead of presenting a boring 'how I cracked this specific proggy' code-heavy almost useless essay.
As if real reversers would care at all about specific programs... the ones I enjoy most to crack myself (for instance) are 8 years old DOS programs on 5.25 old floppies...
Once more: almost every soul perusing this site is looking for 'ideas' and/or 'approaches', in order to reverse on his own targets' code snippets (and not necessarly protection schemes!) that are completely different from the ones you might have choosen for your essay... if you are looking for ready made 'cracks', in order to steal some software and use it for free without paying enough money to the shareware Author to let him buy milk for his kids (with Micro$oft's slaves it's different, let's hope their kids starve) then go ELSEWHERE, you'll find enough stolen warez and 'crackz for lamerz' almost everywhere on the web, and you should not be here at all.
OK, hope you understood me, now enjoy this essay... at times I'm very happy to see that my site has been useful to some clever reverser...
A last thing: I love snickers' methodical approach... even if this patching patched patchers seems -at times- a little patchy :-)
f
There is a crack, a crack in everything
That's how the light gets in
Rating
(x)Beginner (x)Intermediate ( )Advanced ( )Expert
An 'all around' cracking exercise with DOS, Win16, Win32, and even packed EXE targets, demonstrating nag screens and a unique but simple file header protection scheme.
Title
Patching the Patcher: Cracking .RTPatch Professional
(4.00 Eval Release)

Written by snickers
Introduction
Fravia:
the best way I feel I could show my gratitude for what 
I have learned from your page and the tens of other good
cracking resources I have come across would be to come
up with something substantial of my own to contribute
to the cracking world.  Thus I have remained silent until
now, honing my basic cracking skills that one day, I may
be worthy enough to join the ranks of the +HCU.

For now, I submit this essay on a very simple protection
scheme I found.  Despite being simple it has certain
unique facets that make it more than 'banal'.  Also,
it is a tool (or a set of tools) that could be handy
for any +cracker.
Tools Required
To follow along with this essay, you need:

Tools:
   SoftICE (3.x for Win95, as well as 2.x for DOS)
   Hacker's View v.5.66 (or any other hex editor with
                         on-the-fly disassembly)
   Tron v.1.30 (see The Undertacker's essay about tron)

~
Our target: rtpsetup.exe (2,228,694 bytes) you can hopefully still get copies at http://www.pocketsoft.com
Program History
About our target:

.RTPatch Professional is a commercial patching
engine.  It comes with several utilities that aid
in software modification and distribution, such
as a file compare tool, string and byte searching
utils, complete with a file archiving system that
allows the creation of self-extracting setup files.
Of course, the main product here is the patching
engine, which compares files (or a set of files)
and produces a binary patch file to allow software
developers to quickly make and distribute software
updates or bug patches.

This tool is especially useful for beginning crackers
like myself who do not yet have the capability of
programming their own patch files or even for
crackers who are experienced in programming but are
too busy to write a patch file for every software
they crack.  The crack files written by +crackers
themselves are often far more efficient (especially
in terms of file size) and already you may find
+cracker written patch generators/engines all over
the web.  I have already seen crack patches made by
this program on the web, and the hundred plus KB size
was a monster to download compared to the other 2 KB
crack files.  So what's so great about .RTPatch?

For starters, patches by .RTPatch are really small,
about a few hundred bytes.  It's the patch apply
programs which are relatively big (62 KB for DOS,
149 KB for Win32), and this is because these patch
apply programs have many fully customizable options.
Windows based patches can be made in an instant,
complete with a GUI (it's a bloated DLL file which
accounts for the size mentioned).  .RTPatch is easy
to use, and one of it's best features in my opinion
is ease of multiple file patching, along with add
and remove file capabilities.  But you can read
about this and other features in the complete
documentation that comes in the distribution file,
so enough of that here.                           

The most important thing about .RTPatch is that it
seems to be the defacto standard for binary file
patching in the commercial software world.  What
makes me say this?  Patches for Adobe and Symantec
applications use .RTPatch, as well as many other
corporate and non-corporate software developers
listed on Pocketsoft's web site.  So when these
companies issue patches for their software, having
the utilities they used to make their patches with
will enable us to reverse engineer them.  (May I
suggest the reverse engineering of RTP files as a
future +HCU Project?)  Lastly, it would pretty damn
ironic for us to be cracking and patching those
commercial applications with the same commercial
utility they're all using.  Let's use their own
tools against them.

  
T
H
E

E
S
S
A
Y
The Protection

The .RTPatch Professional Evaluation Release is a fully
functional version with all the tools and documentation
included.  The evaluation period is for 30 days, but
Pocketsoft was probably counting on your honor because
the software doesn't seem to expire.  I've changed my
date ahead as far as the year 2099 and it still works
without handicap.  There seems to be two apparent
'protections' on this evaluation version:

1)  There is an annoying nag screen/message every time
the patch build and patch apply programs for all
platforms (DOS, Win, Win32) are invoked.

2)  According to the documentation, the eval release is
not capable of processing files larger than 25 megabytes.

These cracks are so simple that I won't even be putting
a line of code for them here.  I guarantee you, however,
you will have fun, since .RTPatch is multi-OS and
presents an opportunity to review your cracking skills
in DOS, Win16 and of course, Win32.  But here are the
guideline hints - this is, after all a cracking essay:

-The nags appear in 9 programs which need to be patched.  These are:
        PATCHBLD.EXE       the Win32 Console App which generates
                           the .RTPatch files
        PBLD-V16.EXE       the standard DOS version of PATCHBLD
        PATCHW32.DLL       the Win32 DLL for Console and GUI Patch
                           Apply Programs (the nag is in this DLL
                           and not the Apply Programs)
        PATCHW.DLL         this is the DLL for the Win16 GUI
                           Patch Apply.
 
 .RTPatch has an EZPatch system which allows you to
 bind the patch file and the apply program into a
 single executable patching file.  It uses DAT files,
 which are really modified versions of the corresponding
 standard EXE and DLL files with DAT extensions.
        EZPNTDLL.DAT       the 'bindable' version of PATCHW32.DLL
        EZPDLL.DAT         the 'bindable' version of PATCHW.DLL
        EZP32DLL.DAT       a 'bindable' combined graphic GUI and DLL
 
 These two files, we'll deal with later.
        PATCHDOS.EXE       the DOS Patch Apply Program
        EZPDOS.DAT         the 'bindable' version of PATCHDOS

-PATCHBLD.EXE is a Win32 Console App and thus uses
standard Win32 APIs.  Its nagscreen occurs as a
message box.  Using SoftICE, bpx MessageBoxA and
you'll find the call.  NOPping this call will get
rid of the call.  Secondly, the 25 MB limit can be
taken care of here.  Running PATCHBLD with any two
files larger than 25 MB will yield the error message
(I used my DriveSpace Compressed Volume Files).
Step the program to the error message display.  A
few instructions before that you will find a CMP
with 19h (25) and a JGE.  You know what to do.

-While you're still in Windows, crack the two DLL
files.  FIrst, make a patch file using an original
copy of the nagged, limited PATCHBLD and your newly
patched one, using PATCHBLD itself.  Next, use the
Win32 Patch Apply GUI (there's an icon in your Start
Menu) to apply the RTP file you just made.  A message
Box will appear.  Your bpx on MessageBoxA from your
last crack will catch it, and just NOP the call to
the API in PATCHW32.DLL.  There will be no more nag.

-PATCHW.DLL is cracked similarly, but remember that
it is 16-bit and uses 16-bit APIs.  NOPping the call
this time will crash the program, and so will NOPping
the call that calls the call, so at the top of the
routine that calls the nag force an early RETF by
changing the first byte to a CBh.  It's cracked.

-EZPNTDLL.DAT and EZPDLL.DAT are not exactly like
their standard DLL counterparts, but they're similar
enough that all you have to do is search the same
sequences of bytes that you NOPped in PATCHW32.DLL
and PATCHW.DLL and NOP them too.

-When you're done with all this, you can leave Window$
to crack PBLD-V16.EXE.  I know that you can load DOS
programs into SoftICE 3.x in Windows but it always
crashed on me so I decided that I would just crack it
in DOS.  Load it into SoftICE 2.x and step to the
message.  You'll be dragged throgh a lot of procedures
to get to the nag routine, so be prepared to step into
them.  Eventually you'll find the right one - RETF the
first byte of the called procedure to skip the nag.
There are actually 2 patch creation programs for DOS -
the standard PBLD-V16.EXE and the enhanced, faster
PBLD-DX.EXE, both of which have nags.  However, after
patching PBLD-V16.EXE, you won't need to patch PBLD-DX.EXE
anymore since the nag there also goes away.

By this point, most of the nags are gone and it probably
took you more experienced crackers about 10 minutes or less.


More Protection?

Well, I tried my newly nag-free Patch apply program on a
commercial software update .RTP file and I got an error
message 'Invalid Patch FIle.'  But most companies are
still using .RTPatch version 3.20, like the patch file I
was trying to use, and I figured the error was just due
to a version incompatibility.

PATCHDOS.EXE is a packed EXE file, and all the tools
I've gathered off the web say it's an unknown packer.
Rather than go through the trouble of unpacking this
compressed exe just for a simple nag, I went back to
the Pocketsoft web site.  In their downloads area I
found that PATCHDOS.EXE 4.00 was available for free
download.  Excitedly I got this 63 KB file and rejoiced
when I found it had no nag screen.  But when I tried it
on the patch files I made using PATCHBLD.EXE I got
another 'Invalid Patch File' message.  Perhaps it only
works with patches made with the DOS programs, I thought.
But even with patches created with PBLD-DX and PBLD-V16
I got the same error.  Could it be that my patching of
the nagscreens caused the patch builders to churn out
defective patch files?

The answer was no.  The RTP files I had made worked well
with Patch Apply Programs SUPPLIED WITH THE EVAL RELEASE!
I then tried the commercial version 3.20 RTP file with
the new PATCHDOS.EXE 4.00 that I had acquired.  It
worked perfectly!

So that is why the Evaluation Release of .RTPatch
Professional 4.00 was seemingly so poorly protected!
The Eval Release doesn't work with the Licensed
Release -- at least, it's not supposed to.  If that
is the case, yes, we've cracked .RTPatch and can now
make our own patches without any annoying nags, BUT,
how can we work with the RTP files of the commercial
software makers? Must we buy this extremely overpriced
patch engine to reap all its benefits?  Overpriced, of
course, since there are dozens of FREE utilities on
the web that do the same thing - written by +crackers,
for +crackers.

The answer is also no.  And if you're the type that doesn't
give up easily, you'll soon discover that the crack for
this part of the protection is very easy.  In fact, you
can give your SoftICE a rest and enter the battlefield
armed only with a hex editor.

There are two things to consider as we tackle this problem:

1)  The Patch Building System has to be capable of
writing a RTP file that is recognizable to the Patch Apply System.

2)  The Patch Apply System must have a method for
recognizing a valid RTP file.

Since you're probably still in DOS, you had best stay
there for the moment.  This session will end in DOS.
However, I made this observation in Window$, since my
Windows Hex Editor (Hex Workshop) allowed me to look
at several files at once.  I loaded a few of the
commercial RTP files I had, and then a few of the RTP
files I had made.  The file contents were different,
but I noticed that the headers of all the RTP files
were the same -- except for one thing.  The files I
had made with the Eval Release all began with EE 76 90 01,
while the commercial RTP files I had began with 4B 2A 40 01.
The Patch Apply Programs were reading in these first 4 bytes
to determine whether or not the RTP file was valid.
Testing this theory by editing the bytes worked.

At this point a simple solution would be to generate a
patch or write a program that would be capable of
searching EE 76 90 01 and replacing with 4B 2A 40 01
and vice versa to allow any patch file to work with
either the Eval or the Licensed Versions.  But this
would be cumbersome and inconvenient.  Besides, I want
the full product.

Fire up Hacker's View and switch to disassembly view.
Starting with PBLD-V16.EXE, we first search for
instances of EE 76 90 01.  No luck.  Reversing the
byte order also turns up nothing.  Then you search for
3 of the bytes in sequence.  Also no luck.  But
searching for EE 76 turns up two spots.  Searching
for 90 01 turns up thirteen.  How do we know which
ones to patch?  Time for the Zen part.

We're using Hacker's View since it can display in assembly.
As a result we can jump over red herrings and fish out the
right instructions.  The first instance of EE 76 is a CMP
instruction.  We know that this cannot be our target
because a CMP would not lead to writing on a RTP file.
The second one reads:

00043E44: C746FAEE76     mov    w,[bp][-0006],076EE

A MOV instruction would be very likely in writing that
sequence to the RTP file.  You then replace EE 76 with
4B 2A, the first 2 bytes of a licensed file header.
Scanning over the 13 occurrences of 90 01, only one is
a MOV.  Replace the appropriate bytes with a 40 01.
Update the file and quit.

Using your newly patched PBLD-V16, you make a RTP file.
Loading the product into your hex editor, you find that
the first 4 bytes read 4B 2A 40 01.  You also try the
file with that standard issue PATCHDOS from Pocketsoft's
web site.  It recognizes your RTP file and everything
works!  And as with the nag, there is no need to patch
PBLD-DX.EXE.

But we still have to patch PATCHBLD.EXE.  Use the same
technique to find the proper locations to patch.  Another
thing to patch is the Recognition System in the Patch
Apply Programs.  The Recogintion system is patched the
same way, only the telltale instruction is CMP.  Search
for the culprit in the 2 DLL files and their DAT
counterparts -- you'll find them quickly since the CMP
instructions for EE 76 and 90 01 are close to each other.
Also, you will need to patch PBIND.EXE so that it can
recognize a valid RTP file, but you only need to look for
the EE 76 string - that's all it compares.


Fun with Packed Files

.RTPatch has been a complete cracking package - cracking
nags in DOS, Win16 and Win32, as well as that nifty
recognition protection scheme.  But after playing with
your cracked .RTPatch Pro, it won't be long before you
realize you can't make nag-free EZPATCH single file
patches for DOS.  And those are the smallest kind - the
most convenient for distribution.  What are you going to
do about it?  EZPDOS.DAT is a modified PATCHDOS.EXE.
Renaming PATCHDOS.EXE to EZPDOS.DAT and then binding it
doesn't work, so what can you do?  Well, you've come too
far to quit now.  EZPDOS.DAT, like PATCHDOS, is compressed,
which is the exact reason we avoided the hassle of
uncompressing by downloading a different version.  But
this time there is no 'other version' and we're stuck
with this nagged one.  Not for long.  Go check out the
+HCU Project on unpackers and Packed-EXE's -- nothing's
impossible.

Get your copy of Tron 1.3 out.  Even though it's compressed
with an unknown packer, we can still uncompress EZPDOS.DAT
using Tron's universal decompressor.  First, rename
EZPDOS.DAT to EZPDOS.EXE.  Then you can use Tron like this:

tron -u EZPDOS.EXE

EZPDOS has an overlay, so Tron asks if it should remove it.
Answer Yes - EZPDOS still (seems to) runs without it.
After a while you have an unpacked EZPDOS.  Load up
SoftICE 2.x (you're still in DOS, right?) and get rid of
the nag screen like you did all the others.  You'll also
need to look for those Eval recognition bytes and change
them to Licensed bytes.  Now everything works perfect, but
EZPDOS is no longer as slim as it used to be.  You can
re-pack your cracked version with any EXE compressor
(I used PKLITE Shareware) and afterwards rename the file
back to EZPDOS.DAT.

Final Notes
Conclusion

Together we've cracked .RTPatch Pro.  Let's summarize:
        PATCHBLD.EXE       cracked Nag, 25MB limit and Header Write
        PBLD-V16.EXE       cracked Nag and Header Write
        PATCHW32.DLL       cracked Nag and Recognition
        PATCHW.DLL         cracked Nag and Recognition
        EZPNTDLL.DAT       cracked Nag and Recognition
        EZPDLL.DAT         cracked Nag and Recognition
        EZP32DLL.DAT       cracked Nag and Recognition
        PATCHDOS.EXE       replaced with Nagless version from website
        EZPDOS.DAT         Unpacked EXE, cracked Nag and Recognition
        PBIND.EXE          cracked Recognition
 
The fun conclusion to this essay is to gather copies
of the original files in one directory, and copies of
the patched files in another one.  Now you can use
.RTPatch's PATCHBLD to make an RTP file that removes
the protection on itself!  Don't worry about PATCHDOS.EXE
and EZPDOS.DAT.  PATCHBLD can detect that the new versions
are completely different from the originals and will provide
for a file replace in the RTP file - this program is great!

Didn't I say this would be easy?
(c) snickers 1998, all right reversed
Ob duh
I wont even bother explaining you that you should BUY this target program if you intend to use it for a longer period than the allowed one. Should you want to STEAL this software instead, you don't need to crack its protection scheme at all: you'll find it on most Warez sites, complete and already regged, farewell.
way out
You are deep inside fravia's page of reverse engineering, choose your way out:

packers
Back to Packers and Unpackers
redhomepage redlinks redanonymity +ORC redstudents' essays redacademy database
redtools redcocktails redantismut CGI-scripts redsearch_forms redmail_fravia+
redIs reverse engineering legal?