Advanced Discussion
Upon the return for interrupt 13h, if the carry
flag is set, that means that the program could not read the sector, and
therefore the disk is valid. If the carry flag is clear, that meant that
INT 13h could read the sector properly and so the disk would be bad in
the eyes of the program, thinking it was a copied disk.
Before creating your disk protection system,
we should be aware of the difference between debug's "T" and "P". "T" is
the trace instruction, which tells it to follow instructions step by step.
That also means that in LOOP or REP instruction, the trace will patiently
go through the loop until finished. Also, during CALL instructions, trace
will go into the call and execute the instructions pointed to by the call
instruction. The "P" command is similar to the "T" but with the difference
in that it traces over instructions. That means that if it use a LOOP or
REP, it will quickly finish up the loop and point to the next instruction.
With a CALL, the "P" (proceed) will not go into the subroutine. Instead,
it will just execute the procedure, then point to the next instruction.
But where should you place your protection within an executable? Run
your careful note of when things happen. You should notice (if you have
used) an intro screen, then the music pops up, then the menu comes out.
Decide with extreme caution where to put your protection. Use
the most peculiar part of your application to do this.
Notice this so you will know where you are in your program using the unassembler. Once you have done that, you can begin debugging your program. When you are just about to execute the step, try to remember the segment and offset of the instruction. The segment is the number to the left of the colon while the offset is the number to the right. There are basically two different methods to engage your protection system:
Method 1: Exit from copy protected CALL
You should decide how your code would access the drive A: for example.
Assuming that it is done with a CALL instruction you should be aware that
someone may try skipping the CALL instruction.
It is not tough to accomplish this using even Debug. For example type
in "RIP {enter}". Then type in the address of the next instruction. Then
execute the do or die instruction, "Gö. If you fail, you could try using
the "T" command once and start using "P" again.
Method 2: Return from copy protected CALL
There is another way to create a disk protection (or better to call
your disk protection). To use an instruction that causes the program to
jump because of a carry flag. This could be acieved through a JMP command.
Is it safe? No. You could easily fool it around with this carry. INT
13h copy protections are usually simple enough for you to just change the
carry flag to allow the program to bypass the copy protection.
Conclusion
So it is not wise to use disk protection anymore. People with a minimum
of assembly knowledge could easily mess around with your protection and
have your program cracked. But it still remains a good idea for small programs
that you just donÆt want everybody to copy them freely.