Programm Einstellungen in exe Speichern



  • Hallo,

    Ich hab folgdens Programm zum testen geschrieben:

    #include <iostream>
    using namespace std;
    
    int main(int argc, char* argv[])
    {
    int var;
    
    if ( var != 100 )
    {
    cout<<"Programm Einstellungen: ";
    cin>>var;
    }
    
    	if ( var == 100 )
    	{
    		cout<<"ok"<<endl;
    	}
    
    	else
    	{
    		cout<<"error"<<endl;
    	}
    
    system("PAUSE");
    
    	return 0;
    }
    

    Wenn jetzt z.b. jemand eine 100 eingibt dann soll das Programm von sich selbst eine Kopie machen ( das ist ja noch ganz einfach ) aber die Variable int var will ich mit 100 initialisieren.

    Wenn man die Kopie von dem Programm startet dann soll sofort die Meldung ok ausgeben werden.

    Hat wer eine Idee wie man so etwas machen kann ?



  • Und wozu soll das gut sein?
    Wenn du Einstellungen speichern willst, die du bei der nächsten Programmausführung wieder benötigst, solltest du sie in einer Datei speichern und am Programmstart einlesen.



  • Ich weiss das so etwas möglich ist.
    Und es interessiert mich halt wie man so etwas machen kann. Aber ich selber komme einfach nicht drauf wie es geht.



  • Eigentlich kann ich ja einfach z.b. mit dem OllyDebugger nachschauen an welcher Adresse int var steht. Jedoch weiss ich nicht wie ich das dann selber mit einem Programm umändern soll.

    WriteProcessMemory bringt da ja nichts weil das Speichert ja nicht die änderungen in der exe ab.



  • Eine selbstmodifizierende Datei erregt sicher die Aufmerksamkeit jedes Virenscanners. Ich würde eher abraten und solche Dinge in die Registry
    packen, wo sie eigentlich hingehören.

    Wenn man aber unbedingt will (wie gesagt, nicht empfohlen) könnte man den Offset raussuchen an dem eine initialisierte Variable in der exe abgelegt ist, den Dateizeiger dorthin positionieren und den Inhalt austauschen.



  • Hmm, ich erinnere mich an einen Magazin-Artikel zum Patchen, aber das geht afaik auch von außen. (und bei einer lokalen Variablen kommt noch dazu, daß sie in der EXE-DAtei vermutlich gar nicht existiert.

    PS: Und ein normaler Debugger dürfte auch nur mit WriteProcessMemory arbeiten.



  • Mit dem OllyDebugger kann ich aber z.b. Speicherstellen Patchen das dort ein anderer Wert steht.



  • Ty für den Hinweis mit WriteProcessMemory jetzt hab ich eine neue Idee.^^

    Ich änder einfach mit WriteProcessMemory den Wert an der Speicherstelle und danach lass ich eine Kopie von dem Programm erstellen mal sehen ob es funktioniert.



  • Ich weiss nicht wieso man für so eine triviale Aufgabe einen Debugger brauchen sollte. Ein Hexeditor würde wohl reichen ...

    Das Programm mit zwei verschiedenen "default" Werten compilieren und die beiden Compilate vergleichen - dann weiss man wo sich die Variable versteckt.

    Alternativ könnte man den Wert auch in einem "wiederfindbaren" String abspeichern - dann reicht ein einfacher Texteditor ...

    char defaultwert[15]="MEINWERT:100";
    


  • Daraus wird wohl nichts werden, da man die Programmdatei während der Ausführung nicht ändern kann, soweit ich weiss. Allerdings gibt es, glaube ich, modifizierbare Resourcen (FindResource, LockResource, UpdateResource).


Log in to reply