Programm, das eine Exe erzeugen kann



  • Hallo Gemeinde,

    ich würde gerne ein Programm schreiben, das eine selbst laufende Exe mit einigen einkompilierten Parametern erstellt.
    Ich habe weder in der Hilfe, noch in den threads was hierzu gefunden und selbst keine Ahnung wie sowas zu lösen wäre.

    Danke, Gruß myerscola



  • Hallo,

    So ein Programm nennt sich Compiler. 🙂
    Was genau willst du erreichen?



  • 🙂 ja, ist schon klar.
    Ich möchte ein kleines Programm mit einigen Charts mitgeben, wobei das Programm immer gleich ist nur die Parameter ändern sich. Es soll halt ausgeschlossen werden, dass derjenige die Parameter ändern kann und das keine Installation von Nöten ist.
    Ich hoffe das ist einigermaßen zu verstehen was ich will.



  • Dieser Thread wurde von Moderator/in akari aus dem Forum VCL (C++ Builder) in das Forum Rund um die Programmierung verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Ich hatte sowas mal gemacht, wie sauber die Lösung ist, sei mal dahingestellt - ich fande sie jedenfalls ausreichend sauber.
    Und zwar kenne ich zwei verschiedene Arten.
    Art 1, String-Pooling muss aktiviert sein:

    // Das zu modifizierende Programm.
    void getOptionBla()
    {
        const char* bla = "Ich bin ein markierter und einzigartiger String";
        return atoi( bla ); // Im String steht dann später eine Zahl (in ASCII natürlich wieder)
    }
    

    Um die Exe-Datei zu modifizieren, gehst einfach durch die Exe-Datei und suchst nach genau diesem String ("Ich bin ein..."). Wenn du ihn gefunden hast, überschreibst du ihn mit deinem gewünschten String, 0-Byte nicht vergessen und der neue String darf natürlich nicht länger sein als der alte.

    Art 2, sicherer aber aufwändiger:
    Du kompilierst/linkst in die Exe-Datei Ressourcen von ausreichender Länge rein, könnte z.B. auch ein String wie oben sein. Wie bei Art 1 suchst du beim Modifizieren in der Exe-Datei die Ressource und veränderst sie. Wenn du bei der Ausführung der Exe die Ressource dann ausliest, hast du die neuen Werte 🙂



  • das kannste inne resource reintuen das ist am einfachsten



  • Mit dem Hexeditor ist es aber auch nicht schwer den Offset in einer Datei zu bestimmen wo ein String steht.

    Wenn es eine Zahl sein soll: Stell sicher, dass sie auch nur einmal in der exe drin steht (Optimizer nicht zu aggressiv stellen, eventuell mit volatile versuchen und einen Zeiger drauf zeigen lassen). Nun übersetzt du das Programm ein paar mal und variierst nur einen Parameter. Alle Kompilate dürften bis auf 4 Byte übereinstimmen. Das sind dann die Bytes die du überschreiben musst. Wenn es mehr Unterschied gibt dann war der Optimizer zu aktiv.

    Sehr interessant dürfte auch http://magazin.c-plusplus.net/artikel/Reverse Engineering%3A Patching sein.



  • Ich hatte die Optionen (Konfig) an die .exe einfach hinten angehangen. Ganz am Schluß dann noch wie groß die Daten sind. Zum Auslesen habe ich dann die .exe ganz normal geöffnet, ans Ende (-2 / -4... Bytes) gesprungen, ausgelesen wie groß die Konfig ist und dann an die Stelle gesprungen wo sie anfängt und dann ausgelesen. War mal für einen kleines universelles Patchprogramm.
    Manipulationssicher ist das natürlich nicht. Man könnte das ein *klein* wenig sicherer machen wenn man das ganze noch mit einer Hashsumme verziert. Aber richtig manipulationssicher geht ja eh nicht - nur halt mit mehr Hürden.


Anmelden zum Antworten