5/26/89 Megaton Man Teaches Cracking ============================ DOC CHECK PROTECTION Hello all you young and ameatur crackers! Today's lessons is on DOC Checks. Doc Checks are pretty easy once you get to know them. But some are a pain in the ass, like that Sub 688 game. But still, if you have a good working knowledge of 8088 assembly, it shouldn't really be a problem. I myself, only a 17 year old cheese high school boy, learned this facinating art form of cracking. I see cracking as a game within a game. The first being the actual game, the second is the Protection. Ok, here we go. Get your Cracking tools out. They should consist of a good Debugger of your choice. My choice is Microsoft's CodeView. Pretty easy to use and it's been working so far. But most of the major crackers seem to use Dos's DEBUG.COM. Which is found on your dos disk. They use this primitive but powerful tool because its so small in size, and wont bother with a game in memory. But i found CodeView lets you CTRL-BRK out of programs easier. Your next tool is NORTON UTILITIES. This program should be at your side all the time. You should have Norton and your Debug program in the PATH always because you will use it alot. Well, in this little package, you should find a file named DOC1.COM. This file is an assembly language file i made which simulates a DOC check. It'll give you some phony message like - "ENTER PASSWORD:". then you must enter the password inorder for the Program to tell you that you cracked it. The password for DOC1.COM is MEGATON MAN. Yea, i'm an egotistic asshole. but i love it. This is your game plan. First trace the program until the program waits for the input prompt. At that point, enter "KOOK" or anything at the prompt. Anything except MEGATON MAN. Then keep tracing the program till it eats shit (terminates). Try to memorize what path the program took and if you cant memorize, pen and paper always works. Now, restart the program and trace the program until the input prompt asks you for the password. Now instead of typeing the wrong password, type in MEGATON MAN, which is the correct pass- word. Now keep tracing the program and try again to memorize the path. Ok. The first part is over. Now, compare the two paths, and find out where a detour was made. Once you find the detour, just force the program to go the correct way. Are you saying, "How do i force the program?". Well find the Detour first.. and when you do continue on reading... So stop reading and try to crack DOC1.COM. Now that you are continuing reading, i suspect that you did find the Detour, or your Stumped. Well it doesnt matter, just keep reading. Ok, This is the "map" of this little program. XXXX:0100 Jmp 1E8 : : XXXX:01E8 CALL 1F7 <--- Print Message and Ask for Password XXXX:01EB OR AX,AX <--- Is the AX register = 0? XXXX:01ED JNZ 1F2 <--- No. then jump to 1F2 XXXX:01EF CALL 225 <--- This is DEATH! XXXX:01F2 CALL 21C <--- Call if its CRACKED! ok, this is the main part your worried about. Line 100, makes a jump to line 1E8. Now, 1E8 is CALL 1F7. what this CALL does, is, it Displays the intro message and asks you to input the Password. Now before executing this CALL statement on 1E8, take a look at the AX register. Write it down. Now, EXECUTE the entire Call. Use a BOGUS password. Take a look at the AX register after the call. The IP register should be on 1E8. What does the AX register contain? All 0000's? or 0001? Well Most Protections are like this! Even INT 13 protections! This is what's happening. When you execute the CALL 1F7, if you typed in the wrong password, the call will return with AX = 0000. If you typed in the correct password, the AX register will contain 0001. Pretty neat eh? Well, look at line 1EB. It is OR AX,AX. now this is pretty much like the CMP AX,0000 instruction. By using the OR AX,AX it saves memory (sorta), and is supposed to be faster than CMP AX,0000. Dont ask me why its like this, its just one of those Professional Programmers rules or somthing. Now to keep things going, Line 1EB checks to see if AX is equal to Zero. If AX is equal to zero, the ZERO FLAG is set. if not, then the ZERo flag is cleared. Look at line 1ED. It is JNZ 1F2. It says, Jump if Not Zero to line 1F2. See, AX will not equal zero if you entered the correct password. So if you entered the wrong password, the IP register will go down to line 1EF, which contains CALL 225, which is the Eat it and Die call! You dont want this! NEVER! If the correct Password was entered, line 1ED will jump down to line 1F2 which will execute a Call to tell you that you cracked the program. Now how could we change the program to make it so it will always jump to the correct line? well, there are a few different wayz we could do this. One ,is the EASY way, but less professional way. The next way is also an easy way, but also not as professional. And the last way is the harder way, and it is the professional way. Lets first try the second easy way. Because if i told you the easiest way first, your screw the program up! ok. Have you heard of the instruction NOP? Which means NO Operation. Yea, it doesnt do anything! just sorta patches up some instruction. Now if we NOP line 1EF (CALL 225), the program will encounter a NOP and keep continuing until the Call we want is reached, which is line 1F2 (call 21C). The Hex value for NOP is 90. So Disassemble the area we need to change and write down the bytes on, and around the area. Now flip out Norton Utilities and search for these bytes. Once found, do not Display them and change them! Continue with the search. Make sure there are no more discoveries. If you found another match, go back to the program, disassemble it and write down some more bytes around , and on the part you want fixed. Go back and search for these bytes. make sure there is only one occurance. ok, So there is one occurance, go find the bytes that you need changed. Once found, replace them with the hex value 90. Save your changes and bail out of Norton Utilites. Now Run DOC1.COM and type a wrong pasword. The program should tell you that its Cracked no matter what you type! if it told you that it was cracked, well you Cracked it! yea! The file DOC1.COM is cracked. Go to your MASTER DISK and copy the file on the MASTER DISK over to your SCREW AROUND DISK. which will get rid of the newly cracked DOC1.COM. Now that you have the DOC1.COM that is NOT cracked, lets begin the second way to crack the same program. Some DOC Check PROTECTORS are sorta lame and lazy. Remember i told you the password was MEGATON MAN? Well, when you purchase a game from EggHead or any other software place, and a DOC Protection accompanies the disk, there is always the DOC's that you need! well lets say for instance that you bought Silpheed. It's a DOC check type thingy. Well lets say one of the passwords was SIERRA. Pull out Norton Utilites and search for the characters S I E R R A. Norton should beep and show you where the word SIERRA was found. Now look around that area and see if there are any other words or letters around SIERRA. If so, read them. Now look in your Book of DOC's and see if a word on the screen matches a PASSWORD in the book. Yes? if so, BINGO, you found the password list. Now you could change the passwords to anything you want. But take note, a delimiter is usually put at the end of each password. Now whats a delimiter you say? its like a character or HEX value thats at the end of each password. For instance a hex value of 00 may be at the end of each password. Or each password is 8 characters long. Or somthing like that. Well, change them to what you please. I did this when i Cracked Silpheed. Kinda weak eh? well who cares. Now i dont really call this method "Cracking". Its more like hacking. But to prove to my self, i cracked it the next day. not hacking. The file DOC1.COM is cracked. Go to your MASTER DISK and copy the file on the MASTER DISK over to your SCREW AROUND DISK. which will get rid of the newly cracked DOC1.COM. OK, we cracked DOC1.COM two differnt wayz. Now the third way, which is the best. This method will totally eliminate the DOC check. Which means, NO SIGN of PROTECTION can be detected! Which means, you gotta remove the part where it ask for the password. Now take a look at the Listing. Ill copy the listing down here so you dont have to switch your face back and forth. XXXX:0100 Jmp 1E8 : : XXXX:01E8 CALL 1F7 <--- Print Message and Ask for Password XXXX:01EB OR AX,AX <--- Is the AX register = 0? XXXX:01ED JNZ 1F2 <--- No. then jump to 1F2 XXXX:01EF CALL 225 <--- This is DEATH! XXXX:01F2 CALL 21C <--- Call if its CRACKED! Now look at line 1E8 (call 1F7). This call Ask for the password and returns AX=0000 if its wrong, and AX=0001 if its correct. Well, our goal is to get to line 1F2 (call 21c)! Well, couldn't we just NOP line 1e8 thru 1Ef? Sure we can! Now thats what we gotta do. So write down the bytes around and on this area. Use Norton Utilites to search for these bytes and replace them with NOP's which is a HEX value of 90. Save your changes and run DOC1.COM. The program should just say.. GAME is CRACKEd. or somthing like that. Yip, just one line of Text. Ok, yea! we have cracked this simple doc check program 3 differnt wayz and 3 differnt times. Seems pretty easy eh? Well there are some problems. What if you didnt have a Correct password to trace thru? Well this is somthing only experience could teach. You must experiment with the jumps. If there seems to be a compare involved, usually the AX register is changed, and a conditional jump instuction follows, force the jump and see what happens. If it still eats shit, then dont force it and see what happens. If it still eats it, then keep following the path until another conditional jump is reached and do the same. Some INT 13's are similar to the Doc checks i explained above. Look at line 1e8 (call 1f7). This subroutine asks for the password and reutns the appropriate code. Now what if the Disk drive light lit up when this call is executed? If the DISK Protection was found, AX=0001. if its not found AX=0000. See its sorta the same. Oh, now what if the Doc Check is later on in the game. Like Questron II, Larry Bird One on One, and Demon Stalker. Well, Load up your debugger with the intro exe file. Then Press "g" for go and run the program while your debugger is in the background. when the program asks for the Password, just type "SHIT" and presss CTRL-BRK! The Debugger should regain control and will show you where the current line is at. Trace thru at that point and look for them conditional jumps and Comparisons. Well that wraps it up for this lesson. Any questions? well call ... THE ROACH MOTEL 818-369-2083 12/24/and 9600! USR HST! 100+ Megz Sysop : Black Flag Co's : Megaton Man (me) Eternal Warrior Lone Wolf Ask for Megaton Man. END. Line 199.