home *** CD-ROM | disk | FTP | other *** search
- Example Cracks
-
-
-
- -------------------------------------------------------------
- OK, now let's put some of this information into practice by
- examining a few cracks of some common programs. First we'll
- look at a Crack for Mean-18 Golf by Accolade. Accolade has
- been one of those companies that has a fervent belief in Copy
- Protection.
- -------------------------------------------------------------
-
-
-
-
- Title: MEAN-18 UnProtect For CGA/EGA Version
-
-
- This crack works by eliminating the code that tests for known
- bad sectors on the original diskette to see if it is the
- genuine article or an illegal copy. The code begins with an
- INT 13 (CD 13 HEX), a DOS BIOS disk service routine followed
- a few bytes later by another INT 13 instruction. The program
- then checks the returned value for the bit configuration that
- signifies the bad sectors and, if all is as expected, contin-
- ues on with program execution.
-
- The code that needs to be patched is in the GOLF.EXE file and
- in the ARCH.EXE file. It is identical in both files and lies
- near the end of each file.
-
- In the following steps, you'll locate the start of the test
- code and patch it by replacing it with NOP instructions (HEX
- 90). The method described uses the DOS DEBUG utility but
- Norton's Utility (NU) works too.
-
- Copy all of the files from the MEAN-18 disk onto a fresh
- floppy using the DOS COPY command and place your original
- diskette out of harm's way.
-
- Assuming DEBUG is in the A: drive and the floppy containing
- the files to be unlocked is in the B: drive , proceed as fol-
- lows:
-
- First REName the GOLF.EXE file so it has a different
- EXTension other than .EXE.
-
- REN GOLF.EXE GOLF.DEB
-
-
- Next load the file GOLF.DEB into DEBUG and displays the "-"
- DEBUG prompt.
-
- A:> DEBUG B:GOLF.EXE
-
- 13
- Search for the beginning of the code to be patched by typing:
-
-
- - S CS:100 FFFF CD 13
-
- Searches the file for the two byte INT 13 instruction. If
- all goes well, two addresses should appear on the screen.
-
- XXXX:019C
- XXXX:01A8
-
- XXXX indicates that the numbers preceeding the ":" vary from
- system to system but the numbers following the ":" are the
- same on all systems.
-
- The next step is to use the "U" command as indicated to
- un-assemble a few bytes in order to verify your position in
- the file)
-
- - U CS:019C
-
- (Un-assembles 32 bytes of code. Verify the following se-
- quence of instructions:
-
- INT 13
- JB 01E9
- MOV AL,[BX+01FF]
- PUSH AX
- MOV AX,0201
- INT 13
- POP AX
- JB 01E9
- CMP AL,F7
- JNZ 01B5
-
- These are the instructions you'll be patching out in the fol-
- lowing step)
-
- - A CS:019C
-
- This command assembles the new instructions you enter at the
- keyboard into the addresses shown. Beginning at CS:019C, and
- for the next 21 bytes, ending with and including CS:01B0, en-
- ter the no op command "NOP" (90h) followed by a <return> or
- <enter>. Just hit <enter> at address XXXX:01B1 to end the
- assemble command.)
-
- XXXX:019C NOP <enter>
- XXXX:019D NOP <enter>
- .
- .
- .
- XXXX:01AE NOP <enter>
- XXXX:01AF NOP <enter>
-
- 14
- XXXX:01B0 NOP <enter>
- XXXX:01B1 <enter>
-
- This just wipes out the section of code containing the INT 13
- check.
-
- Now do a HEX dump and verify that bytes 019C through 01B0
- have been set to 90 HEX.
-
- - D CS:019C
-
- If they have, write the patched file to the disk as follows)
-
- - W
-
- This writes the patched file back to the
-
- disk where it can be run by typing GOLF just as before but
- now, it can be run from any drive, including the hard
- drive)
-
- Now just [Q]uit or exit back to DOS. This command can be ex-
- ecuted at any "-" DEBUG prompt if you get lost. No modifica-
- tion will be made to the file on the disk until you issue the
- "W" command.
-
- - Q
-
- The process is the same for the ARCH.EXE file but because it
- is a different length, the segment address, (XXXX part of the
- address), will be different. You should find the first INT
- 13 instruction at address XXXX:019C and the second one at
- XXXX:01A8 as before.
-
- You will again be patching 21 bytes and you will start with
- 019C and end with 01B0 as before. After doing the HEX dump
- starting at address 019C, you again write the file back to
- the disk with a "W" command then "Q" uit.
-
- Norton's utilities can also be used to make this patch. Be-
- gin by searcing the GOLF.EXE or ARCH.EXE files for the two
- byte combination CD 13 (remember to enter these as HEX
- bytes). Once located, change the 21 bytes, starting with the
- first "CD" byte, to 90 (a NOP instruction). As a check that
- you are in the right place, the byte sequence in both files
- is CD 13 72 49 8A 87 FF 01 50 B8 01 02 CD 13 58 72 3C 3C F7
- 75 04. After modifying the bytes, write the modified file
- back to the disk. It can then be run from any drive.
-
- END.
-
-
-
-
-
-
- 15
- ------------------------------------------------------------
- That was the first the tutorial cracks, here's another crack
- based on the same ideas but using Norton's Utilities instead.
- The following is an unprotect method for Eypx Submarine.
- Eypx is another one of those companies bent on protecting the
- world.
- ------------------------------------------------------------
-
-
- By: Assembler Magic
- Title: EPYX Submarine Unprotect
-
-
- You will only need to make one modification to the main
- executable program of Submarine, SUB.EXE. I will assume that
- your computer has a hard disk and that you have a path to
- DOS. It's time to fire up DEBUG as follows:
-
- DEBUG SUB.EXE<cr>
-
- The computer should respond with a "-" prompt. Now look at
- the registers, just to make sure everything came up okay.
- Type the letter "R" immediately after the prompt. The com-
- puter should respond with a few lines of info as follows:
-
- AX=0000 BX=0001 CX=6103 DX=0000 SP=0080 BP=0000 SI=0000
- DI=0000 DS=12CE ES=12CE SS=37B2 CS=27FC IP=0010 NV UP EI PL
- NZ NA PO NC
- 27FC:0010 8CC0 MOV AX,ES
- -
-
- Note the value of CS is "27FC". That is the hexadecimal
- segment address for the beginning of the program code in your
- computer's memory. It is highly probable that the value you
- see for CS will differ from mine. Whatever it is, write it
- down. Also, the values you see for DS, ES and SS will almost
- certainly differ from mine and should not cause you concern.
- The other registers should show the same values mine do, and
- the flags should start with the same values.
-
- Next, we will do a search for Interrupt 13's. These are
- BIOS (not DOS) Interrupts built into the program which are
- used to ensure that the original disk is being used to run
- the program. The whole key to this unprotect scheme is to by-
- pass these Interrupts in the program code. The tricky part
- of this unprotect is to find them! They are not in the seg-
- ment of program code starting at the value of CS equal to
- "27FC". They are closer to the beginning of the program in
- memory. Easy enough! Reset the value of CS to equal the
- value of DS as follows; type immediately after Debug's "-"
- prompt:
-
- RCS<cr>
-
-
- 16
- Debug will prompt you for the new value of CS with:
-
- CS:27FC:
-
- You respond by typing the value of DS you saw when you
- dumped the registers the first time. For example, I typed
- "12CE<cr>". The value you type will be different. Debug
- will again respond with the "-" prompt which means we are
- ready to do our search. Type in the following after the "-"
- prompt:
-
- S CS:0 FFFF CD 13<cr>
-
- The computer should respond with three lines of information
- which are the addresses of the three Interrupt 13 calls built
- into the program. The first four digits are the segment ad-
- dress and will equal to the value of CS you have just set.
- The second four digits following the colon are the offset ad-
- dresses which are of primary interest to us. On my machine
- they came back as follows:
-
- 12CE:4307
- 12CE:431F
- 12CE:4335
-
- The segment addresses will be identical and the three off-
- set addresses should all be relatively close together. Now
- look at the first offset address. (As you can see, mine was
- "4307".) Write it down. Now we do a bit of Unassembly.
-
- Type "U4307<cr>" which is the letter "U", followed immedi-
- ately (with no blank spaces) by whatever your first offset
- address turned out to be, followed by a carriage return. If
- you are not familiar with unassembled machine code, it will
- look like lines of gibberish as follows:
-
- 12CE:4307 CD13 INT 13
- 12CE:4309 4F DEC DI
- 12CE:430A 744C JZ 4358
- .
- .
- 12CE:431F CD13 INT 13
- 12CE:4321 4F DEC DI
- .
- .
- 12CE:4324 BF0400 MOV DI,0004
- 12CE:4326 B80102 MOV AX,0201
-
- In my computer, Unassemble will automatically output 16
- lines of code to the screen. Yours may differ. Note, in the
- abbreviated list I have shown above, the addresses at the be-
- ginning of the two lines which contain the Interrupt 13's
- (INT 13) correspond to the first two addresses we found in
- our search. Now we continue the unassemble, and here comes
-
- 17
- another tricky part. Just type in "U<cr>" after the "-"
- prompt.
-
- You'll get sixteen more lines of code with the third Inter-
- rupt 13 on a line which begins with the address (CS):4335 if
- you have the same version of Submarine as I do. It's not
- terribly important to this exercise, but it will at
- least show you that things are proceeding okay. Now type in
- "U<cr>" again after the prompt. You are now looking for
- three key lines of code. On my program they appear as fol-
- lows:
-
- 12CE:4335 07 POP ES
- 12CE:4356 5D POP BP
- 12CE:4357 CB RETF
-
- The true key is the instruction "POP ES". This instruction
- begins the normal return sequence after the program has ex-
- ecuted its Interrupt 13 instructions and accompanying checks.
- If Debug on your machine prints fewer than 16 lines of code
- at a shot, you may have to type in "U" more than twice at the
- "-" to find these instructions. (If you haven't found any of
- this stuff, either get help on the use of Debug or go back to
- using your diskette version!) Write down the offset address
- of the "POP ES" instruction; the four digits following the
- colon, which in my example is "4354". You're well on your
- way now, so please persevere.
-
- The next step is to modify the program to JUMP around the
- code which executes the Interrupt 13's and go immediately to
- the instruction which begins the normal return sequence
- (again, it's the "POP ES". Type in the following instruc-
- tions carefully:
-
- A4307<cr>
-
- This first bit tells Debug that new Assembler code will be
- inserted at the address of the first Interrupt 13. If your
- first Interrupt 13 is at an address other that "4307", use
- the correct address, not mine. The computer will prompt you
-
- with the address:
-
- 12CE:4307
-
- After which you will immediately type:
-
- JMP 4354<cr>
-
- This instruction jumps the program immediately to the normal
- return code instructions. Again, at the risk of being redun-
- dant, if your "POP ES" instruction is at a different address,
- use that address, not "4354"!
-
- The computer will prompt you with the address of the next in-
-
- 18
- struction if all went well. MAKE SURE you just hit the
- carriage return at this point. Debug will then return the
- familiar "-" prompt.
-
- Now it's time to examine your handiwork. Let's do the
- unassemble again starting at the address of what had been the
- first Interrupt 13 instruction, but which is now the Jump in-
- struction. Type in "U4307<cr>" or "U" followed by the appro-
- priate address and a carriage return. The first line begin-
- ning with the address should appear as follows:
-
- 12CE:4307 EB4B JMP 4354
-
- The key here is the four bytes immediately following the ad-
- dress. In my example they are "EB4B". Yours may not be.
- But, they are VERY IMPORTANT because they represent the ac-
- tual machine code which is the Jump instruction. WRITE THESE
- FOUR BYTES DOWN AND MAKE SURE THEY ARE CORRECT.
-
- Now if you want to have some fun before we go on, reset
- register CS to its original value by first typing "RCS<cr>"
- at the "-" prompt. Then type in the original value of CS
- that I asked you to write down. Using my example, I typed
- "27FC<cr>". Next, you will type "G<cr>" after the "-" prompt
- which means GO! If all went well, SUB should run at this
- point. At least it will if you put all of the Submarine
- files onto the diskette or into the hard disk subdirectory
- where youre working. If it didn't run, you may have made an
- error. Check through what you have done.
-
- Don't give up at this point if it does not run. Your version
- of Debug may simply have not tolerated our shenanigans. When
- you are done playing, quit Submarine ("Alt-Q<cr>") and type a
- "Q<cr>" after the Debug prompt "-" appears.
-
- Now comes the tough part. I can't walk you through this
- phase in complete detail, because you may be using one of
- several programs available to modify the contents of SUB.EXE.
- Debug is not the way to go, because it can't write out .EXE
- files, only .COM files.
-
- -------------------------------------------------------------
- Note: Another method of doing this is to REName the SUB.EXE
- file so it has a different extension other than .EXE before
- you enter DEBUG. That way after you've made the change you
- can then [W]rite then changes out to the file right in DEBUG.
- Then one drawback is that you can't run the program in DEBUG
- once you've changed the name.
- -------------------------------------------------------------
-
- You have to get into your sector modification package (NORTON
- works good) and work on the SUB.EXE file on your new diskette
- or your hard disk. Remember, I warned you that doing this on
- your hard disk is dangerous if you are not fully aware of
-
- 19
- what you are doing. So, IF YOU MESS UP, it's YOUR OWN FAULT!
-
- You are looking for the first occurrence of an Interrupt 13
- (the "CD 13") using the search facility in your program. If
- you don't have the ability to search for the two-byte hexa-
- decimal code "CD 13" directly, then you will have to manually
- search.
-
- -------------------------------------------------------------
- Note: Norton 4.x now has a search utility. When you get to
- the point of typing in the search text, just press the TAB
- key, and you can type in the actual hexadecimal code "CD 13".
- -------------------------------------------------------------
-
- Start at the beginning of SUB.EXE and proceed. Again, you
- want to find the first of the three (first from the beginning
- of the program).
-
- I will give you a hint. I found it in NORTON at location
- 4407 hexadecimal which is location 17,415 decimal in the
- SUB.EXE program file. DOS standard sectors are 512 decimal
- bytes. Replace the two bytes "CD 13" with the "EB 4B" or
- whatever your Jump instruction turned out to be. Write or
- save the modified file.
-
- That's ALL there is to modifying SUB.EXE. You can go ahead
- and execute your program. If you have followed my instruc-
- tions, it should run fine. Get help if it doesn't. Now, you
- should be all set. You can load onto your hard disk, if you
- haven't already. You can run it from a RAM disk using a BAT
- file if you really want it to hum. Or, if you have the fa-
- cilities, you can copy it from 5-1/4" floppy to 3-1/2" dis-
- kette and run it on machines which accept that medium if you
- upgrade to a new computer.
-
- END.
- 20
- -------------------------------------------------------------
- Now let's take a look at a newer crack on the program, Space
- Station Oblivion by Eypx. At a first [S]earch with Debug and
- Norton's Utility no CD 13's could be found, and yet it was
- using them... So a different approach had to be taken...
- -------------------------------------------------------------
-
-
- By: PTL
- Title: Space Station Oblivion Crack
-
-
- First of all, you must determine which file the INT 13's are
- in, in this case it had to be the file OBLIVION.EXE since it
- was the main program and probably contained the INT 13's. So
- then rename it to a different EXTension and load it into De-
- bug.
-
- Then do a [S]earch for INT 13's.
-
- -S 100 FFFF CD 13
-
- Which will promptly turned up nothing. Hmmm...
-
- Next you might decide that, maybe, the code was modifying it-
- self. So quit from Debug and load up PC-Watch, include all
- the INT 13 Calls. For those of you not familiar with
- PC-Watch, it is a memory resident program that can be set to
- look for any type of BIOS call. When that call is made
- PC-Watch prints to the screen the contents of all the regis-
- ters and the current memory location that the call was made
- from.
-
- After PC-Watch is initialized, then run the OBLIVION.EXE file
- from the hard disk, leaving the floppy drive door open, and
- sure enough, when the red light comes on in the diskette
- drive, PC-Watch will report the address's of some INT 13
- calls. Which you should then write down.
-
- From there, quit the game, reboot, (To dump PC-Watch from
- memory) and load the OBLIVION.EXE into Debug and issue a [G]o
- command with a breakpoint. What address should you use for a
- breakpoint? You guessed it, the same address PC-Watch gives
- you.
-
- Well, it locked up did'nt it? Which is quite common in this
- line of work so don't let that discourage you. So next re-
- loaded it into debug and this time [U]nassemble the address
- that you got from PC-Watch. But instead of finding the INT
- 13's you'll find harmless INT 21's.
-
- Hmm... could it be that the program was converting the CD
- 21's to CD 13's during the run? Well, to test the idea as-
- semble an INT 20 (Program Terminate) right after the first
-
- 21
- INT 21. Then I run the program, and yes immediately after the
- red light comes on the drive, the program will terminate nor-
- mally.
-
- Then [U]nassemble that same area of memory, and low and be-
- hold, some of the INT 21's have magically turned into INT
- 13's. How clever...
-
- So, then it is just a matter of locating the address of the
- routine that it jumped (JMP) to if the correct disk was found
- in drive A:. Once you have that address, just go to the
- start of all this nonsense and [A]ssemble a JMP XXXX command.
- Where XXXX was the address to jump to if the original disk
- was in drive A:.
-
- Then just [W]rite the file back out to the disk and [Q]uit
- debug, and then REName the file back to OBLIVION.EXE
- afterwhich it should work fine.
-
-
- END.
-
-
- Which G-file (Q=Quit) ?
-
-
- Another file downloaded from: NIRVANAnet(tm)
-
- & the Temple of the Screaming Electron 415-935-5845
- Just Say Yes 415-922-1613
- Rat Head 415-524-3649
- Cheez Whiz 408-363-9766
- Reality Check 415-474-2602
-
- Specializing in conversations, obscure information, high explosives,
- arcane knowledge, political extremism, diversive sexuality,
- insane speculation, and wild rumours. ALL-TEXT BBS SYSTEMS.
-
- Full access for first-time callers. We don't want to know who you are,
- where you live, or what your phone number is. We are not Big Brother.
-
- "Raw Data for Raw Nerves"
-
-
-