Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
(In)security allgemein Sicherheit, Anonymität im Netz. Schutz und Maßnahmen. Prävention und Konzepte. Sicherheitsarchitekturen allgemein und auf der Netzwerkebene.

Schutz vor dekompilieren von C#-Anwendungen bzw. von .NET

Diskussion: Schutz vor dekompilieren von C#-Anwendungen bzw. von .NET im Forum (In)security allgemein, in der Kategorie Security Area; Anzeige Hallo Leute, da ich zur Zeit ein Programm am programmieren bin, welche eine Testverion ist und ich mein Programm ...

Antwort
Alt 24.07.08, 02:12   #1 (permalink)
 
Registriert seit: 28.05.08
the_uxreal Leistung: Facit NTK
Likes: 0
Standard Schutz vor dekompilieren von C#-Anwendungen bzw. von .NET

Anzeige

Hallo Leute,

da ich zur Zeit ein Programm am programmieren bin, welche eine Testverion ist und ich mein Programm bestmöglich schützen will, möchte ich euch einfach fragen. Soweit wie ich verstanden habe, kann man mithilfe des .NET Reflector an den Quellcode des Programms drankommen. Das möchte ich aber verhinden!

Nun, es gibt die Obfuscatoren, welche aber auch nicht den bestmöglichen Schutz bieten. Zudem würde hier erwähnt: [schwer] KeygenMe! , dass das Abfragen wie beisielsweise mit einen

Code:
if (eingegebenerLizenzschlüssel.Text == getLizenzschlüssel() )
// nur Beispiel!
keine sichere Variante ist. Wie soll ich sonst prüfen ob der Serial gültig oder ungültig ist?

Zudem ist es auch möglich im Arbeitsspeicher auf die Adressen der Variablen zuzugreifen und die einzelnen Werte der Variablen auszulesen. Gibt es da auch Schutzmöglichkeiten?

Was muss ich nun alles beachten, damit es für die Cracker so schwierig wie möglich ist? Wie kann ich meinem Programm bestmögliche Sicherheit bieten? Was muss ich alles beachten? Man kann nie sagen, dass etwas wirklich sicher ist. Alles was verschlüsselt ist, kann man auch wieder entschlüsseln ;) . Aber was gibt es für Möglichkeiten?

Daniel ?(
the_uxreal ist offline   Mit Zitat antworten
Alt 24.07.08, 11:03   #2 (permalink)
Moderator
 
Benutzerbild von lightsaver
 
Registriert seit: 19.06.06
lightsaver Leistung: Pentium Ilightsaver Leistung: Pentium Ilightsaver Leistung: Pentium I
Likes: 52
Standard

CDW hat dazu doch bereits einige Tips gegeben, wie du die Abfrage sicherer machen kannst bzw. wie es allgemein besser geht.

Ansonsten kann ich dir aus eigener Erfahrung noch sagen, dass diese Obfusicator manchmal mehr Probleme bereiten, als sie scheinbar lösen. Habe schon erlebt, dass ein Programm danach nicht mehr lief.
An dieser Stelle halte ich es also eher so, dass ich persönlich nichts zum Schutz des Quelltextes mache, oder ich verwende gleich eine andere Sprache. Nur wie du ja an den c-keygenmes auch siehst ist, dass es ja auch ohne Quelltext zu knacken ist Verschwende also nicht zu sehr deine Energie auf die Schutzmechanismen, denn wenn einer es knacken will (und Ahnung hat), dann schafft er es ziemlich sicher
lightsaver ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 24.07.08, 13:49   #3 (permalink)
Themenstarter
 
Registriert seit: 28.05.08
the_uxreal Leistung: Facit NTK
Likes: 0
Standard

Hallo lightsaver,

wie ich schon sagte: "Alles was verschlüsselt ist kann man auch wieder entschlüsseln". Wenn sich einer dransetzt und das Programm versuchen will zu cracken, jedoch es aber schwieriger ist wäre es möglich das der jeniger aufgibt. Aber Schutz schadet doch nicht, wird jedoch nicht viel bringen, aber immerhin etwas.

Was gibt es noch für Möglichkeiten sich davor zu schüutzen, abgesehen von einem Obfuscator?

Daniel
the_uxreal ist offline   Mit Zitat antworten
Alt 24.07.08, 16:40   #4 (permalink)
Member of Honour
 
Benutzerbild von beavisbee
 
Registriert seit: 22.02.07
beavisbee Leistung: Pentium IIIbeavisbee Leistung: Pentium IIIbeavisbee Leistung: Pentium IIIbeavisbee Leistung: Pentium III
beavisbee eine Nachricht über ICQ schicken
Likes: 77
Standard

Zitat:
Original von the_uxreal
wie ich schon sagte: "Alles was verschlüsselt ist kann man auch wieder entschlüsseln".
es gibt bei weitem nicht für jede Verschlüsselung auch eine Entschlüsselung...

Viele Verschlüsselungs- oder Hash-Verfahren sind nur über den Umweg der Bruteforce-Attacke zu knacken... und das kann ziemlich lange dauern, wenn es den verschlüsselten Code nicht in irgend einem RainbowTable gibt...

Wenn ich mich nicht täusche, hat CDW dich (oder jmd. anderen mit ähnlicher Frage?) schonmal auf das Thema der asynchronen Verschlüsselungsverfahren hingewiesen...

http://de.wikipedia.org/wiki/Asymmet...s_Kryptosystem
http://de.wikipedia.org/wiki/Hash-Funktion
http://de.wikipedia.org/wiki/Salted_Hash
beavisbee ist offline   Mit Zitat antworten
Alt 24.07.08, 17:05   #5 (permalink)
CDW
Moderator
 
Benutzerbild von CDW
 
Registriert seit: 20.07.05
CDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: Opteron
Likes: 202
Standard

Kennst Du http://www.s-a-ve.com/faq/Anti-Cracking-Tips-2.htm ?
Das sicherste wäre es, die Testversionen um Funktionen zu beschneiden (praktisch zu einer Demo umfunktionieren) und die Vollversionen nur nach Bezahlung zu verteilen. Der Code, der nicht in der Anwendung vorhanden ist, kann auch schlecht gecrackt werden (allerdings erinnere ich mich daran, dass für irgendein Programm die fehlende(Speicher?)Funktion nachgeschrieben wurde )
Verschlüsselungsverfahren werden i.R dazu genutzt, um Teile des Codes zu entschlüsseln - der Kunde braucht also nur die Lizenz einzugeben und muss nichts weiter herunterladen. Da gibt schon tolle Möglichkeiten, wo durch unterschiedliche Lizenzen unterschiedlich viel Code freigeschaltet wird.
Vom Risiko her halte ich aber beide Verfahren für etwa gleichwertig - denn in beiden Fällen würde eine Weitergabe des Keys/Programms den Mechanismus aushebeln.
Von solchen Programmen wird eben gesagt "kann man nur mit Key cracken".
Ein bekannter Shareware HexEditor wäre z.B ein Beispiel.

Was noch interessanter ist und immer mehr aufkommt - CodeVirtualisierung und Code Morphing. Naja, eigentlich eher Buzzwörter weil beides darauf hinausläuft, den vorhandenen Code zu nehmen und entweder in virtuellen umzuwandeln (Befehlssatz einer VirtualMachine) oder aufzublähen (Anweisungen werden durch Serien von gleichwertigen Anweisungen ersetzt - mehr Code - mehr Aufwand). Da wäre man aber wieder fast schon bei Obfuscatoren angekommen.

Zu VMs: z.B Oreans (Themida, CodeVirtualizer, WinLizence) setzt darauf, die haben anscheinend einen dynamischen Generator der jedesmall für eine Intel-Opcode Instruction eine anders codierte VM-Opcode(Folge) generiert, so dass der Cracker erstmal (im Idealfall natürlich ) die VM im alleingang decodieren müsste um hinter die Programmlogik zu kommen.

Nachteile der beiden Methoden - VM Code wird interpretiert, der gemorphte Code einfach nur aufgebhläht - beides kann man für zeitkritische Codeteile nicht gebrauchen.
Und zweitens: es gibt meistens ganz andere Schwachpunkte.
Die Name-Key-Check Routinen sind meistens "perfekt" geschützt. Zwar gibt es ja den Spruch "alles kann geknackt werden" - aber es setzt sich kaum jemand daran, 10 000 Zeilen Code zu analysieren und den Algorithmus daraus zu extrahieren. Die Checkroutine ist nämlich nur die halbe Miete - die meisten Patzer passieren bei den Prüfungen im Programmablauf selbst (ob das Programm registriert ist).
__________________
Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf!
Selig, wer nichts zu sagen hat und trotzdem schweigt.
CDW ist offline   Mit Zitat antworten
Alt 24.07.08, 17:19   #6 (permalink)
 
Registriert seit: 18.10.06
_Atze_ Leistung: Facit NTK
Likes: 0
Standard

salted hash klingt ja richtig gut, war mir auch neu aber hätte man drauf kommen können!
_Atze_ ist offline   Mit Zitat antworten
Alt 24.07.08, 20:59   #7 (permalink)
 
Registriert seit: 07.03.08
90nop Leistung: Facit NTK
Likes: 0
Standard

Also ich finde den Ansatz, die Serial zu interpretieren sehr interessant. Ein Teilstück der Serial könnte z.B. so aussehen:
Code:
5b4c4b3a5-.....
Nun könnte man zb. sagen, dass alle Buchstaben für Operatoren stehen;
Code:
a = +
b = -
c = *
d = /
Dann erhällt man:
Code:
5-4*4-3+5
... und berechnet das Ergebnis. Dieses Ergebnis verwendet man nun an ein paar Stellen im Code, um damit zu arbeiten.

Natürlich muss man sich noch viel mehr ins Zeug legen, um mit diesem simplen Beispiel etwas brauchbares zu entwerfen, aber so als Grund Idee ist es ganz lustig.

Ich habe mal ein Crackme in dem Stil begonnen zu schreiben, hänge aber momentan noch mit einem Keygen, der valide Serials generiert.

lg
90nop ist offline   Mit Zitat antworten
Alt 24.07.08, 23:36   #8 (permalink)
Themenstarter
 
Registriert seit: 28.05.08
the_uxreal Leistung: Facit NTK
Likes: 0
Standard

Hallo 90nop,

bietet das wirklich den bestmöglichen Schutz vor dem Dekompilieren? Ich hab so eine ähnliche Methode schon ausprobiert. Kleines Beispiel: Wenn beispielsweise der erste Serial länger(bei geraden Zahlen!) als 8 oder gleich dann nehme die Mitte und teile es z.B. durch die Quersumme mal das erste Zeichen und und die kleinste Zahl mal sich selber multiplizieren.

Würden diese kryptischen Verfahren oder auch wie deine was bringen? Jedoch habe ich festgestellt das es länger dauert den Lizenzschlüssel zu berechnen, sogar mehr als 5 Sekunden! Sehen wir einfach mal über die Performance hinüber .

Bringt das wirklich Schutz?

Daniel
the_uxreal ist offline   Mit Zitat antworten
Alt 24.07.08, 23:51   #9 (permalink)
Member of Honour
 
Benutzerbild von +++ATH0
 
Registriert seit: 02.04.05
+++ATH0 Leistung: K 6-3+++ATH0 Leistung: K 6-3+++ATH0 Leistung: K 6-3
Likes: 76
Standard

Zitat:
Also ich finde den Ansatz, die Serial zu interpretieren sehr interessant.
So etwas kann man unter anderem hier [1] in Aktion sehen.

[1] Keygenme #2 --solved by +++ATH0
+++ATH0 ist offline   Mit Zitat antworten
Alt 25.07.08, 00:53   #10 (permalink)
Themenstarter
 
Registriert seit: 28.05.08
the_uxreal Leistung: Facit NTK
Likes: 0
Standard

Hallo +++ATH0,

wie sieht es mit der Sicherheit aus? Hat das Vorteile?

Aber die Sachte hört sich gut an ... .

Daniel
the_uxreal ist offline   Mit Zitat antworten
Alt 25.07.08, 09:56   #11 (permalink)
CDW
Moderator
 
Benutzerbild von CDW
 
Registriert seit: 20.07.05
CDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: Opteron
Likes: 202
Standard

genauso hatten wir es mal hier:
https://www.buha.info/board/showthre...hlight=crackme
ist allerdings kein Quellcode oder ähnlches dabei - der Grundgedanke war, die Serial als Anweisungsfolgen zu interpretieren (also als Opcodes) und war selbst für diese Größe schon recht anstrengend zu durchschauen.

Zu der Sicherheit: es kommt auch auf das Gesamtkonzept an . D.h
Code:
...
superkomplexer_check_algo
superkomplexer_check_algo
superkomplexer_check_algo
superkomplexer_check_algo

irgendwo: registered_flag=true;

superkomplexer_check_algo
superkomplexer_check_algo
bringt nichts, wenn sonst später
Code:
 if (registered_flag==true) then erweiterte_funktion_verfügbar
  else "dies ist eine demo"
zum Einsatz kommt.
__________________
Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf!
Selig, wer nichts zu sagen hat und trotzdem schweigt.
CDW ist offline   Mit Zitat antworten
Alt 25.07.08, 19:28   #12 (permalink)
Themenstarter
 
Registriert seit: 28.05.08
the_uxreal Leistung: Facit NTK
Likes: 0
Standard

Hallo CDW,

nun bin ich etwas verwirrt. Ich hab alles druchgelesen, jedoch nicht verstanden wie ich mich davor schützen kann ?( .

Soweit wie ich verstanden habe, sollte ich den Code möglichst kompliziert aufbauchen, aber was bringt mir das nun, wenn man das Programm mithilfe eines Obfuscators das Programm wiederherstellen kann? Das man hundertprozentigen Schutz nicht bieten kann ist mir klar, jedoch möchte ich es sicher wie möglich haben, sprich Schutz vor Reverse Engineering hat man nie. Was ist mit den Arbeitsspeicher, dort ist es auch möglich z.B. Strings herauszusuchen.

Wie ist es nun mit einer if-Abfrage? Es muss doch eine Abfrage stattfinden, welche dem Anwender sagt ob der eingegebene Lizenzschlüssel richtig oder falsch ist.

Daniel

P.S.: Man könnte den Thread als Sticky setzen, damit andere es nachlesen können. Es gibt bestimmt einige Andere .
the_uxreal ist offline   Mit Zitat antworten
Alt 25.07.08, 19:50   #13 (permalink)
CDW
Moderator
 
Benutzerbild von CDW
 
Registriert seit: 20.07.05
CDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: Opteron
Likes: 202
Standard

Zitat:
aber was bringt mir das nun, wenn man das Programm mithilfe eines Obfuscators das Programm wiederherstellen kann?
Also ein guter Obfuscator lässt sich nicht mehr so ohne weiteres entfernen

Zitat:
Wie ist es nun mit einer if-Abfrage? Es muss doch eine Abfrage stattfinden, welche dem Anwender sagt ob der eingegebene Lizenzschlüssel richtig oder falsch ist.
Bsp:
Code:
byte[] decrypt_key=extract_decrypt_key(licence, Username);
decrypt(erweiterte_funktion1,decrypt_key);
int crc=bilde_crc/sha1(Adresse_erweiterte_funktionen);
if crc==12345
{
   set_flag(licence_flags,homeedition);
}
decrypt(premium_funktion,decrypt_key);
int crc=bilde_crc(adresse_premium_funktion)
if crc==54321
{
  set_flag(licence_flags,premiun_basic_edition)
}
...
if (licence_flags.isSet())
   Msg "der key war richtig!"
else "falsch!!!";
}
Man kann hier als Cracker nichts mit den Werten anfangen, da sie nur CRCs darstellen (sofern man natürlich ein normales Verschlüsselungsverfahren verwendet und nicht XORt ).
Wird hier die IF-Abfrage gepatcht, wird zwar der falsche Key erstmal aktzeptiert, das Programm stürtzt aber beim ausführen der vollversion Funktionen ab.
Die große Schwäche ist hier wie immer, dass der Cracker irgendwann mal den Key bekommt. Hier könnte nur eine Keybindung an die Hardware helfen.
__________________
Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf!
Selig, wer nichts zu sagen hat und trotzdem schweigt.
CDW ist offline   Mit Zitat antworten
Alt 26.07.08, 01:48   #14 (permalink)
Themenstarter
 
Registriert seit: 28.05.08
the_uxreal Leistung: Facit NTK
Likes: 0
Standard

Hallo CDW,

meinst du also, dass man aus den Lizenzschlüssel einen CRC32-Wert generiert und diesen mit einer If-Abfrage prüft? So ganz hab ich das nicht verstanden.

Daniel
the_uxreal ist offline   Mit Zitat antworten
Alt 26.07.08, 11:05   #15 (permalink)
 
Benutzerbild von Eydeet
 
Registriert seit: 14.04.06
Eydeet Leistung: Facit NTK
Likes: 4
Standard

Die Premium-Funktionen werden auf Basis des Lizensschlüssels entschlüsselt. Für die entschlüsselten Funktionen wird eine Prüfsumme berechnet. Wenn diese korrekt ist, wird ausgegeben, dass der Lizensschlüssel richtig ist.

Wenn der Cracker nun die Überprüfung der Prüfsumme rauspatcht bringt ihm das nichts, da die Premium-Funktionen immer noch verschlüsselt sind.

Ist das verständlicher?
Eydeet ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Security Area » (In)security allgemein » Schutz vor dekompilieren von C#-Anwendungen bzw. von .NET
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Anwendungen auf die GPU auslagern Black Doom Off topic-Zone 9 18.10.09 20:04
Knoppix WIN Anwendungen PinFi Linux/UNIX 5 25.11.04 21:34
Linux Anwendungen und xp Jayday Windows 5 09.05.04 11:40
Sourcecode von Anwendungen extrahieren Aggress0r Code Kitchen 5 06.03.04 23:22
Integrierte Anwendungen? SiRRiuS Windows 4 13.08.02 19:33


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61