Einzelnen Beitrag anzeigen

Benutzerbild von IBExpert
IBExpert

Registriert seit: 15. Mär 2005
646 Beiträge
 
FreePascal / Lazarus
 
#14

AW: Source Code verschlüsseln

  Alt 8. Jun 2020, 13:20
Hallo Zusammen,
Ich denke wahrscheinlich gibt es keine Lösung dafür, aber ich frage trotzdem mal
Wir sind ein relativ großes Team von Entwicklern, die in Delphi an einer großen Software entwickeln. Das Projekt wird per SVN verwaltet. Da einige Programmbereiche unser "Cola-Rezept" enthalten, möchte ich ungern, dass der Quellcode dieser Stellen für alle Entwickler sichtbar ist.
so als Idee mal das was wir für einen sehr großen Konzern mit dem quellcode gemacht haben, auf den er meinte, zwar das Recht zu haben, diesen zu bekommen, obwohl er nicht den vollen Angebotsbetrag zahlen wollte und wir die voll funktionale delphi exe schon ausgeliefert hatten. Nachdem es einen Meinungsaustausch mit dem Projektverantwortlichen gab (vorher hatte der seine Meinung, nachher hatte der meine Meinung), haben die dann doch voll bezahlt und wir brauchten das nicht mehr, war aber damals schon einsatzbereit, hab ich aber leider nicht mehr ohne intensive suche. Die Motivation war aber ja im Endeffekt eine andere, und es ist auch keineswegs unentschlüsselbar, aber jemand der das komplett verstehen will, braucht dafür schon einiges an zeit und aufwand.

wir haben da (vor ca 17 Jahren, aber das geht gfg noch ähnlich heute) folgendes gemacht

Im prinzip war das ganze ein Non standard obfuscator/uglifier oder wie auch immer man das nennt.

1. Alle eigennamen (variablen, eigene typen, konstanten, functions, procedures) wurde aus dem quelltext ausgelesen und in eine Datenbank gepackt (mit referenz, wo das denn herkommt usw, was ein wenig tüftelei, aber war die mühe und den Spaß wert).
2. Diese Eigennamen wurde dann durch möglichst kurze ersetzt, die mit random funktionen erzeugt wurden aus 1.zeichen a-z, rest immer a-z+0-9 und dann per suchen/ersetzen im gesamten Quellcode
3. sämtliche Stringkonstanten aus dem code wurde ersetzt durch eine funktion, die eine random key mit einer damit erzeugten hex konstante für den eigentlichen String als parm bekommt, die decode function dazu hatte ein bekannter in fiesem inline assembler erstellt, die war dann natürlich im code enthalten, aber für leute mit durchschnittsknow how nicht verständlich
4. sämtliche zeilenvorschübe wurde da wo es die Pascalsyntax zulässt entfernt und an abstrusen anderen stellen wieder ergänzt. Die maximale codezeilenlänge wurde fast immer ausgenutzt, so das teilweise 4-5 befehle in einer zeile waren
5. sämtliche kommertare (auch die automatisch erzeugten) wurde entfernt, dafür würde abstruse kommentare aus einem lexikon ergänzt
6. Während ich das gebaut hab, habe ich immer wieder die Aufrufsyntax und Darstellung der Software geprüft, es war am Ende immer noch funktional identisch zu dem was der original quellcode erzeugt hatte
7. einige andere typische sprachelemente wurde dann auch ncoh vergewaltigt oder ergänzt, variableninhalte würden ziemlich sinnlos verändert, also hochgerechnet, danach irgendwann vor der nächsten echten benutzung wieder runter usw.

der weiterhin compilierbare quellcode machte das gleiche was das gesamte Projekt machte, liess sich aber ähnlich gut lesen wie direkter hex code der exe, ich hatte das einem
Bekannten gezeigt mit sehr guten Delphi Kenntnissen und der sagte, das wäre für ihn keine chance, da auch nur irgendwas drin zu verstehen, geschweige denn sinnvoll zu debuggen und das war ja das ziel

trotzdem hätte damit jemand bei entsprechendem Aufwand eine Version erzeugen können, die wieder mehr oder weniger benutzbar ist.

Wenn es aber um Teamwork geht und nicht darum, voll compilierbaren unverständlichen sourcecode zu haben, dann würde ich die sensiblen Units halt gar nicht als pas verfügbar machen, sondern nur als dcu, das würde den o.a. aufwand ersetzen und ist seit jahren von Komponentenherstellern ein bewährstes verfahren, wird ja auch von einigen hier so vorgeschlagen.
Holger Klemt
www.ibexpert.com - IBExpert GmbH
Oldenburger Str 233 - 26203 Wardenburg - Germany
IBExpert and Firebird Power Workshops jederzeit auch als Firmenschulung
  Mit Zitat antworten Zitat