Kopierschutz für Batch-Dateien

Hi,

ich entwickle seit einiger Zeit kleine Scripte in Batch, kix oder PHP. Nun ist aber ein Sonderfall aufgetreten: Eine andere grössere Firma möchte gern meine Entwicklungen übernehmen und vermarkten. Dass ich mir jetzt Sorgen ob Lizenzbedingungen mache, ist ja wohl schnell klar, oder? Ich suche daher eine Möglichkeit, einen Kopierschutz in meine Batchdateien einzubauen und diese in Exe-Dateien umzuwandeln. Batch2Exe-Konverter gibt es zwar ne Menge, doch wer kann mir Tips geben, mit welchem Programm ich evtl. einen guten Kopierschutz hinbekomme? Ich hatte schon an Lösungen gedacht wie die SID des Users oder des Rechners, aber schliesslich bräuchte ich dazu ein entspr. Freischalt-Modul, welches dann den Code errechnet…

Kopierschutz?

Hj Cj MatSel,

einen Kopierschutz für einzelne Dateien? Verstehe ich nicht. Du meinst sicher die Geheimhaltung des Quellcodes, oder?

Grüße,

Mohamed.

Hi,

ich entwickle seit einiger Zeit kleine Scripte in Batch, kix
oder PHP. Nun ist aber ein Sonderfall aufgetreten: Eine andere
grössere Firma möchte gern meine Entwicklungen übernehmen und
vermarkten. Dass ich mir jetzt Sorgen ob Lizenzbedingungen
mache, ist ja wohl schnell klar, oder? …

Hallo,

ein Kopierschutz geht immer auf Kosten des Benutzers, ohne dass er den geringsten Vorteil davon hat. Diesen Konflikt muss jeder Programmierer für seine Verhältnisse selbst lösen.

Ich betreibe Software in der Preisklasse > 10 kEUR mit Dongle und Freischaltcode, aber ich nehme das nur notgedrungen in Kauf. Ein Skript mit Kopierschutz käme niemals in Frage.

Ausserdem erhebt sich immer die Frage, was aus der Software wird, wenn Autor oder Vertrieb nicht mehr erreichbar sind. Ich würde auch kein Geld ausgeben für Software, die ich möglicherweise schon nächstes jahr oder nach einem Rechnerwechsel nicht mehr benutzen kann. Oder kannst du mir garantieren, dass mein PC niemals kaputtgeht? Du weisst ja nicht einmal, ob du nächstes Jahr noch lebst.

Gruss Reinhard

Hi Reinhard,

grundsätzlich hast Du recht: Ich bin eigentlich ein Freund von Open Source. Es geht hier allerdings nicht darum, dass man bei einem Rechnertausch nicht anrufen und einen neuen Code beantragen kann, sondern darum, dass Installationen freigeschaltet werde müssen. Dadurch, dass ich für eine Firma tätig bin, ist die Sachlage ob der Erreichbarkeit anders: Meine Entwicklungen sind für das Unternehmen und stehen insofern diesem auch als Quelltext zur Verfügung. Eine hundertprozentige Sicherheit gibt es nicht, weder für den Kopierschutz noch für einen Ausfall des PCs. Dennoch möchte ich den Aufwand erhöhen, den es braucht, um meine Software zu kopieren. Leider muss auch ich etwas essen können…

Zudem ist diese Diskussion ob Kopierschutz oder nicht, eine endlose Diskussion: es gibt verschiedene Meinungen und Gründe dafür und dagegen. Momentan nutze ich eine Prüfsumme, welche ich aus Bestandteilen des Systems generiere. Das war meine Überlegung von gestern abend. Jetzt muss ich nur noch die Quelltexte des Programmes verbergen… Kennst Du Möglichkeiten und Lösungen hierzu?

cu,
cjmatsel

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi,

naja, eigentlich hast Du Recht: Eine Möglichkeit, den Code geheim zu halten, ist das Ziel… Kennst Du eine Software dafür?

cu,
cjmatsel

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Batch einbetten
Hallo CJ MatSel,

Du schriebst:

naja, eigentlich hast Du Recht: Eine Möglichkeit, den Code
geheim zu halten, ist das Ziel… Kennst Du eine Software

Für HTML-Seiten habe ich so etwas schon mal gesehen, für Batch-Dateien noch nicht. Aber ich hätte da eine Idee: Ich habe vor einiger Zeit in Java MS-DOS-Befehle ausführen lassen, es lässt sich ohne Probleme eine komplette Batchdatei in ein Javaprogramm schreiben, und man muss nicht einmal auf die MS-DOS-Syntax verzichten (Befehlszeilen werden als Strings an spezielle Klassen übergeben). Und Javaprogramme werden ja kompiliert und somit der Quelltext unkenntlich gemacht.

Das gleiche dürfte mit einigen anderen Programmiersprachen auch gehen.

Viele Grüße,

Mohamed.

Zweifel!!!

Hallo CJ MatSel,
es lässt sich ohne Probleme eine komplette Batchdatei in ein
Javaprogramm schreiben, und man muss nicht einmal auf die
MS-DOS-Syntax verzichten (Befehlszeilen werden als Strings an
spezielle Klassen übergeben). Und Javaprogramme werden ja
kompiliert und somit der Quelltext unkenntlich gemacht.

Hallo Mohamed,

der Javacode (auf den es ja nicht ankommt) wird zwar ev. kompiliert (s.u.) und ist daher nicht mehr als Sourcetext vorhanden, die DOS-Befehle sind aber Stringkonstanten. Nimm einen Hexeditor und du wirst sie mit einiger Sicherheit im der EXE-Datei wiederfinden, egal ob C, Pascal, Java oder sonstwas.

Und abgesehen davon wird Java normalerweise NICHT kompiliert.

Gruss Reinhard

… Jetzt muss ich nur noch die
Quelltexte des Programmes verbergen… Kennst Du Möglichkeiten
und Lösungen hierzu?

Hallo,

du brauchst wohl einen B2E-Compiler mit Sourcecode, damit du deine Freischalt/Verschlüsselungsroutinen einfügen kannst. Bleibt die Frage, warum du dann nicht gleich „richtige“ Software schreibst anstatt Shell-Scripte.

Ausserdem solltest du das Ergebnis prüfen, ob wirklich der Sourcetext verschwunden ist, siehe meine Antwort an Java-Mohamed.

Gruss Reinhard

Hallo Fragewurm,

ich entwickle seit einiger Zeit kleine Scripte in Batch, kix
oder PHP. Nun ist aber ein Sonderfall aufgetreten: Eine andere
grössere Firma möchte gern meine Entwicklungen übernehmen und
vermarkten. Dass ich mir jetzt Sorgen ob Lizenzbedingungen
mache, ist ja wohl schnell klar, oder?

Am einfachsten wäre es wohl einen entsprechenden Geheimhaltungsvertrag mit diesem Unternehmen zu vereinbaren.

Ich suche daher eine
Möglichkeit, einen Kopierschutz in meine Batchdateien
einzubauen und diese in Exe-Dateien umzuwandeln.
Batch2Exe-Konverter gibt es zwar ne Menge, doch wer kann mir
Tips geben, mit welchem Programm ich evtl. einen guten
Kopierschutz hinbekomme?

Es ist recht einfach den Batchcode wieder herzustellen, besonders für am Markt übliche B2E-Programme gibt es auch Decompiler. Wenn du selber etwas schreibst bist du besser dran.

Allerdings wenn man einfach den Batch nur irgendwie verschlüsselt und zur Laufzeit auspackt ist da die Schwachstelle, da wärend der Ausführung der Sourcecode offen vorliegen muss.
Der E2B muss also den Batch in entsprechende API-Aufrufe umwandeln.

MfG Peter(TOO)

Danke für deine Tips,

Das ist soweit recht interessant, allerdings habe ich jetzt mal versucht, meine mit 3 verschiedenen Programmen codierten Batches wieder zu decompilieren. Nur eines bietet speziell eine Funktion dafür an, die anderen Programme nicht… Auch habe ich keine Temp-Dateien zur Laufzeit oder verräterische Spuren mit einem Hex-Editor gefunden. Kannst Du mir weitere Tips geben, wie man an den Quellcode wieder rankommen würde?

cu,
cjmatsel

Nicht unberechtigt

Hallo CJ MatSel,
es lässt sich ohne Probleme eine komplette Batchdatei in ein
Javaprogramm schreiben, und man muss nicht einmal auf die
MS-DOS-Syntax verzichten (Befehlszeilen werden als Strings an
spezielle Klassen übergeben). Und Javaprogramme werden ja
kompiliert und somit der Quelltext unkenntlich gemacht.

Hallo Mohamed,

der Javacode (auf den es ja nicht ankommt) wird zwar ev.
kompiliert (s.u.) und ist daher nicht mehr als Sourcetext
vorhanden, die DOS-Befehle sind aber Stringkonstanten. Nimm
einen Hexeditor und du wirst sie mit einiger Sicherheit im der
EXE-Datei wiederfinden, egal ob C, Pascal, Java oder sonstwas.

Stimmt. Zur Not kann man ja die Strings (z.B. mit einfacher Alphabetverschiebung oder Ähnlichem) verschlüsselt in den Java-Code schreiben und sie immer an eine entschlüsselnde Methode übergeben, die anstelle des offenen DOS-Textes eingesetzt wird.

Und abgesehen davon wird Java normalerweise NICHT kompiliert.

Jein, natürlich wird kein ausführbarer Maschinencode daraus gemacht, aber eine .class-Datei ist für den Otto-Normal-Nutzer kaum von Wert, wenn er den Quellcode wissen möchte. Die Ausnahme bilden natürlich Fortgeschrittene Programmierer und natürlich die von Dir erwähnten Strings.

Grüße,

Mohamed.

Muss wohl meinen Artikel verbessern: alle drei Programme hinterlassen eine Batch-Datei im Klartext… Mist… Habe schon überlegt, die Programmaufrufe direkt in Java zu schreiben… Aber ich muss in solchem Fall komplett umdenken…

Danke für die Hinweise und Tips

cu,
cjmatsel

Hi,

Und abgesehen davon wird Java normalerweise NICHT kompiliert.

Jein, natürlich wird kein ausführbarer Maschinencode daraus
gemacht, aber eine .class-Datei ist für den Otto-Normal-Nutzer
kaum von Wert, wenn er den Quellcode wissen möchte. Die
Ausnahme bilden natürlich Fortgeschrittene Programmierer und
natürlich die von Dir erwähnten Strings.

Verstehe ich nicht, ich brauch doch das SDK, um Java-Programme zu erzeugen… Danach kann man sie nicht mehr zurückkomilieren, dachte ich…

cu,
cjmatsel

Hallo cjmatsel,

Verstehe ich nicht, ich brauch doch das SDK, um Java-Programme
zu erzeugen… Danach kann man sie nicht mehr
zurückkomilieren, dachte ich…

Zumindest disassemblieren geht bei jedem Programm.

Bei Java wird meist in P-Code übersetzt und dieser ist schon recht gut lesbar. Zudem werden bei Hochsprachen viele Funktionen einfach nur aufgerufen und wenn man den selben Compiler selber hat, hat man auch die Debugversion der entsprechenden Bibliotheken …

OK, die Namen der Variablen und eigenen Funktionen gehen beim Compilieren normalerweise verloren …

Aber Batchdatein sind eigentlich recht einfach gestrickt und wenn du die Namen der Funktionen kennst hast du schon den halben Source-Code beisammen.

MfG Peter(TOO)

Hallo cjmatsel,

Muss wohl meinen Artikel verbessern: alle drei Programme
hinterlassen eine Batch-Datei im Klartext… Mist… Habe
schon überlegt, die Programmaufrufe direkt in Java zu
schreiben…

Solange der B2E über die Shell geht, muss da immer eine Batch erstellt werden.
Nur wenn der B2E direkt in API-Aufrufe umsetzt muss die Batch nicht erstellet werden, aber dann ist es eine eigene Programmiersprache.

MfG Peter(TOO)

hallo cj

batchfiles sind out, vbskript ist in. vbskript kann man von haus aus so speichern, dass es zwar noch ausgeführt werden kann aber nicht mehr in lesbarer form vorliegt. selbstverständlich sollte man sich vorher eine lesbare kopie angelegt haben…

vbskript ist generell weitaus mächtiger als die alten batchfiles und meist komfortabler zu programmieren. es setzt allerdings einen installierten vbskript-interpreter sowie einen windows skript host voraus. beides ist allerdings seit windows 98 praktisch standard.

ein dekompilieren der verschlüsselten vbskript-dateien wird vermutlich grundsätzlich möglich sein, ist aber eher schwierig und von otto-normalverbraucher nicht bewerkstelligbar. aber exe-dateien kann man ja auch dekompilieren…

erwin

Hallo,

der Javacode (auf den es ja nicht ankommt) wird zwar ev.
kompiliert (s.u.) und ist daher nicht mehr als Sourcetext
vorhanden, die DOS-Befehle sind aber Stringkonstanten. Nimm
einen Hexeditor und du wirst sie mit einiger Sicherheit im der
EXE-Datei wiederfinden, egal ob C, Pascal, Java oder sonstwas.

Wenn man einen Exe-Packer verwendet, verschachtelts aber die Strings und Ressourcen bei Exe Dateien :smile: Nur wie bekommt man aus Java ne Exe raus?

bye,
Christoph

Hmm,
danke für den Tip. N bisschen VB kann ich… Muss mich dann
wohl in solch eine Sprache einfuchsen… Kannste mir Tips
geben oder was zum Lesen, wie VBScript kodiert wird?

cu,
cjmatsel

hallo cj

batchfiles sind out, vbskript ist in. vbskript kann man von
haus aus so speichern, dass es zwar noch ausgeführt werden
kann aber nicht mehr in lesbarer form vorliegt.
selbstverständlich sollte man sich vorher eine lesbare kopie
angelegt haben…

vbskript ist generell weitaus mächtiger als die alten
batchfiles und meist komfortabler zu programmieren. es setzt
allerdings einen installierten vbskript-interpreter sowie
einen windows skript host voraus. beides ist allerdings seit
windows 98 praktisch standard.

ein dekompilieren der verschlüsselten vbskript-dateien wird
vermutlich grundsätzlich möglich sein, ist aber eher

schwierig

und von otto-normalverbraucher nicht bewerkstelligbar. aber
exe-dateien kann man ja auch dekompilieren…

erwin

Hi Peter,

gibt es irgendwo ne Kurzdoku mit „Hallo Welt“ oder sowas für
Java? Ich würd mir das gern mal anschauen…

cu,
cjmatsel

Hallo cjmatsel,

Muss wohl meinen Artikel verbessern: alle drei Programme
hinterlassen eine Batch-Datei im Klartext… Mist… Habe
schon überlegt, die Programmaufrufe direkt in Java zu
schreiben…

Solange der B2E über die Shell geht, muss da immer eine

Batch

erstellt werden.
Nur wenn der B2E direkt in API-Aufrufe umsetzt muss die

Batch

nicht erstellet werden, aber dann ist es eine eigene
Programmiersprache.

MfG Peter(TOO)

Ne Batch mit dem Aufruf „java -jar Programm“, und das mit nem
B2E-Konverter als Projektfile (also die Batch und das
Jar-File) mit Endung Exe speichern… CAD-KAS bot solch ein
Tool an… :wink:

cu,
cjmatsel

Hallo,

der Javacode (auf den es ja nicht ankommt) wird zwar ev.
kompiliert (s.u.) und ist daher nicht mehr als Sourcetext
vorhanden, die DOS-Befehle sind aber Stringkonstanten. Nimm
einen Hexeditor und du wirst sie mit einiger Sicherheit im

der

EXE-Datei wiederfinden, egal ob C, Pascal, Java oder

sonstwas.

Wenn man einen Exe-Packer verwendet, verschachtelts aber die
Strings und Ressourcen bei Exe Dateien :smile: Nur wie bekommt

man

aus Java ne Exe raus?

bye,
Christoph