![]() |
Re: Etwas zum spielen :) Ein CrackME....
Ja ein wenig ^^
Das ist deer verschlüsselte String welcher vom Server kommt. Dieser ist jedoch Falsch (also wird nach der verarbeitung kein positives ergebniss liefern) da ich bei der PHP datei mal eingestellt habe das der eingegebene Key (serial im edit) nicht vorhanden ist (somit keine gültige lizenz) (sonst wärs ja nicht witzig :) ) Dieser String wird weiter verarbeitet und wird zur überprüfung der echtheit der Server nachricht benutzt |
Re: Etwas zum spielen :) Ein CrackME....
aber wenn du am ende einfach sowas testest wie
if (serialisok) then machwas() else bringefehler(); dann wird dir das ding relativ flott ausgehebelt. wuerd gerne ma testen :> |
Re: Etwas zum spielen :) Ein CrackME....
Das weiss ich :)
Deshalb habe ich auch sehr viele verwirrungs abfragen eingebaut... Meiner meinung nach die einzige möglichkeit um etwas sicher zu prüfen oder? Gibt mir mal die Proxy daten dann trag ich die hard gecoded in den idhttp ein.... Und lad die version hoch :) |
Re: Etwas zum spielen :) Ein CrackME....
k, dann haste dich darum gekuemmert:P
es gibt noch bessere methoden, sind aber aufwendig wie sau. :> hier mein proxy: ip: 10.2.1.43 port: 8080 |
Re: Etwas zum spielen :) Ein CrackME....
Liste der Anhänge anzeigen (Anzahl: 1)
gut....
hier also die Proxy Version :) Und welche methoden wären den dass? (nur so als gedankenspiel :) ) |
Re: Etwas zum spielen :) Ein CrackME....
Weisst Du...ach wie sag ich das jetzt richtig?
Das ganze hier ist Witzlos, da Du Dein Security through Obscurity Projekt testen lassen willst. Stell doch einfach die Sourcen hier rein, und dann kann die Diskussion los gehen. Echte Sicherheit bekommst Du nicht durch heimliche, im stillen Kämmerlein ausgedachte ROT11-Variationen. Sinnvoll ist eher ein Security through design, sowas wie AES. Das einzig geheime ist dann der Schlüssel, oder auch nur ein Teil davon. Den Algorithmus kann man dann gemeinsam auf Fehler und Lücken prüfen. Weisst was...ich halt mich raus. Vielleicht ist das ja doch total sinnvoll. Sherlock |
Re: Etwas zum spielen :) Ein CrackME....
Hast ja recht Sherlock.
aber macht trotzdem spass, auch wenn mans nicht kann (wie ich :>) |
Re: Etwas zum spielen :) Ein CrackME....
@Sherlock
Ja du hast schon recht :) Ich verwende AES in meiner Verschlüsselung (rijndael 128) Ich war mir nicht sicher wie sicher mein Source ist und deshalb hab ich gedacht ich mach da mal ein crackme draus... Aber für alle welche es interessiert: Hier der Code:
Delphi-Quellcode:
Ich denke er ist ausreichend Kommentiert....
function Check(data,key:string):string;
var total,i:int64; licensekey,uname,oldversion,idex,iidex,validserial,validkey:string; LanguageID:LangID; Len,serial:Integer; SystemInfo:TsystemInfo; Buffer: array[0..255] of Char; Size: DWord; version:tidhttp; begin // Diskspace bestimmen GetDiskFreeSpaceEx('C:\', i, total, nil); // System Sprache ermitteln SetLength(licensekey, 255); LanguageID:=GetSystemDefaultLangID; Len:=VerLanguageName(LanguageID,PChar(licensekey), Length(licensekey)); SetLength(licensekey, Len); // Prozessoren Anzahl GetSystemInfo(SystemInfo); serial := SystemInfo.dwNumberOfProcessors; // Benutzernamen ermitteln Size := SizeOf(Buffer); if not Windows.GetUserName(Buffer, Size) then RaiseLastOSError; //RaiseLastWin32Error; {Bis D5}; SetString(uname, Buffer, Size - 1); // Verschlüssle die Daten zu einem kompakten paket um diese mit dem empfangenen // paket vergleichen zu können oder um das lizenz file zu verifizieren. // Debuging //showmessage('Language: '+licensekey); //showmessage('Processors: '+inttostr(serial)); //showmessage('Username: '+uname); //showmessage(#98#1#41#1#54#1#75#1#74); with TCipher_Rijndael.Create do try Mode := cmOFB8; Init(THash_MD5.CalcBinary(#98+key+'SERIAL',TFormat_HEXL), #0, $00); // Aufwändiges MD5 Passwort zum verschleiern result := EncodeBinary((#41+inttostr(serial)+#75+'A'+uname+#74+'AA-W71A2-EW653'+licensekey+'Serial:'+uname+'63E-6E54-DX325'+key),TFormat_HEXL); // Aufwändige "Paket" erzeugung um das patchen zu erschweeren. finally Free; end; version := tidhttp.Create(); //version.ProxyParams.ProxyPort := 8080; Proxy für Volle (DP) //version.ProxyParams.ProxyServer := '10.2.1.43'; // Leerzeichen aus dem String entfernen idex := (('http://darkhedie.bplaced.net/crypt/index_crackme.php?dfgr='+licensekey+'&&cxvb='+inttostr(serial)+'&&ertd='+uname+'&&wfpf='+key)); repeat if pos(' ', idex) > 0 then delete(idex, pos(' ', idex), 1); until pos(' ', idex) = 0; oldversion := version.Get(idex); // Das "Paket" wird empfangen version.Free; // Freigeben with TCipher_Rijndael.Create do try Mode := cmOFB8; Init(THash_MD5.CalcBinary(#98+key+'SERIAL',TFormat_HEXL), #0, $00); // MD5 Hash des Keys aus dem Empfangenen "Paket" kopieren idex := copy(oldversion,1,32); // MD5 Key Hash aus dem "Paket" entfernen delete(oldversion,1,32); // Empfangenes "Paket" ohne MD5 entschlusseln iidex := DecodeBinary(oldversion,TFormat_HEXL); validkey := copy(iidex,1,1); validserial := copy(iidex,3,1); if (validkey+#41+validserial) <> '))K' then begin showmessage('Server cant Authenticate'); Form1.close; end; // Prüfen ob MD5 des keys nicht!! übereinstimmt.... if idex = THash_MD5.CalcBinary(#98+key+'license',TFormat_HEXL) then begin validkey := key; validserial := 'W12A-QW87-W21QW5+key'; exit; end else begin // Der Key hat nicht übereingestummen also kann er noch korrekt sein :) // Ist der Kontroll MD5 nicht korrekt wird eine meldung ausgegeben if idex <> THash_MD5.CalcBinary('y'+key+'SERIAL',TFormat_HEXL) then begin showmessage('Server cant Authenticate'); Form1.close; end; // Echte Überprüfung... idex beinhaltet den zuvor kopierten originalen HASH // zudem wird er erneut erzeugt und verglichen! if idex = THash_MD5.CalcBinary('y'+key+'SERIAL',TFormat_HEXL) then begin // weitere irreführende abfrage... sie sollte eigentlich IMMER!!! true zurück liefern da idex MD5 ist! if idex <> key then begin // Leerzeichen aus dem String entfernen idex := ((#41+inttostr(serial)+#75+'A'+uname+#74+'AA-W71A2-EW653'+licensekey+'Serial:'+uname+'63E-6E54-DX325'+key)); repeat if pos(' ', idex) > 0 then delete(idex, pos(' ', idex), 1); until pos(' ', idex) = 0; // Die beiden entschlüsselten Daten werden verglichen! (keine MD5 hash's in den Variablen!) if iidex = idex then begin // Irreführende Abfrage! if key = idex then begin validkey := key; validserial := 'W12A-QW87-W21QW5+key'; exit; end else // Ist key nicht entsprechend den entschlüsselten daten, so ist alles ok! showmessage('Message from Server'); end; end; end; end; finally Free; end; end; Einige Stellen sind ausschliesich da um es dem Cracker zu erschweeren... Also dann kann die Diskusion und das beheben von Lücken ja beginnen :) |
Re: Etwas zum spielen :) Ein CrackME....
Also über einen Http Sniffer habe ich jetzt die Website herausgefunden die von deinem Programm aufgerufen wird. Diese lautet:
![]() Sie wird auf meinem Rechner wiefolgt aufgerufen: http://darkhedie.bplaced.net/crypt/index_crackme.php?dfgr=Deutsch(Deutschland)&&cxvb= 1&&ertd=Lars&&wfpf=Edit1 Dann generiert die Php Datei eine lange Zeichenfolge wo wahrscheinlich Sprache, Benutzername und Serial die im Edit stand drinnen verschlüsselt ist. Dann steht in meinem Browser folgende Zeichenfolge (ohne Zeilenumbrüche): c32497dcac1c702f653086bf39dd74c84f9d54f7cc5cc79d3b e41dbc08fdf089eb7603c3d8f3 dd0caccbdbe8236217b399bd36fecbff0ab5d54dbec48a2ce8 e6610336fdc2dda3e8399189f6 536a4efb84b3e5434c458ae4ea Meine Idee das ganze zu hacken wäre über die hosts Datei von Windows die Anfrage auf die Php Datei umzuleiten sodass dein Programm an eine gefälschte Php Datei bspw. auf meinem Server schickt, welcher immer "Alles Super" antwortet. Das einzige Problem ist jetzt, dass ich nicht weiß was da bei einer positiven Abfrage drinnen steht aber sobald irgendjemand dein PRogramm gekauft? hat dann kann der das ja per Http Sniffer mitteilen was der Php Script ihm antwortet und dieser kann dann allen eine gefälschte Php Datei geben und sagen wie die Host Datei verändert werden muss. Und schon ist dein Programm gehackt :) MFG Lars Wiltfang [edit=SirThornberry]Zeilenumbrüche eingefügt - Mfg, SirThornberry[/edit] |
Re: Etwas zum spielen :) Ein CrackME....
Hmmm grundsätzlich ist diese idee gut
Jedoch musst du das programm dafür nicht kaufen, weil als antwort ein ähnlicher string zurückkommt auch AES Verschlüsselt Die lösung ist im Client programm selbst... Der Client muss ja wissen wie die PHP Datei verschlüsselt damit er den String prüfen kann... Aber Der Grundsatz würde funktionieren :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz