| Hacks & Crackmes Tests, Fragen oder Hilfestellungen. Crackmes und Hackits werden hier diskutiert. |
Diskussion: Yarins KeygenMe im Forum Hacks & Crackmes, in der Kategorie Software Home; Anzeige Hey, ich habe ein ich würde sagen mittelschweres KeygenMe (ein CrackMe dessen Ziel es ist einen Keygen zu erstellen, ...
![]() |
| | #1 (permalink) |
| Registriert seit: 24.07.05 ![]() Likes: 0 | Yarins KeygenMe Anzeige Hey, ich habe ein ich würde sagen mittelschweres KeygenMe (ein CrackMe dessen Ziel es ist einen Keygen zu erstellen, nicht es zu cracken) Ihr findet es hier: http://www.yarin.de/crackmes/keygenme1.exe ODER als ZIP: http://www.yarin.de/crackmes/keygenme1.zip (Dieses Programm ist ungefährlich, das Ausführen bedenkenlos! Dat ZIP erst Recht!) Es ist in einem C/C++ Gemisch mit purer WinAPI (also nicht mit MFC-Zeugs zugemüllt) geschrieben und stellt sich selbst als ein Registrierungsdialog für ein Programm dar. Das PE ist gepackt und es sind diverse Schutzmechanismen gegen das Debuggen (4 aktive, 1 passive Eigenentwicklung) eingebaut, die vielleicht mal ganz interessant anzusehen sind, eingebaut. Ich habe auf komplexe Hash-Algorithmen verzichtet - das ganze soll ja nicht in Arbeit ausarten. Ziel ist wie gesagt das Erstellen eines Keygens oder das Erkennen und Erklären des Mechanismus zur Erstellung der passenden Serials. Wer ein richtiges Serial eingibt wird vom Programm mit einem Zitat belohnt und wird in meinem nächsten CrackMe oder KeygenMe erwähnt Viel Spaß beim debuggen, ich bin schon gespannt, wie lange ihr braucht! p.s.: Versucht gar nicht erst, es zu cracken - das wäre zu langweilig. Eine Zeile zu noppen oder einen Jump zu ändern würde genügen.. p.p.s.: Ganz vergessen.. Benutzernamen unter 3 Zeichen sind immer ungültig. Ungültige Eingaben quitiert das Programm stumpf mit dem Programmende. Eventuelle Abstürze sind zu 95% beabsichtigt ^^ (Randale-Mode) |
| | |
| | #2 (permalink) | |
| Member of Honour ![]() Registriert seit: 04.09.04 ![]() Likes: 0 | Zitat:
btw: pack doch ein File bitte in ein Zip oder Rar. Direkt verliinkte Exe ist nicht so gern gesehen. | |
| | |
| HaBOT | - Anzeige - |
| |
| | #3 (permalink) | |
| Member of Honour ![]() Registriert seit: 02.04.05 ![]() ![]() ![]() Likes: 76 | Zitat:
| |
| | |
| | #4 (permalink) |
| Member of Honour ![]() Registriert seit: 04.09.04 ![]() Likes: 0 | Na dann Ich bin noch von Arthis einem CM geprägt, was das ganze System in den Abgrund riß. War nicht so lustig. root |
| | |
| | #5 (permalink) |
| Themenstarter Registriert seit: 24.07.05 ![]() Likes: 0 | Was euch passieren kann, ist, dass ihr ne Exception abkriegt oder dass das Programm absichtlich ne Access Violation auslöst, weil es halt einfachmal stumpf an 0x0000 oder 0xDEADBEEF lesen oder schreiben will. Das wird euren PCs aber garantiert nicht schaden, ein Hoch auf den Protected Mode! Ich hab ganz sicher kein system("format /q c:") oder so eingebaut ^^ ICh will da gar nicht diskutieren, ich frage mich nur, was an einer direkt verlinkten EXE falsch ist? Die Größe wirds ja wohl kaum sein, das Programm liegt im unteren 2stelligen Kilobyte-Bereich.. p.s.: natürlich passiert das auch nur, wenn sich mein kleines KeygenMe angegriffen fühlt, also irgendwas entdeckt, was irgendwie nach Debugger riecht (eine offene Microsoft IDE sieht z.B. auch sehr nach Debugger aus für das kleine Ding, also vorsichtig ) |
| | |
| | #6 (permalink) | |
| Member of Honour ![]() Registriert seit: 14.09.03 ![]() ![]() Likes: 34 | Zitat:
größere exe dateien sind auch in rar/zip archive gepackt, also warum nicht auch kleinere | |
| | |
| | #7 (permalink) | |||
| Themenstarter Registriert seit: 24.07.05 ![]() Likes: 0 | Zitat:
Zitat:
Hat sich das Programm nun schon jemand angeschaut? | |||
| | |
| | #8 (permalink) | |
| Member of Honour ![]() Registriert seit: 04.09.04 ![]() Likes: 0 | Zitat:
Natürlich ist dein Programm in Ordnung; trotzdem steigt das Misstrauen sprunghaft an, wenn eine EXE direkt verlinkt wurde. Das ist alles. Es war auch keine Vorschrift, du wirst dazu auch keine Regel im Board finden. Es war lediglich eine Bitte/Hinweis. Wenn du Exe-Files weiterhin verlinken willst, steht dir das frei. root | |
| | |
| | #9 (permalink) |
| Themenstarter Registriert seit: 24.07.05 ![]() Likes: 0 | Ich verstehe jetzt deine Bedenken, SUID:root - ich denke der Hinweis den ich unter den Link hinzugefügt habe ist fair. |
| | |
| | #10 (permalink) | ||
| Senior Member ![]() Registriert seit: 02.10.01 ![]() ![]() Likes: 49 | hi Zitat:
Zitat:
nein, ich bin kein virus! du kannst mich ruhig anklicken und ausführen...@Yarin: es sollte dir eigentlich bewusst sein das, wenn du die exe in ein zip oder rar packst, sich mehr leute trauen dein prog anzusehen. wenn du das nicht machst, dann werden viele user dein prog einfach nicht anklicken und es ist schade um deine zeit und mühe, die du dir damit gemacht hast. es geht hier nicht um vertrauen wo kämen wir denn hin wenn hier jeder auf irgendwelche exen klickt! denk mal darüber nach... cu -= pillepalle =- | ||
| | |
| | #11 (permalink) |
| Themenstarter Registriert seit: 24.07.05 ![]() Likes: 0 | Was habt ihr denn alle für komische Browser, dass die EXEs gleich Ausführen statt runterladen? ![]() Naja, wie ihr wollt, hier das ganze nochmal als ZIP (s.o.) |
| | |
| | #12 (permalink) |
| Member of Honour ![]() Registriert seit: 28.05.03 ![]() Likes: 1 | schönes keygenme. auf schutzmechanismen gegens debuggen bin ich nicht gestoßen (using ollydbg + anti-IsDebuggerPresent() plugin @ windows 98 ). kurzanleitung für den richtigen breakpoint: - datei mit PEid laden -> UPX gepackt - datein entpacken (zB. mit UPX Ripper) - keygenme mit ollydbg öffnen (error mit ok wegklicken) - keygenme zunächst starten (F9) - rechtsklick -> search for all intermodular calls - oben in der liste steht 3x "GetWindowTextA" - mit doppelklick auf eines davon landet man an der stelle wo der relevante code beginnt zunächst werden erstmal die strings eingelesen die man eingegeben hat und die variablen in den speicher gepackt. 00401BA3 . E8 68FBFFFF CALL KEYGENME.00401710 in dieser zeile gelangt dann man zu der berechnung der serial (-> step into mit F7). ab zeile 40179f wirds dann interessant. es beginnt damit das CPU spezifische daten eingelesen werden. danach gehts dann mit diversen berechnungen weiter. kurz gesagt werden zunächst 4 zwischenwerte berechnet (aus name, organisation und CPU-spezifischen werten ). aus diesen 4 zwischenwerten werden am ende in einer schleife dann nochmal die 4 endwerte für die serial berechnet. keygen algo (keygen.exe siehe anhang): Code: #include <iostream>
#include <string>
#include <conio.h>
using namespace std;
int main(void)
{
char name[999];
char org[999];
unsigned int werte[4];
unsigned int EAX, EDI, ESI, EDX, ECX;
unsigned int vendor1, vendor3, cpuModel;
unsigned int tmp;
cout << "Enter name: ";
cin.getline(name, sizeof(name));
cout << "Enter organisation: ";
cin.getline(org, sizeof(org));
// CPU daten holen
__asm {
mov EAX,0;
CPUID;
mov [vendor1], EBX; // erster teil des vendor strings der cpu
mov [vendor3], EDX; // letzter teil des vendor strings der cpu
}
tmp = (vendor3 << 16) + (vendor1 >> 16);
__asm {
mov EAX,1;
CPUID;
mov [cpuModel],EAX;
}
cpuModel = ((cpuModel>>4) & 0xF);
// zwischenwert1
ECX = strlen(name);
ESI = ECX + 0xdeadbeef;
for(int i=0; i<strlen(name); i++) {
EDX = (int)name[i];
ESI += EDX;
}
werte[0] = ESI;
// zwischenwert2
EDX = strlen(org);
ECX = EDX + 0xfeed1337;
for(i=0; i<strlen(org); i++) {
EDI = (int)org[i];
ECX += EDI;
}
werte[1] = ECX;
// zwischenwert 3 und 4
EDI = ECX + 2;
EAX = ECX + 3;
EAX *= EDI;
EAX *= EDI;
EDX = EAX % EDI;
EDI = 0xFFFFFFFF;
ECX = ECX ^ ESI; // ESI = werte[0]
EDX = EAX % EDI;
ECX *= 2;
ECX += cpuModel;
EDX = vendor1 ^ tmp;
werte[2] = ECX;
werte[3] = EDX;
// serialwerte 1 bis 4
for(i=0; i<4; i++) {
EAX = werte[i];
EDI = 2 + EAX;
EAX += 3;
EAX *= EDI;
EAX *= EDI;
EDX = EAX % EDI;
ESI = 0xFFFFFFFF;
EAX = EDX;
EDX = EAX % ESI;
EAX = EDX;
ESI = 0x1869f;
EDX = EAX % ESI;
werte[i] = EDX;
}
cout << "Serial: ";
cout << dec;
for(i=0; i<3; i++) {
cout << werte[i] << "-";
}
cout << werte[3] << endl;
cout << endl << "Press any key to exit.";
getch();
return 0;
}
__________________ http://livehabo.hackerboard.de | http://livebb.sourceforge.net |
| | |
| | #13 (permalink) | ||
| Moderator ![]() Registriert seit: 20.07.05 ![]() ![]() ![]() ![]() ![]() ![]() Likes: 202 | wozu hab ich mir bloß die Mühe gemacht *auf ivegotmail schiel* ![]() Zitat:
Entpacken: PEID benutzen, aber nicht die ImportTable wiederherstellen lassen, stattdessen z.B pdump32 nutzen ("Rebuild PE"). wichtig ist der BP an 4017A1 - ab hier wird berechnet, bis dahin ist nur rumkopieren von strings (und die Eingegebene Serial wird zu einem "ganzen" String zusammengefügt). Übrigens ist die Überprüfung auf EAX<1 nach CPUID etwas unsinnig weil ein "unterpentium" den Befehl eher nicht verstehen würde Zitat:
Keygen samt Quelltext ist im Anhang (etwas kleiner als von ivegotmail ):PS: Edit: also DEADBEEF und FEED1337 als Hexwerte zu nehmen war eine originelle Idee und hat mir gefallen
__________________ 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: 24.07.05 ![]() Likes: 0 | Herzlichen Glückwunsch ihr beiden, KeygenMe gelöst! Es gab jetzt gleich 2 Dinge, die mich gewundert haben: 1) Warum taucht da GetWindowTextA in der Liste auf? 2) Warum haben sämtliche Schutzmechanismen bei CDW versagt (ivegotmail mit seinem Plugin war klar :-) ) Zu 1) Sämtliche Funktionen, auf die ein Debugger als erstes einen Breakpoint setzen würde, werden mit LoadLibrary und GetProcAddress geladen. Um es dem Debugger noch schwieriger zu machen werden die Library-Namen (user32, kernel32) und die Funktionsnamen nicht einfach als const chars sondern c = c - 'Y' gespeichert damit sie vom Debugger nicht mehr als Strings erkannt werden (damit liegen die meisten chars nämlich irgendwo im Sonderzeichen bereich unter 32 oder sogar im Minusbereich). Der einzige Anhaltspunkt hätte eigentlich nur LoadLibrary+GetProcAddress sein dürfen... hmm?? Zu 2) Das sind die Schutzmechanismen, die eingebaut waren: Code: __forceinline bool isDebugger0()
{
if (!pfOutputDebugStringA)
return true;
__ asm xor edx,edx
pfOutputDebugStringA("");
s32 nEDX;
__asm mov nEDX,edx
return nEDX != 0;
} Code: __forceinline bool isDebugger1()
{
if (!pfIsDebuggerPresent)
return true;
BOOL bRes = pfIsDebuggerPresent();
return bRes == TRUE ? true : false;
} Code: __forceinline bool isDebugger2()
{
bool bFound = false;
EnumChildWindows(HWND_DESKTOP, _enumChildren, (LPARAM)&bFound);
return bFound;
} Code: struct Uncatchable { int foo; };
__forceinline bool isDebugger3()
{
LPTOP_LEVEL_EXCEPTION_FILTER p = SetUnhandledExceptionFilter(_handleUnhandledException);
throw new Uncatchable;
SetUnhandledExceptionFilter(p);
return !bCaughtException;
} Und keine davon zieht bei euch? Mist Zitat:
p.s.: Sorry wegen des Problems mit den Leerzeichen im Key (lang lebe der Genetiv), mir das selber auch aufgefallen, ich habs mir aber nicht aufgeschrieben und dann schlichtweg vergessen :-/ Nächstes Mal halt %05d. | |
| | |
| | #15 (permalink) | |
| Moderator ![]() Registriert seit: 20.07.05 ![]() ![]() ![]() ![]() ![]() ![]() Likes: 202 | Zitat:
Ich habs auch gerade ausprobiert Deine Keygenme im Olly zu laden - es kann geladen und ausgeführt werden. Zu 1): ich kann auch bei geladener Keygenme alle API-Namen finden und lesen - allerdings bringt mir das wenig ohne die Adressen zu kennen, man kann aber neuladen und auf den Stringbereich einen "on Access Memory" Breakpoint setzen. Oder GetProcAddress finden (die Importtabelle ist ja da) und da einen Memory-BP setzen. Dann kann man immer mitlesen was gerade importiert wird und noch wichtiger wo es landet -> hier kann man wieder an ausgesuchten APIs einen BP setzen. Wenns hart kommen sollte, dann schaue ich in einem anderen Programm nach den selben APIs und deren Adressen im Kernel - und setze da einen BP drauf. Allerdings würde hier MFC wohl leichte Schwirigkeiten bereiten. zu 2) Ssoweit ich weiß wird beim Debuggen mittels WinAPI vom System der Prozess eingeforen und wenn der fortgesetzt wird, gilt die nächste Anweisung als BP. Übrigens, sicher dass Du IsDebuggerPresent eingebaut hast? Ich kann sie nirgendwo finden. Und von Exceptions wurde ich auch nicht behelligt, obwohl diese Methode eigentlich funktionieren sollte Wer Borlanddebugger verwendet ist selber schuld *g* (der ist zwar super für eigene Borlandanwendungen, aber sonst nicht so toll).Den OutputDebugString finde ich übrigens auch nicht. Allerdings wie erwähnt haben wir uns schon mit entpackten Keygenmes rumgeschlagen. Wenn ich da so an sartres Crackmes denke, bei denen jeder Entpacker versagt hat und man schweres Geschütz auffahren musste *schauder*
__________________ Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf! Selig, wer nichts zu sagen hat und trotzdem schweigt. | |
| | |
![]() |
| - Anzeige - | |
| |
| Themen-Optionen | |
| Ansicht | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| keygenme | ]=-antr4xx-=[ | Hacks & Crackmes | 2 | 26.01.08 20:18 |
| KeyGenMe#1 | Bonzai | Hacks & Crackmes | 5 | 22.10.07 17:45 |
| KeygenMe | Xylon | Hacks & Crackmes | 6 | 24.09.06 23:50 |
| Keygenme ^^ | ReDoX | Hacks & Crackmes | 3 | 21.09.06 16:17 |
| KeygenMe | Straubi | Hacks & Crackmes | 5 | 17.07.06 20:26 |