Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Da ich im Moment ein wenig Langeweile hatte, habe ich mich mal ein wenig mit Seriennummern beschäftigt und bin auf diese Forum gestoßen.
Jetzt würde ich gerne mal wissen wie gut/schlecht mein KeygenMe ist.
Kann leider nicht einschätzen ob er schwer oder leicht zu lösen ist
Achja, kein Patchen und die exe kommt direkt ausm C Compiler, also kein Packer.
Dein Keygenme ist viel zu umfangreich. I.R sollte man die Leute nicht durch die Menge an Code erschlagen, sondern durch etwas ausgefallenes - sonst wird es für die meisten schnell zu langweilig
Außerdem sollte das Szenario doch ein bisschen realistisch sein - sprich, man sollte das Verfahren "in echt" einsetzen können und (idealerweise) schon einen funktionierenden Keygen dafür besitzen
0000i00000a2k2a2a333JC9aS8hnuB5MZ9L
Das ist natürlich keine vollständige Lösung - der Key lässt sich allerdings größtenteils aus dem Speicher auslesen - in dem man die passenden Werte nachschaut (sind in Teilen vorhanden).
Nur Teil1 (die ersten 10 Ziffern) muss berechnet werden:
nach dem IDIV muss der Rest (EDX) 0x28 betragen, damit aus der "Hash"Tabelle (ASCII Zeichen zu ASCII Zeichen zuordnung) der hardkodierte Wert 0x6B (=='k')
ausgelesen werden kann.
- dafür lässt sich das Programm selbst einsetzen - einfach ein paar Zeilen Code hineinschrieben, die ersten 10 Ziffern der Serial auf 000000 setzen (ASCII 0x30, damit man die "gebrutete" Serial auch gut schreiben kann):
Naja, es war eher ein Projekt aus Langerweile, da es mich mal interresiert hat wie man Informationen in einem Schlüssel unterbringen kann. Ich denke ausgefallenes könnte man auch mit Komplexität gleichstellen oder nicht? Außerdem war es mein erster KeygenMe. Es gibt einen Key Generator, daher wäre es mal interesannt ob du, was ich mitlerweile nicht bezweifel, einen Keygen erstellen kannst. Hast du gute Tips bzw. Tutorials wie man des ganzen Code verschleiern (den Key nicht direkt im Speicher sichtbar darstellen weiß ich) bzw. etwas ausgefallenes einarbeiten kann, ich konnte nichts in der Richtung im Internet finden. Es ist mir klar das man den Code nicht verbergen kann, schließlich muss es ja jede CPU ausführen aber man kann es nur schwieriger machen. Das Patchen wäre für mich kein Problem gewesen, dass kann ich auch noch aus alten Zeiten, aber trotzdem Respekt.
Ich werden morgen den Code mal Posten, hab den grade nicht zur hand.
Original von escor Ich denke ausgefallenes könnte man auch mit Komplexität gleichstellen oder nicht? Außerdem war es mein erster KeygenMe. Es gibt einen Key Generator,
Dass es einen Keygenerator schon gibt, ändert die Sache natürlich. Es gibt ja auch einige "Spezialisten" die abenteuerlichste mathematische Sachen umsetzen, welche nicht mit vertretbarem Aufwand geknackt werden können und dann auf einen Keygen hoffen
daher wäre es mal interesannt ob du, was ich mitlerweile nicht bezweifel, einen Keygen erstellen kannst.
ein Keygen wäre einfach zu aufwändig für meinen Geschmack (kann leider auch nicht mehr so viel Zeit in Reversing investieren). Hatte den größtenteil des Keys relativ schnell heraus, allerdings dachte ich bei der Zeitfunktion erstmal, dass es sich um eine Art Antidebug-Trick handelt - und nachher nicht mehr die Geduld gehabt, diese auseinanderzunehmen (daher auch der Key für 2005).
Außerdem überschätzt du mich in dieser Hinsicht
Was den Aufwand als Abschreckung angeht - es gibt da einige Leute, die sich nicht zu schade sind, mehrere Wochen an einem Keygen zu sitzen.
ziemlich viel mit Code-Ripping machen (ganze Passagen herauskopieren) - IDA + OllyPlugins und MASM/NASM. Im Prinzip müsste man nur herausfinden, was es mit dem Datum auf sich hat - die ersten 10 Zeichen lassen sich in einer annehmbaren Zeit Bruteforcen (wenn man die Werte "richtig" erhöht und nicht so "dreckig" wie in meinem Schnipsel per DWORD inkrementation sollten diese sogar recht angenehm aussehen), die nachfolgenden 10 Zeichen hängen größtenteils mit dem Datum zusammen (lassen sich jedenfalls einzeln herausfinden) - der Rest wird im Klartext verglichen und würde sich auslesen lassen.
Hast du gute Tips bzw. Tutorials wie man des ganzen Code verschleiern (den Key nicht direkt im Speicher sichtbar darstellen weiß ich) bzw. etwas ausgefallenes einarbeiten kann, ich konnte nichts in der Richtung im Internet finden. Es ist mir klar das man den Code nicht verbergen kann, schließlich muss es ja jede CPU ausführen aber man kann es nur schwieriger machen.
Abgesehen von Lazarus (http://www.s-a-ve.com/faq/Anti-Cracking-Tips-2.htm) fällt mir nichts ein. Interessante Ansätze habe ich mehrmals bei Buha gesehen (Reverseengineering Bereich -> Keygenmes von nait, Cryptocrack usw) - dabei geht es um unumkehrbare mathematische Funktionen oder VMs.
Denn letzendlich geht es bei einem realen Schutz nicht nur um einen komplexen Keyalgo, sondern auch um das ganze Drumherum - sprich, es bringt nichts einen 50 stelligen Key abzufragen, wenn das ganze mit 2-3 JMPs wieder ausgehoben werden kann. https://www.buha.info/board/showthread.php?t=53952
Also grob gesagt (kommerziell) - RSA &Co benutzen, eventuell zusammen mit SHA-Hashs und eine VM einsetzen. Auch wenn es nicht sooo viel bringt wie immer in der Werbung behauptet wird (RSA hört sich halt gut an ) - man hat viel weniger Kopfschmerzen damit.
Wegen der VM:
(Stackbasierende) VMs lassen sich einfacher schreiben, als man glaubt - und der Aufwand diese zu entziffern ist um einiges höher. Mit Virtualmachine ist einfach eine Routine gemeint, die Bytes/Chars als Anweisungen interpretieren kann. Man überlegt sich also einen einfachen Machinencode und setzt diesen um
Der Key/Serial könnte also nicht nur Prüfziffer beinhalten, sondern "reelen" Code, der von der VM interpretiert wird. Bastelt man nun Keyprüfungen an einigen Stellen in seine Anwendung ein (irgendwas wichtiges initialisieren), kann man diese Checkroutinen nicht einfach überspringen oder patchen - ohne Keykenntniss eigentlich gar nichts machen.
Gemeinerweise könnte man nun a) den Interpreter mit Makros/#defines/OOP ziemlich aufblähen (nur darauf achten, dass dieser später nicht in zeitkritischen Sequenzen eingesetzt wird). b) den Interpreter hardwareabhängig machen - irgendwann werden bei der Initialisierung des Interpreters CPUID und noch paar Sachen abgefragt und verwendet - diese Werte verändern nun die Interpretation der Opcodes (ob es bei der Keyentschlüsselung schon angewendet wird oder erst im Interpreter selbst). Das hat zur Folge, dass auch ein gestohlener Key nicht so schlimm ist - denn dieser ist wirklich nur für eine Machine gültig. Um mit dem Key etwas anfangen zu können, wird der böse Cracker sich also a) die gleiche Hardware besorgen oder zumindest die Hardwareparamter auslesen b)trotzdem mit der VM auseinander setzen müssen oder zumindest damit, was die Instruktionen bewirken - und das kann verdammt zeitaufwändig sein. Das hebt den Schutz der Anwendung in ganz andere Dimensionen.
Danke für die Infos, das mit dem Bytecode habe ich mir auch schon überlegt und werde damit mal ein wenig rumspielen. Hier der Source, denke es sollte selbsterklärend sein.
scheint ja scho bissl herzu sein, aber mit elchem programm hast du das gemacht CDW? ist das Olly?? und brauch ich nur olly um was zu "cracken" (crackme) oder auch noch was anderes?
@sero: ja, alles in Olly. Theoretisch ist mit Olly alleine schon recht viel machbar.
Allerdings kommt es immer wieder auf den Zweck an - NET/Java/VB-PCode mit Olly zu zerpflücken hätte schon gewisse masoschistische Ansätze .
Sofern es Programme/Tools/Plugins gibt, die etwas besser können, sollte man sie auch einsetzen.
In diesem Fall kommt man aber gut mit Olly aus: man gibt einen Key an und verfolgt erstmal, was damit gemacht wird.Da gibt es hardcodierte Werte und Prüfungen, bei denen immer wieder einzelne Keyteile gegen bestimmte (hardcodierte oder vorberechnete) Werte geprüft werden. Das notiert man und setzt einen Schlüssel zusammen. Im Pinzip berechnet die Routine schon fast alles im Voraus und man muss es nur ablesen - nur für die ersten 10 Ziffern muss man sich etwas einfallen lassen (siehe "bruteforce code" ).
Ich kann mich jedenfalls an einige Stunden Fummelei erinnern