anti-cracking library 1.0

Frequently Asked Questions
Why don't you make ACLib as a component?
I don't think, that this is a good idea. Let me explain: if it was a component, it would have two or three methods like ProtectApplication, CheckMonitors and CheckIfUnpacked. You would add TAClib on your's application's main form, add three lines of source code to main form's OnCreate or OnShow and viola, your application is protected. Yeah, it was really easy.
Now from the cracker's point of view: huh, this is a cool app. I will crack it. At first, I will start the debugger and look at that app. Oooops, the app crashed. It looks like, there are some anti-debugger functions. Where did it crash? Oh, at address xxxxxxx. And how we got there? Yeah, here was a call to this function, so I will NOP it (this means: fill the call with NOP (No OPeration) instruction; the call will be deleted).
Just in few minutes the cracker removed the WHOLE anti-cracking protection. Do you still want to protect your application by a component?

I have seen a protection component, which is able to fool ProcDump. Why ACLib can't fool it too?
This is quite easy. ProcDump is a dumping program used to dump program from memory back to EXE file. It is used, when you want to unpack a packed EXE file. At first you trace the unpacking stub, wait until the program is unpacked and then dump it from memory. And here is the point: the program is dumped right after it is unpacked. When ProcDump does his job, our code was just decompressed and waits to be executed. But the execution happens AFTER the program was dumped. Anti-ProcDump code is useful only if it is contained in unpacking stub.

Why does Delphi stop my application, when I use function SICE_Detect_Boundschecker?
This is because of INT 3 command contained in function (there are some other functions which contain it too). INT 3 uses Delphi to set breakpoints, so Delphi thinks, the INT 3 is a breakpoint. If you want to get rid of it, I recommend you to use compiler directives {$DEFINE} and {$IFDEF} to define a value, for example RELEASE ({$DEFINE RELEASE}) and use {$IFDEF} every time, you call an ACLib function. Then, undefine RELEASE to disable ACLib (when you are debugging it) and define it again in releases.