As, according to the Wiki (
http://wiki.lazarus.freepascal.org/OnGuard), Graeme Geldenhuys is the coder for the current version of Onguard for Free Pascal, I guess he'll answer to you better that I can do.
Anyway, if you just have a quick glance ate the source code (i.e. onguard.pas), you'll see that there is an additional field for the TCode record.
"Original" version:
TCode = packed record
CheckValue : Word; {magic value}
Expiration : Word; {expiration date or 0, if none}
case Byte of
0 : (FirstDate : Word; {for date code}
EndDate : Word);
...
Graeme's version (note the new InvalidCount field):
TCode = packed record
CheckValue : Word; {magic value}
Expiration : Word; {expiration date or 0, if none}
InvalidCount : Word; {count of respected invalid code accidents,normally 0}
case Byte of
0 : (FirstDate : Word; {for date code}
EndDate : Word);
...
***EDIT ***
Extract of Graeme's ReadMe.txt:
- initial support for InvalidCount value allowing 'breaking the rules' limited , for example run program a few times if trial period expired