Stellt euch vor ihr schreibt ein Programm, das ihr als Binary ausliefert. Um es vor Änderungen (Cracks etc.) zu schützen, soll es sich beim Aufruf selbst überprüfen. Mir ist klar, dass es keinen 100%igen Schutz gibt, aber es geht mir um eine möglichst einfache und relativ sinnvolle Methode, so etwas umzusetzen. Am besten geht es wohl mit einer MD5-Prüfsumme. Das Programm erstellt also eine MD5-Prüfsumme von sich selbst. Kein Problem bis hier hin.
Nun aber muss die MD5-Prüfsumme mit einem Wert verglichen werden. Die Schwierigkeit besteht darin, dass dieser Wert keine extern liegende .md5 Datei (Textdatei) sein soll, sondern dass sich dieser Wert im Binary selbst befinden muss. Wenn beide Summen übereinstimmen, wurde die Datei nicht verändert.
Bei einer externen .md5-Datei könnte man das Binary verändern und die .md5-Datei dahingehend manipulieren, dass beide Werte wieder übereinstimmen. Das ist zu einfach.
Wenn der Wert der korrekten MD5-Prüfsumme aber im Binary selbst liegt und dieses verändert wird, stimmt anschließend das Ergebnis des vom Binary durchgeführten "SelfTests" nicht mehr mit dem Wert überein und eine Änderung kann sofort festgestellt werden.
Die große Frage: Wie krieg ich die korrekte MD5-Prüfsumme in das Binary. Ich kann ja schlecht einen Platzhalter benutzen, die MD5-Summe des Binaries berechnen und die dann anstelle des Platzhalters einsetzen, weil sich der Wert anschließend verändern würde. Wie also dann?
Also rein theoretisch könnte man das über einen BruteForce-Test lösen

