srand(time (NULL)) auslesen?



  • Hallo!

    Ich habe ein kleines Crackme geschrieben, allerdings weiß ich nicht wie man die zufällige Variable auslesen kann. Sollte man hier auf Ollydbg zurückgreifen oder ähnliches oder gibt es irgendwelche Regeln, nach denen diese Zufallszahlen erstellt werden(immerhin sind sie ja anscheinend von der Zeit abhängig).

    Ein workaround währe vielleicht, die Zeit per 3rd Party auf eine fixe Uhrzeit zu freezen. (Und danach halt die 12x Chars im ASCII code durchzutesten)

    Um diese Zeilen geht es:

    #include <iostream>
    #include <fstream>
    #include <string>
    #include <cstring>
    #include <cstdlib>
    #include <ctime>
    // ich habe hier experimentiert, weiß selber dass so viele includes nicht notwenig sind
    using namespace std;
    static const char alphanum[] =
    "0123456789"
    "!@#$%^&*"
    "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    "abcdefghijklmnopqrstuvwxyz";
    int main()
    {
        string a;
        string b;
        char c; 
        srand(time (NULL));
        c='a' + rand()%26;
        b = "abcdef";
        cout <<c; //das ist zu testzwecken, die exe ist natürlich ohne diese Zeile
        cout <<  "Hello, insert your Serial in the Form of XXXXXX-XXXXXX!";
        cin >> a;
        if (a==(b+"-goodx"+c))
        {
                             cout << "Good job!\n";
        }
        getchar();
        getchar();
        return 0;
    }
    


  • man srand schrieb:

    The srand() function sets its argument as the seed for a new sequence of pseudo-random integers to be returned by rand(). These sequences are repeatable by calling srand() with the same seed value.



  • und wie bekomm ich den seed, den das programm verwendet?



  • sinnlos123 schrieb:

    und wie bekomm ich den seed, den das programm verwendet?

    Das ist der Rückgabewert von time(NULL) , mit dem du srand() fütterst.
    Falls das nicht das sein sollte, was du meinst, dann solltest du vielleicht nochmal etwas detaillierter beschreiben, was du eigentlich genau vorhast. Ich finde deinen Post diesbezüglich nämlich reichlich verwirrend.

    Finnegan

    P.S.: Ich habe einen Verdacht, in welche Richtung dein eigentliches Problem gehen könnte, und der riecht stark nach X-Y-Problem. Bitte also um verständliche Beschreibung des eigentlichen Problems X, damit wir dir sagen können, dass das nicht so einfach zu lösen ist, wie du dir das vorstellst. 😉



  • unsigned int seed = time(NULL);
    srand(seed);
    

    Oder was meinst du?



  • also das problem ist:

    ich möchte die variable finden, die zum start (bis ende) dieses Programms benötigt ist um den "good job" screen zu erreichen.

    das ist a-z in diesem Fall

    nun möchte ich aber ein 2. Programm schreiben, dass "weiß" mit welchem seed obiges Programm arbeitet, solange das Programm offen ist.

    die variable c ändert sich ja nach dem randomisieren nicht mehr.

    von wegen x-y-problem: kein bytepatching, ich möchte diese variable auslesen um so auf "legitimen" weg das "good job" zu sehen. falls du das meintest.
    Als ich das crackme geschrieben habe, dachte ich nicht daran, dass dies schwer zu lösen ist.



  • sinnlos123 schrieb:

    ich möchte die variable finden, die zum start (bis ende) dieses Programms benötigt ist um den "good job" screen zu erreichen.

    Die Variable selbst ist eventuell gar nicht mehr vorhanden.
    Sowas hier ist vermutlich ein besserer Einstieg: http://www.rohitab.com/apimonitor. Den Rückgabewert von rand z.B. sollte man sofort sehen...



  • Jo, einfach im Debugger gucken was rand() zurueck gibt.


Log in to reply