CrackMe 1

Hi,

ich dachte mir, ich stell's mal hier rein - mein CrackMe 1. Vielleicht hat ja jemand Lust sich dran zu versuchen. Die Exe ist nicht gepackt oder der gleichen, kann somit gleich aufm plain ASM Code losgehn. :)
Patchen ist natürlich nicht erlaubt (what's the point?).

Nun denn, wie heisst das Passwort? :D
 
also bei mir bekomm ich ne eingabe aufforderung und werde nach nem pass gefragt, wenn ich was eingebe und enter drücke schließt sich das Programm

XP Prof Sp2 alle patches, .net framework 2.0beta2

die MFC71.DLL befindet sich bei mir in c:\Windows\System32\
 
jup, war zu faul für pure win32api :) benutzt MFC fürs GUI, aber die dll dafür sollte eigentlich jeder drauf haben (darum hab ichs sie net statisch dazu gebunden) - installiert das ein oder andere Proragramm normalerweise mit. Bei ner clean XP Install ists glaub ich noch nicht vorhanden, sollte sie jemand fehlen:
http://www.dll-files.com/dllindex/dll-files.shtml?mfc71

dass sich das programm beendet wenn du Enter drückst ist normal :) (liegt eher am Fenster-Typ)
 
hab zwar nicht das passwort aber den lösungsweg:

- datei mit ollydbg laden
- rechtsklick -> search for -> all referenced text strings
- in der string tabelle findet man "correct password"
- mit nem doppelklick darauf landet man beim wichtigen code (kommentierter code siehe screenshot im anhang)

das programm macht kurz gesagt folgendes:
der eingegebene text wird 16 mal durchgegangen und es werden 2 (hash)werte berechnet und am ende mit 2 festen werten vergleichen. beim zweiten wert (EDI) wird nur ein bisschen addiert. die berechnung des ersten werts (EBP) ist dagegen ein wenig komplexer.

hier der algorithmus zur berechung der beiden werte:
Code:
#include <iostream>
#include <string>

using namespace std;
 
int main(void)
{
string serial = "";
cout << "Enter Passwort: ";
cin >> serial;

int EBP = 0;
int EDI = 0;
 
for(int i=0; i<16; i++) {
  for(int k=1; k<=serial.length(); k++) {
    int ECX = (int)serial.c_str()[k-1] + k;
    EDI += ECX;
    int rest = EDI % k;
    ECX = 2 * EBP;
    ECX = ECX ^ EDI;
    EBP = ECX + rest + 1;
  }
}

cout << "Hashwerte:" << endl;
cout << std::hex;
cout << EBP << endl; // muss 0x402A4FE7 sein
cout << EDI << endl; // muss 0x3810 sein
 
return 0;
}

letzter schritt wäre dann bruteforce, aber das erspar ich mir und meinem rechner. :P
 
algorithmus stimmt soweit, good work :)
aber mal schaun, ob noch jemand das passwort rausbekommt - auf jeden fall gut machbar (was kann man für einschränkungen machen?).
Der Algo ist auch nicht von mir selbst, ich hab ihn nur in ein wenig anderes Gewand gepackt.
Er stammt urpsrünglich von Stufe 3 (= Easy :P) von LordByte's CrackMe 3 (anno 1998 ). Das Passwort hab ich sogar gleich gelassen. (es gibt mehr als eine Lösung, aber nur eine 'sinnvolle' :))
 
Zurück
Oben