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

[HaBo]

 
Hacks & Crackmes Tests, Fragen oder Hilfestellungen. Crackmes und Hackits werden hier diskutiert.

[schwer] KeygenMe!

Diskussion: [schwer] KeygenMe! im Forum Hacks & Crackmes, in der Kategorie Software Home; Anzeige Hallo Leute, da ich zur Zeit an einem Projekt am entwickeln bin, welches ein Testversion ist und gerne wissen ...

Antwort
Alt 20.07.08, 18:47   #1 (permalink)
 
Registriert seit: 28.05.08
the_uxreal Leistung: Facit NTK
Likes: 0
Standard [schwer] KeygenMe!

Anzeige

Hallo Leute,

da ich zur Zeit an einem Projekt am entwickeln bin, welches ein Testversion ist und gerne wissen würde ob diese sicher genug ist, möchte ich ein KeygenMe eröffnen. Das das KeygenMe ist C# geschrieben. Der Serial besteht aus drei Teilen z.B. für den Namen "Daniel" wäre es "XXXXXX-XXXXXXXXX-XXXXXXX". Statt den "X" stehen Zahlen. Die Zahlen stehen nicht in Hex. oder ähnliches. Abweichungen zwischen den "X"en sind möglich. Die Verschlüsselung ist von mir eine eigen ausgedachte. Wenn es jemand schafft dies zu knacken bzw. den Lösungsweg oder einen Keygen zu erstellen werde ich vielleich den Quellcode der Verschlüsselung posten. Ich wünsche euch viel spaß und Kopfzerbrechen bei der Sache, nicht negativ gemeint :P . Das Programm befindet sich im Anhang.

Schönes Wochenende!
Daniel

Angehängte Dateien
Dateityp: rar KeygenMe!.rar (4,0 KB, 36x aufgerufen)
the_uxreal ist offline   Mit Zitat antworten
Alt 20.07.08, 18:55   #2 (permalink)
 
Registriert seit: 05.10.05
Inliferty Leistung: 8086
Inliferty eine Nachricht über ICQ schicken
Likes: 5
Standard

Code:
private void button1_Click(object sender, EventArgs e)
{
    int num = this.textBox1.Text[0] * '?';
    num += num + (this.textBox1.Text.Length * 0x1ee8f);
    int num2 = this.textBox1.Text[this.textBox1.Text.Length / 2] * '㣨';
    num2 *= 0x7b;
    num2 += (this.textBox1.Text.Length * 2) % 2;
    num2 *= num2 - Convert.ToString(num2).Length;
    int num3 = this.textBox1.Text.Length * this.textBox1.Text[this.textBox1.Text.Length - 1];
    num3 *= 0x19d5;
    num3 += this.textBox1.Text[this.textBox1.Text.Length - 1] + '忻';
    string str = string.Concat(new object[] { num, "-", num2, "-", num3 });
    if (this.textBox2.Text == str)
    {
        MessageBox.Show("Gratulation! Der Serial ist richitig.", "Richtig", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
    }
    else
    {
        MessageBox.Show("Der Serial ist falsch!", "Versuch es nochmal ;)", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
    }
}
Such mal bei Google nach .NET Reflector.
Ist also nicht wirklich schwer :p

Mfg Inliferty
Inliferty ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 20.07.08, 18:59   #3 (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

Und vor allem sind Plaintextvergleiche IMMER böse
beispiel, ganz ohne Reflector   

starten in Olly, name+irgendeine Serial eingeben, mit ALT+M Speicherbereiche anzeigen,
mit ALT+B nach der Eingabe suchen - in der Nähe befindet sich i.R die richtige Serial.
CDW
470673-1675880736-1750651

Sonst nimmt man einfach den Code aus Reflector und lässt ihn die Serial ausgeben
__________________
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 20.07.08, 19:09   #4 (permalink)
Themenstarter
 
Registriert seit: 28.05.08
the_uxreal Leistung: Facit NTK
Likes: 0
Standard

Hallo ihr Beiden,

ging ja wirklich schnell! Gibt es Möglichkeiten zu verhindern, dass es möglich ist die Anwendung zu dekompilieren?

@CDW: Wie ist es sonst möglich den Serial zu vergleichen ob diese gültig oder ungültig? Eine Abfrage mit beispielsweise "if" muss doch stattfinden, wie soll es sonst gehen?

Daniel
the_uxreal ist offline   Mit Zitat antworten
Alt 20.07.08, 19:31   #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

Naja, in dem man vielleicht keine fertige Serial generiert, sondern Teile davon überprüft.
Bsp:
Code:
int k=name[1]*serial[1];
if serial[2]!=k return false;
natürlich sehr sehr simpel. Aber so in etwa geht es. Man muss auch bedenken, dass das superkomplizierteste Verfahren nichts bring, wenn anschließen ein Vergleich in der Art stattfindet (if (checkkey()==true) then vollversionverhalten). Also muss auch der Rest des Konzepts stimmen.

Wenn man es richtig "professionell" machen möchte, sucht man sich paar gute mathematische Funktionen, die nicht so schnell umkehrbar sind.
Z.B RSA Verfahren - man verschlüsselt als Programmierer seine Serials mit dem Privatkey und lässt das Programm mit dem öffentlichen (im Programm hinterlegten) Key diese Eingabe entschlüsseln. Die Werte nutzt man nun (ungeprüft) als Initialisierungswerte in irgendwelchen Funktionen. D.h wenn jemand das Programm soweit manipuliert, dass es jeden Schlüssel als richtig annimmt, wird es anschließen mit falschen Werten arbeiten.
Auch beliebt sind Spielereien mit Hashverfahren (SHA1 usw).

Ist aber in jeder Hinsicht eine komplizierte Sache (Usergängelung vs. Schutzfaktor) - sonst würde sich ja auch die gaaanz großen Firmen nicht den Kopf darüber zerbrechen
__________________
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 20.07.08, 21:26   #6 (permalink)
Themenstarter
 
Registriert seit: 28.05.08
the_uxreal Leistung: Facit NTK
Likes: 0
Standard

Hallo CDW,

wenn ich jetzt nun ein zweites Programm programmiere, wo ich aber die RSA-Verschlüsselungssystem verwende, dann muss es doch möglich sein über den .NET Reflector den Quelltext meinenes Programmes auszulesen und dessen Schüssel zu bekommen! Jetzt bin ich verwirrt. Wenn es mit den .NET Reflector möglich ist den Quelltext meines Programmes fast 1:1, sprich 1 zu 1 darzustellen, dann bleiben mir sogut wie keine Möglichkeiten. Entweder ich habe eure "Gedankengänge" nicht verstanden oder ich verstehe irgendwie etwas falsch.

So wie ich es verstanden habe, muss ich einen RSA-Schlüssel haben um den Lizenzschlüssel zu entschlüsseln. Aber ist das nicht ein Wiederspruch in sich? Macht das die Sache nicht nur noch unsinniger? Bin ich auf dem falschen "Denk-Trip"? Nochmal kurz gefasst wie ich das verstanden habe: Ich brauche einen RSA-Schüssel wo mit ich den Lizenzschlüssel meines Programms ver- bzw. entschlüsseln kann. Dieser RSA-Schlüssel muss doch irgendwo liegen, somit kann ein Anderer diesen Schlüssel benutzen und selber einen Serial generieren. Der zweite Aspekt ist, dass man via .NET Reflector den Quelltext meines Programms auslesen!

?(

Daniel
the_uxreal ist offline   Mit Zitat antworten
Alt 20.07.08, 22:33   #7 (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

Also, gegen den Reflektor gibt es Obfuscatoren: http://de.wikipedia.org/wiki/Obfuscator
da ich mich nicht wirklich mit NET befasse, kann ich Dir leider da keine genaueren Programmnamen nennen (außer denen, die schon im Wikiartikel stehen).

Zu RSA: es eignet sich jedes asynchrone Verschlüsselungsverfahren.
http://de.wikipedia.org/wiki/Asymmet...s_Kryptosystem
Vielleicht habe ich mich nur missverständlich ausgedruckt - es ist nicht der wirklich private Key von RSA gemeint, sondern der, mit dem man verschlüsselt. Der andere, mit dem man entschlüsselt, kann öffentlich sein.
Alternativ verwendet man RSA nur zur Signierung und von übermittelten Keys.

Dabei geht es eigentlich nur darum, dem Angreifer möglichst viele Informationen über die Serial vorzuenthalten und die Werte der Serial für irgendwelche "Lebenswichtigen" Funktionen des Programms zu benutzen - es ist dann die bestverfügbare Überprprüfung.

Falls Du magst, kannst Du Dir das hier anschauen:
http://www.buha.info/board/showthread.php?t=52103
http://www.buha.info/board/showthrea...754#post381754
ist zwar lang, aber da werden so einige Ansätze besprochen.
__________________
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 20.07.08, 23:09   #8 (permalink)
Themenstarter
 
Registriert seit: 28.05.08
the_uxreal Leistung: Facit NTK
Likes: 0
Standard

Hallo CDW,

vielen Dank für die Hilfe!

Schönes Wochende noch!
Daniel
the_uxreal ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Software Home » Hacks & Crackmes » [schwer] KeygenMe!
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
schwer zustellende frage gugugs (Web-) Design und webbasierte Sprachen 8 12.03.08 16:34
sehr schwer! ^mn =) Hacks & Crackmes 23 06.08.06 00:55
IP-Spoofing: Wie schwer? Elderan (In)security allgemein 24 26.11.04 16:48


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