| (In)security allgemein Sicherheit, Anonymität im Netz. Schutz und Maßnahmen. Prävention und Konzepte. Sicherheitsarchitekturen allgemein und auf der Netzwerkebene. |
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 ...
![]() |
| | #1 (permalink) |
| Registriert seit: 28.05.08 ![]() Likes: 0 | 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! 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 ?( |
| | |
| | #2 (permalink) |
| Moderator ![]() Registriert seit: 19.06.06 ![]() ![]() ![]() Likes: 52 | 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 |
| | |
| HaBOT | - Anzeige - |
| |
| | #3 (permalink) |
| Themenstarter Registriert seit: 28.05.08 ![]() Likes: 0 | 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 |
| | |
| | #4 (permalink) | |
| Member of Honour ![]() | Zitat:
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 | |
| | |
| | #5 (permalink) |
| Moderator ![]() Registriert seit: 20.07.05 ![]() ![]() ![]() ![]() ![]() ![]() Likes: 202 | 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 )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 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. |
| | |
| | #6 (permalink) |
| Registriert seit: 18.10.06 ![]() Likes: 0 | salted hash klingt ja richtig gut, war mir auch neu aber hätte man drauf kommen können! |
| | |
| | #7 (permalink) |
| Registriert seit: 07.03.08 ![]() Likes: 0 | Also ich finde den Ansatz, die Serial zu interpretieren sehr interessant. Ein Teilstück der Serial könnte z.B. so aussehen: Code: 5b4c4b3a5-..... Code: a = + b = - c = * d = / Code: 5-4*4-3+5 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 |
| | |
| | #8 (permalink) |
| Themenstarter Registriert seit: 28.05.08 ![]() Likes: 0 | 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 |
| | |
| | #9 (permalink) | |
| Member of Honour ![]() Registriert seit: 02.04.05 ![]() ![]() ![]() Likes: 76 | Zitat:
[1] Keygenme #2 --solved by +++ATH0 | |
| | |
| | #10 (permalink) |
| Themenstarter Registriert seit: 28.05.08 ![]() Likes: 0 | Hallo +++ATH0, wie sieht es mit der Sicherheit aus? Hat das Vorteile? Aber die Sachte hört sich gut an ... . Daniel |
| | |
| | #11 (permalink) |
| Moderator ![]() Registriert seit: 20.07.05 ![]() ![]() ![]() ![]() ![]() ![]() Likes: 202 | 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 Code: ... superkomplexer_check_algo superkomplexer_check_algo superkomplexer_check_algo superkomplexer_check_algo irgendwo: registered_flag=true; superkomplexer_check_algo superkomplexer_check_algo Code: if (registered_flag==true) then erweiterte_funktion_verfügbar else "dies ist eine demo"
__________________ Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf! Selig, wer nichts zu sagen hat und trotzdem schweigt. |
| | |
| | #12 (permalink) |
| Themenstarter Registriert seit: 28.05.08 ![]() Likes: 0 | 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 |
| | |
| | #13 (permalink) | ||
| Moderator ![]() Registriert seit: 20.07.05 ![]() ![]() ![]() ![]() ![]() ![]() Likes: 202 | Zitat:
Zitat:
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!!!";
} 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. | ||
| | |
| | #14 (permalink) |
| Themenstarter Registriert seit: 28.05.08 ![]() Likes: 0 | 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 |
| | |
| | #15 (permalink) |
| Registriert seit: 14.04.06 ![]() Likes: 4 | 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? |
| | |
![]() |
| - Anzeige - | |
| |
| Themen-Optionen | |
| Ansicht | |
| |
Ä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 |