warum Nachdenken bei der Softwareentwicklung so wichtig ist…



Also. Betrachten wir mal den absolut hypothetischen aber praxisorientierten Fall, das ich eine kommerzielle Applikation programmiere und diese verkaufen möchte. – Der übliche Weg ist dann der folgende:




  1. ich programmiere die Applikation und implementiere Einschränkungen/Zeitbeschränkungen – das übliche eben


  2. dann überlege ich mir einen schicken Algorithmus der mir einen gegebenen Wert (z.B. Nutzername) mit einem Schlüssel verbindet (Serial, Key, Seriennummer…)


  3. ich implementiere den Algorithmus und die Überprüfungsroutinen (stimmt der eingegebene Key auch ?)


  4. ich verteile die Software und wenn jemand mein Produkt kauft dann gibts Schlüssel gegen Geld…

Im Beispiel sieht das dann so aus:



Natürlich ist im Beispiel die Routine sehr vereinfacht – eine ROT13 Kodierung ist nicht besonders kreativ..aber es ist ja ein Beispiel und Kreativ-Preise gibts auch nicht.


Nun – worüber beschwere ich mich ? Ganz einfach… wir haben nun unsere Applikation in Form der Assembly… starten wir sie mal:



Ja natürlich. Wir haben ja noch keinen Keygen. – Nehmen wir mal an wir würden nicht einfach die ROT13 Routine kopieren…sondern von der anderen Seite:



Wir öffnen die Assembly einfach mal im Reflector(was das genau ist hab ich ja schon hier beschrieben). – Der Reflector zeigt nun die ganze Sache schon recht klar an… eine Methode zum prüfen und der ROT13 Encoder. – Hätte ich einen Obfuscator benutzt, ständen die Namen der Methoden und die Variablennamen nicht im Klartext dort… bzw. die Methoden sähen im Source etwas verquer aus…aber who cares…



Sieht interessant aus… der ROT13 Encoder sieht irgendwie nicht sehr verändert aus 😉 – Der Quelltext aus dem Reflector ist direkt Copy-Paste fähig – also .. hinein in den Schlüsselgenerator – die Kunden warten:



Also fix besagtes Copy-Paste – noch schnell die Werte zuweisen und schwupps…



Der Gegentest zeigt, das funktioniert:



Jetzt die Frage: Was will man erreichen ? – Will man einen sicheren Seriennummern-Check oder will man einen Placebo der seinen Zweck nicht erfüllt ?


Obiges ist ein Placebo – mehr nicht – ich frage mich seit geraumer Zeit wieso jemand überhaupt so etwas implementiert – das in meinen Augen einzig sichere Verfahren ist einfach keinerlei solcher Seriennummer-Überprüfungen einzubauen sondern eine Test- und eine Vollversion anzubieten(welche sich auch in den Assemblies unterscheiden) – alles andere ist vertane Zeit in der man sinnvolle Features hätte entwickeln können.

Applikation zum selberspielen gibts hier…

  1. #1 by pro on January 6, 2005 - 14:39

    was is denn gegen code obfuscator tools einzuwenden?

    es gibt auch zahllose tools, die noch viel weiter gehen
    freischaltbare apps sind also nicht so gefährdet wie dir das vorkommt

  2. #2 by Bietiekay on January 6, 2005 - 15:43

    dann werd doch mal konkret: welche obfuscate-Tools legen die Messlatte denn höher – und wie ?

  3. #3 by pro on January 6, 2005 - 20:59

    armadillo zb verschlüsselt das komplette image und entschlüsselt nur den teil, der gebraucht wird

    es gibt auch tools, die ersetzen x86-code durch eigene ops, die in einer virtual machine ausgeführt werden (armadillo nanomites)

    dann gibts tools, die kerneltreiber mitbringen und dort sicherheitsrelevanten kram ausführen und herbes anti-debugging betreiben (themida)

    dann gibts welche, die benutzen mehrere encryption layer, die auchnoch polymorph sind, also bei jedem ausführen anders aussehen

  4. #4 by Bietiekay on January 6, 2005 - 21:45

    hmm… – klingt teuer 😉 werd ich mir mal bei Gelegenheit anschauen – aber so ganz koscher klingen die alle nich, so rein was Geschwindigkeit oder Preisgestaltung angeht

  5. #5 by Jtb on February 12, 2007 - 19:52

    Nun ja, man muss für sowas eine Analyse machen, wer denn die Anwendung benutzen soll und wie hoch der Preis ist. Jemand, der genug Knowledge hat so eine Sicherheitsmaßnahme zu umgehen, wird sich zweimal überlegen, ob er nicht dafür Geld zahlen will.

    Lösung: in die signed Assembly einen Public Key einbauen und die License-File mit dem privaten Key zu signieren. Will der böse Cracker (bitte nicht Hacker) die Assembly modifizieren wird die Signatur ungültig. Zwar auch nicht unmöglich zu umgehen aber schon anspruchsvoller 🙂

  6. #6 by bietiekay on February 12, 2007 - 21:27

    das ist so etwa auch das was ich heute auf eine Frage in diese Richtung geantwortet habe.

Comments are closed.