Und wie bekomme ich ein Wasserzeichen in die Exe und wie kann ich es wieder auslesen?
Da gibt es dutzende Methoden.
Man könnte beispielsweise in den Linkerprozeß eingreifen und Code innerhalb der EXE verschieben. In der fertigen EXE wäre das dann abgebildet. Man kann das auch schon auf Quellebene machen und mit einem Skript für jeden Kunden eine andere - eindeutige - Anordnung der Routinen erzeugen.
Wasserzeichen können allerlei Formen annehmen, aber sie sind keine Signaturen im klassischen Sinne. Denn eine Signatur kannst du entfernen. Ebenso kann man den Check auf die Signatur entfernen. Wasserzeichen sind sowas wie Steganographie.