Reverse Engineering

Hallo zusammen


Erstmal kurz was über mich: Programmieren kann ich in VB, VB.NET, PHP und verstehe C++... ASM ansatzweise, reicht zum Patchen, und zum lösen mittlerer CrackMEs. Soweit so gut.

Jetzt zum eigentlichen Thema:
Nun habe ich des öfteren gelesen, in DE (gilt es auch für die EU?) sei Reverse Enineering nicht erlaubt, oder zumindest nur für den 'privaten' gebrauch/Forschung, stimmt das soweit?

Weiss zufälligerweise auch jemand, ob dies in anderen Ländern auch so ist? (ich komme aus der Schweiz, konnte aber noch keine richtigen Informationen dazu finden...)

Gab es bis anhin bereits Prozesse gegen Cracker? Ne, oder täusche ich mich?

Wie würdet ihr ein Linzen/Aktivierungs-Schema aufbauen? Gibts da brauchbare Tutorials oder Beispiele?

Grundsätzlich dachte ich da an die PC-Hardware Bindung, nur angeblich werden da die Rechte des Benutzers 'eingeschränkt', was eigentlich nicht zulässig wäre...

Besten Dank, und ich freue mich auf alle netten Antwortet!

LG
Netonator
 
Also das reversen von Programmen ist genau dann nicht erlaubt, wenn es in der EULA steht. Soweit ich weiß ist es gesetzlich nicht geregelt, halt nur, dass du nicht gegen die EULA verstoßen darfst. Das einzige Programm (auf dem Markt) was du legal reversen darfst ist mein ich IDA. Ansonsten halt noch crackmes, exploitmes usw.

Prozesse gab es bis dato vor allem gegen jene die sich angeschickt haben gecrackte Programme zu verteilen ;)

Zu dem Lizenz-/Aktivierungsschema, am sichersten ist da eine asymmetrische Verschluesselung bestimmter Programmteile. Der Privatekey sollte sich dabei entweder direkt im Rechner (TPM) oder auf ner Smartcard sein. Dazu noch ne Wasserzeichen im Programm und ne kleine Klausel in der EULA, dass wenn einem sein Programm abhanden kommt, dass man fuer saemtliche Schaeden aufkommt. Ich glaube so sicherst du dich sehr gut gegen Produktpiraterie ab. Abschließend stellen sich nur 2 Fragen.
1. Lohnt sich der Aufwand?
2. Kauft wer eine so geschuetze Software?
 
So pauschal kann deine Frage nicht beantwortet werden.
Aber du hast erstmal Recht in Bezug auf privates Reverse Engineering, wer sollte
auch klagen es entsteht kein Schaden und niemand erfährt davon. ;)
Im Bereich Forschung wird es immer eine Einzelfallentscheidung sein und du müsstest
schon einen guten Grund haben, um hier etwas veröffentlichen zu dürfen.

Ja es gibt und gab Prozesse gegen "Cracker" z.B.DeCSS, wobei der Begriff
Cracker ja schon wieder nicht definiert ist und gleich wieder ein Flamewar zum
Thema Hacker/Cracker ausbricht. ;(
Meist wird allerdings gegen die Verbreitung der "Cracks" vorgegangen, da der Cracker
selbst eher selten namentlich bekannt ist.

Lesestoff zum Thema Lizenz(EULA)/Aktivierung/Kopierschutz und ihre aktuelle
rechtliche Bewertung gibt es hier:

http://www.jurpc.de/aufsatz/20090028.htm

Keine Garantie das es sich in einem halben Jahr noch so verhält.

Gruss
 
Hallo,
Original von xrayn
Also das reversen von Programmen ist genau dann nicht erlaubt, wenn es in der EULA steht. Soweit ich weiß ist es gesetzlich nicht geregelt, halt nur, dass du nicht gegen die EULA verstoßen darfst.
Das schöne ist nur, dass eine EULA die bei der Installation angezeigt wird rechtlich überhaupt keine Relevanz hat, selbst wenn man dieser zugestimmt hat.

Siehe: Fallstricke im End User License Agreement
 
Hallo zusammen

Danke erstmals für alle Antworten, schliesslich sind konstruktive Beiträge nicht in jedem Forum an der Tagesordnung...

Das schöne ist nur, dass eine EULA die bei der Installation angezeigt wird rechtlich überhaupt keine Relevanz hat, selbst wenn man dieser zugestimmt hat.

Die Fallstricke EULA habe ich übrigens gelesen, stimmt auch so garantiert.

Ganz einfach erklärt:
Sobald Du Geld für eine Ware gibst, wird der Verkaufsvertrag durchgeführt (i.d.R. sogar stillschweigend). Das heisst, zum Zeitpunkt der Installation ist der Verkaufsvertrag schon abgeschlossen, somit gilt diese nicht.
Man muss die EULA vor dem kauf aushändigen/bereit stellen.

---

Natürlich gibt es Cracker und Cracker. Davon unterscheide ich persönlich zwei Sorten, die legalen und Illegalen.
Ich denke solange ein Cracker für sich selbst lernt, wie etwas funktioniert oder gerne CrackMes von anderen löst, ist es absolut kein Thema.

---

Das License/Aktivierungsschema der meisten Firmen halte ich für schwachsinn.
(z.B. Adobe Photoshop CS 3). Ich würde sogar behaupten, sobald sich der Algo zur überprüfung des (CD) Key in der eigentlichen Applikation befindet, hat man bereits verloren.

Ob sich der Aufwand lohnt ist noch von was ganz anderem abhängig:

Ist es eine Nischen-Software (Branchen spezifisch) oder von allg. nutzen verwendbar?
Ist es Branchenabhängig, ist Benutzerkreis schon stark eingeschränkt.


Also hiermit sind eigentlich meine Fragen beantwortet.

Kennt einer von euch vielleicht ein Aktivierungsshema das speziell ist?

LG & fröhliches coden

Netonator
 
Such einfach mal nach diesen Dongle's, die sind AFAIK am sichersten. Kosten natrülich auch am meisten, da es sich um spezial Hardware handelt.

Das Problem ist dabei aber, die lassen sich nicht selber herstellen. (oder irre ich mich da jetzt?)
Grundsätzlich gelten alle kommerziellen Produkte oder Schutzmechanismen als unsicher...


fröhliches programieren

Netonator
 
Grundsätzlich gelten alle kommerziellen Produkte oder Schutzmechanismen als unsicher...
na wenn du das sagst.

Das Problem ist dabei aber, die lassen sich nicht selber herstellen. (oder irre ich mich da jetzt?)
Darum geht es ja. Diese Dongles haben eigene Recheneinheiten installiert, bez. Algorythmen in der Platine, welche praktisch nicht reversbar sind. Man müsste den Dongle aufbrechen, und anhand der Schaltungen den Algo wiederherleiten. Das kann nicht jeder. :)
 
Original von 90nop
Grundsätzlich gelten alle kommerziellen Produkte oder Schutzmechanismen als unsicher...
na wenn du das sagst.

Dann zeig mir mal einen Protector/Packer der nicht gecrackt wurde (Auser die paar Ausnahmen von Starforce)

Original von 90nop
Das Problem ist dabei aber, die lassen sich nicht selber herstellen. (oder irre ich mich da jetzt?)
Darum geht es ja. Diese Dongles haben eigene Recheneinheiten installiert, bez. Algorythmen in der Platine, welche praktisch nicht reversbar sind. Man müsste den Dongle aufbrechen, und anhand der Schaltungen den Algo wiederherleiten. Das kann nicht jeder. :)

Dongles lassen sich genauso reversen, gibt einige Tutorials dazu im Internet.
 
Original von xrayn
[...]
Zu dem Lizenz-/Aktivierungsschema, am sichersten ist da eine asymmetrische Verschluesselung bestimmter Programmteile. Der Privatekey sollte sich dabei entweder direkt im Rechner (TPM) oder auf ner Smartcard sein.
[...]
 
Hallo zusammen


Grundsätzlich weiss jeder, der sich nur minim mit der Thematik befasst, dass kein Uncrackbarer Schutz existiert.

m.E. gibt es höchstens das 'beinahe unmöglich' oder 'mit extremen Aufwand' lösbar, und somit sieht ein Cracker vielleicht davon ab...

Dann zeig mir mal einen Protector/Packer der nicht gecrackt wurde (Auser die paar Ausnahmen von Starforce)

Das wil ich auch sehen! Mir ist so etwas nicht bekannt.

Die einzige Ausnahme, die auch genannt wurde (im gelinkten post), wäre bei einem MMOG der Server; der hauptsächlich die funktionalität der Software zur Verfügung stellt. Wobei hier zu beachten gilt, bei normaler Software ist das gar nicht implementierbar. Mal ganz abgesehen von denn Kosten und Verfügbarkeit...


[..] direkt im Rechner (TPM) oder auf ner Smartcard sein [...]

Was ist den ein TPM? und was soll der Vorteil einer Smartcard bitte sein? (Wäre ja fast wie ein Dongle?!)
Wie aufwändig wäre es den mehere Funktionen und Subs einzeln zu dumpen und wieder zusammen zu kleben, bis das Programm komplett unentschlüsselt ist?

Zu den Dongles:
Dongels sind umständlich für den Kunden, die Kosten ungerechtfertigt. Ist es dazu noch ein Kommerz Dongel gibt es sowieso Lösungsansätze, da müsste man schon den Chip selber programmieren und ein Security through obscurity erreichen, was auch bei anderen Schutzmechanismen sehr nützlich sein kann.

fröhliches coden & cracken (natürlich nur CrackMes ;))

Netonator
 
Dongels sind umständlich für den Kunden, die Kosten ungerechtfertigt.
Bei Produkten die pro Einzeplatzlizenz 800.- kostet, da sind die Kosten für den Dongle nicht entscheident. :)


TPM --> http://de.wikipedia.org/wiki/Trusted_Platform_Module ;) Das ist eben ein Chip auf den Dongles. Gibt z.B. auch Mainboards die einen TPM haben, um so die HDs zu verschlüsseln...

Dann zeig mir mal einen Protector/Packer der nicht gecrackt wurde (Auser die paar Ausnahmen von Starforce)
WIndows XP? Windows Vista?
Die wurden nie "wirklich" geknackt (bei XP bin ich mir nicht ganz sicher) - bei Vista ist zwar ein Developer Activation Patch im Umlauf, der aber auch von MS kommt :/ Natürlich kann man bei XP sowie Vista die aktivierung umgehen, aber der wirkliche Schutz wurde eher umgangen als geknackt.

Im überigen reden wir hier über Dongles, dass man gepackte / cryptete Programme entpacken kann ist wohl jedem klar. Wobei gut implementierte crypter auch nicht jeder so mal neben bai knackt... Der Schutz bei Dongles kommt eben daher, dass man das Dongle auseinandernemen muss um das ganze zu knacken.


Wie aufwändig wäre es den mehere Funktionen und Subs einzeln zu dumpen und wieder zusammen zu kleben, bis das Programm komplett unentschlüsselt ist?
? hä?

Stell dir einfach vor, auf dem Dongle ist ein Prozessor sowie unabhängigen Code - das Programm übergibt dem Dongle irgendwelche Werte, und der Prozessor auf dem Dongle berechnet damit etwas und gibt das Resultat zurück - du bekommst die Funktion für die Berechnung nie zu Gesicht...
 
zum Thema TPM... das ist son kleiner Chip, der u.a. einen Private und einen Publickey drinne hat. Der Clou an der Sache ist, der private Key verlaesst niemals das Module. Sprich es gibt keine Moeglichkeit daran zu kommen. Nun laesst du dir vom Kiunden den Publickey geben, verschluesselst damit die Software und schickst es dem Kunden. Der fuettert dann sein TPM mit der Software, die wird dann im TPM entschluesselt und ausgefuehrt. gl && hf das zu cracken...
 
Danke erstmals für die Erklärung des TPM, interessant. ;)
Nun wie schon richtig erwähnt von 90nop, nicht bei allen
Produkten ist sowas Sinnvoll...

Windows XP? Windows Vista?
Die wurden nie "wirklich" geknackt (bei XP bin ich mir nicht ganz sicher)

Als ich habe einen Patch (für WinXP) der die Aktivierung 'umgeht/patched', was verstehst du denn genau unter 'knacken'?


Wie aufwändig wäre es den mehere Funktionen und Subs einzeln zu dumpen und wieder zusammen zu kleben, bis das Programm komplett unentschlüsselt ist?

Das bezog sich nicht auf den Dongel, sondern auf einen Packer/crypter...
Damit wollte ich wissen, ob es das Entpacken erschwert, wenn jede Sub/funktion erst bei gebrauch entschlüsselt wird. Somit wäre doch ein Dump des ganzen Images in einem rutsch nicht mehr möglich?
Wie lange hätte man nun um dies zu entpacken/zu knacken?

Lg & wie immer schön weiter coden :D
 
Damit wollte ich wissen, ob es das Entpacken erschwert, wenn jede Sub/funktion erst bei gebrauch entschlüsselt wird. Somit wäre doch ein Dump des ganzen Images in einem rutsch nicht mehr möglich?
Das hatte schon PCGuard in älteren Versionen. Der Entpackvorgang verzögerte sich um die Zeit, die man brauchte um ein OllyScript zu schreiben ;) :
1.suche nach Calls zu der Entschlüsselungsfunktion
2.rufe den Call auf
3. weiter mit 1, bis Ende.
das Script entschlüsselt den Codeblock und überschreibt die Cryptaufrufe mit NOPs.
geht natürlich auch kürzer, sofern man genug OllyScript Skillz hat ;)
Code:
var searchanfang
var searchende 
var calldest
var calladdress

go 45f2fb

mov searchanfang,40b990
mov searchende,457000

loop2:
find searchanfang,#E8#
cmp $RESULT,searchende
ja out2
cmp $RESULT,0
je out2

//prüfe, ob auch korrekter call
mov calladdress,$RESULT

inc $RESULT
mov calldest,[$RESULT]
add calldest,calladdress
add calldest,5
add calladdress,5
mov searchanfang,calladdress

//nicht, dann weitersuchen
cmp calldest,0e564c6
jne loop2 

mov eip,$RESULT
sub eip,6 //den Push berücksichtigen

go calladdress
//jetzt mit nops füllen
sub calladdress,0a //minus 12

fill calladdress,0a,90
jmp loop2


out2:

//encrypts entschärften

mov searchanfang,40b900
mov searchende,457000

loop3:
find searchanfang,#E8#
cmp $RESULT,searchende
ja out3
cmp $RESULT,0
je out3

//prüfe, ob auch korrekter call
mov calladdress,$RESULT
inc $RESULT
mov calldest,[$RESULT]

add calldest,calladdress
add calldest,5
add calladdress,5
mov searchanfang,calladdress

//nicht, dann weitersuchen
cmp calldest,0e56668
jne loop3

//jetzt mit nops füllen
sub calladdress,0a //minus 10

fill calladdress,0a,90

jmp loop3
out3:
Msg "Fertig!"
Je nach dem kann man es auch per Hand machen (wenn es z.B nur 4-5 verschlüsselte Blöcke gibt).

Btw: imho ist zwischen "theoretisch alles knackbar" und Praxis ein großer Unterschied . Wie hoch ist die Wahscheinlichkeit, dass irgendeine Nischensoftware mit paar 100 Zielpersonen überhaupt im Debugger landet? Sogar wenn man alle "ich kann Olly starten und Nags wegnoppen!!!" Leute berücksichtigt? Auserdem gibt es gar nicht so viele, die Themida&Co oder auch nur ASProtect&Armadillo "mit Links" entpacken können. Dass sie die Software also überhaupt zu sehen bekommen und dann auch noch für eine unbekannte 0815 Anwendung ihre Zeit aufwenden (ich spreche speziell von Leuten, die ihre Cracks auch releasen) halte ich doch eher für unwahrscheinlich. Besonders wenn CodeVirtulizer/Execrypter Funktionen geschickt eingesetzt wurden - sprich, wenn der Programmierer nicht nur auf "protect" Button geklickt hat, sondern ein paar Stunden in Dokulesen und Protectorlibs einbinden investiert. Da muss die Software schon einen relativ bekannt sein.

Genauso verhält es sich mit Donlges - TPM und Chips außen vor - nur den Fall vorausgesetzt, dass die Software mehr als nur einen "if dongle verfügbar then start else Msg 'Error' " beim Start hat, sondern auch paar Daten liest: Der Cracker muss dann 1) überhaupt Dongles reversen können, 2) an das Dongle herankommen.
Wie hoch ist also die Wahrscheinlichkeit, dass der böswillige Kunde die "richtigen" Connections hat bzw der "böse" Cracker ein Dongle ergattern kann?
 
Hy


[...] Je nach dem kann man es auch per Hand machen (wenn es z.B nur 4-5 verschlüsselte Blöcke gibt).[...]

Das Script, von dem du sprichst, dass kann ebefalls nicht jeder. Zudem funktioniert das nur, wenn immer die gleiche Funktion aufgerufen wird zum entschlüsseln.

Btw: imho ist zwischen "theoretisch alles knackbar" und Praxis ein großer Unterschied . Wie hoch ist die Wahscheinlichkeit, dass irgendeine Nischensoftware mit paar 100 Zielpersonen überhaupt im Debugger landet? Sogar wenn man alle "ich kann Olly starten und Nags wegnoppen!!!" Leute berücksichtigt? Auserdem gibt es gar nicht so viele, die Themida&Co oder auch nur ASProtect&Armadillo "mit Links" entpacken können. Dass sie die Software also überhaupt zu sehen bekommen und dann auch noch für eine unbekannte 0815 Anwendung ihre Zeit aufwenden (ich spreche speziell von Leuten, die ihre Cracks auch releasen) halte ich doch eher für unwahrscheinlich. Besonders wenn CodeVirtulizer/Execrypter Funktionen geschickt eingesetzt wurden - sprich, wenn der Programmierer nicht nur auf "protect" Button geklickt hat, sondern ein paar Stunden in Dokulesen und Protectorlibs einbinden investiert. Da muss die Software schon einen relativ bekannt sein.

Zweifellos hast du da recht, jedoch muss es sich effektiv um eine Nischensoftware handeln oder die Software ist nicht allg. gebräuchlich. Natürlich gibt es wenige die einen ASProtect&Armadillo entpacken können, aber schliesslich gibt es auch vorprogrammierte Unpacker.

Wenn ein Programmierer gerade mal, wie du schreibst, auf 'Protect' klickt und dannach im glauben lebt, es sei damit getan ist er m.E. einfach ein schlechter Programmierer. Das ist wie Auto fahren mit 3 Fahrstunden, da hast du zwar ahnung von, aber machst garantiert Fehler am laufenden Band.


Lg
Netonator
 
Original von Netonator
Das Script, von dem du sprichst, dass kann ebefalls nicht jeder. Zudem funktioniert das nur, wenn immer die gleiche Funktion aufgerufen wird zum entschlüsseln.
Lässt sich schnell ändern, um auch mehrere Cryptfunktionen zu erkennen ;)

Außerdem musst du bedenken:
1) Wieviele unterschiedliche Funktionen zum ent/verschlüsseln willst du überhaupt einsetzen - wieviele Funktionen können überhaupt verschlüsselt werden? Dazu du musst diese Funktionen vor dem Release in der Binary irgendwie verschlüsseln (manuell=viel Aufwand, mit Macros=auch nicht wenig).Eventuell ist der Aufwand zum Entpacken geringer (vor allem, wenn man es automatisieren kann). Denn man kann sich die Referenzcalls zu einer Funktion anzeigen lassen - damit hat man schon die Liste der Funktionen, die Entschlüsselt werden und kann sie gescritpet/manuell abarbeiten.

2)Wie soll die Ent/Verschlüsselung ablaufen? Denn warum soll die verschlüsselte Funktion beim Dumpen stören (vorausgesetzt, man muss überhaupt dumpen) - sofern die Ver/Entschlüsselungscode in der eigentlichen Codesection liegt? Man dumpt einfach alles mit und kann nur bei Bedarf (bei interessanten Funktionen) diese auch mal manuell oder gleich vom Codefluss selber entschlüsseln lassen - das Programm läuft ja munter weiter ;). D.h um effektiv jemanden zu stören, muss der Cryptcode im dynamischen Speicher liegen - er muss also beim Programmstart hineingeschrieben werden und natürlich müssen auch alle Verweise zu dem Code im Programm korrigiert werden (kann z.B mittels einer Adresstabelle umgesetzt werden). Dabei hast du auch das Problem, dass dein Cryptcode adressunabhängig sein muss.
Das ist gleichzeitig auch der große Angriffspunkt:
a) man kann bei dem Heap/VirtualAlloc/whatever - Speicherreservierung einfach eine passende Adresse zurückgeben und das Programm macht den Rest (schreibt den Code in den passenden Speicherbereich, z.B nach der letzen Programmsection - danach funktionert der Dump problemlos).
b) Adresstabelle/Korrekturfunktion kann man missbrauchen, um Adressen aller verschlüsselter Funktionen herauszufinden - dann entweder skripten oder im Debugger den Code so modifizieren, dass bei der "Korrektur" auch gleich die Funktionen entschlüsselt werden.

Zweifellos hast du da recht, jedoch muss es sich effektiv um eine Nischensoftware handeln oder die Software ist nicht allg. gebräuchlich. Natürlich gibt es wenige die einen ASProtect&Armadillo entpacken können, aber schliesslich gibt es auch vorprogrammierte Unpacker.
IMHO überschätzen viele kleine Firmen/Programmieren die Wichtigkeit ihrer Sofware ;). Sonst: i.R funktionieren Stripper nur dann gut, wenn der Programmierer wiederum nur auf den Protect-Button geklickt hat.
 
Original von CDW
IMHO überschätzen viele kleine Firmen/Programmieren die Wichtigkeit ihrer Sofware ;).
Jep :D

Netonator, fuer kleinere Firmen sollte es reichen den Programmcode ordentlich zu obfuscaten, denn glaub mir nichts ist fuer einen Cracker nerviger als richtig obfuscateten Code nachzuvollziehen (es sei denn, man kennt die Algorithmen, mit denen dies geschah) . Wenn du nicht sowas wie Photoshop, Vmware oder IDA neu erfunden hast, fehlt die Motivation sich durch sowas durchzuquaelen ;)
 
Zurück
Oben