*.exe Datei konfigurieren???



  • Hallo zusammen,

    kann mir jemand sagen wie man ein fertigkompilliertes Programm ändern kann???
    Wie etwa trojaner konfigurator! Also es gibt ein exe Datei, der mit einem zweitem exe geöffnet und geändert werden muß. Also um etwa ein String durch einandrer zu ersetzen. Wie geht das? Geht das mit die Funktionen OpenFile(),
    SetFilePointer() und WriteFile() ???? Hat jemand Erfarungen damit gemacht???



  • Petr1 schrieb:

    Hallo zusammen,

    kann mir jemand sagen wie man ein fertigkompilliertes Programm ändern kann???
    Wie etwa trojaner konfigurator! Also es gibt ein exe Datei, der mit einem zweitem exe geöffnet und geändert werden muß. Also um etwa ein String durch einandrer zu ersetzen. Wie geht das? Geht das mit die Funktionen OpenFile(),
    SetFilePointer() und WriteFile() ???? Hat jemand Erfarungen damit gemacht???

    Du tust dein Programm kompilieren, mit evtl. Platzhaltern. Dann besorgst du dir einen Hex-Editor und suchst nach den Offsets an denen der String oder was auch immer steht. Den kannst du dann normal ändern mit fopen, fwrite, etc ...

    cu



  • Angenomen ich hab folgendes Prog.

    #include <windows.h>
    #include <string.h>
    int WINAPI WinMain( bla-bla-bla)
    {
    char String[256];
    memset(String, 0, 256);
    strcpy(String, "Hallo Welt");
    MessageBox(NULL, String, "", 0);
    return 0;
    }

    wenn ich es jetzt mit dem HexEditor öffne und nach offset von "Hallo Welt" suche und dann der String durch ein "Es funktioniert" ersetze.
    Wird es dann funzen ?????
    Hab ich dich richtig verstanden???



  • Ich könnte mir vorstellen, dass es bei Änderung der String-Länge zu Problemen kommt 🙄



  • flenders schrieb:

    Ich könnte mir vorstellen, dass es bei Änderung der String-Länge zu Problemen kommt 🙄

    Wieso? 256 Zeichen passen doch rein oder?



  • In dem Fall schon - es darf sich nur eben dadurch nichts verschieben 🙄



  • Wenn ich bla.exe öffne nach Offset von "Hallo Welt" suche, und dann d String
    "Hallo Welt" durch "Es funktioniert" ersetze, dann funzt es leider nicht 😕 Dabeu würde nix verschoben, offset des Strinds blieb unverändert, den Rest (da 256 Zeichen) hab ich mit '\0' gefült.

    Ich denke das man nicht nach offset des Strings suchen mus, sondern nach Speicherbereich der für String reserviert ist. Nun wenn folgende Code habe, weiss ich einfach nicht wie ich den Speicherbereich finde ?????

    int main()
    {
      char String[256]; //  < String mit dem HexEditor hierher schreiben
    
      puts(String);
    
      return 0;
    }
    

    Hat jemand Ideen dazu ????



  • Du könntest auch mal versuchen, die entsprechenden Werte als Ressource einzufügen - diese könntest du dann ja mit einem entsprechenden Editor bearbeiten (evtl. hilft hier auch UpdateResource)



  • Petr1 schrieb:

    Wieso? 256 Zeichen passen doch rein oder?

    Ich denke, du hast hier einen kleinen Denkfehler, da du bei einer Änderung des Strings "Hallo Welt" in der Exe das Literal "Hallo Welt" änderst und das hat keine 256 Zeichen Platz. Also einen längeren String solltest du da nicht reinschreiben (kürzer wäre wohl gleich)



  • Wow, wenn ich den String durch einanderer der gleich lang ersetze, dann funzt es 😋

    #include <windows.h>
    #include <string.h>
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) 
    { 
    	char string[]="HALLO";
    	MessageBox(NULL, string, "", 0);
    
    	return 0;
    }
    

    ich hab hier den String HALLO durch hallo ersetzt.
    Das Problem besteht aber weiterhin da die zuschreibende Stringlaenge
    zum compil. Zeit des *.exe nicht bekannt ist.



  • Häng halt eine binär/Textresource an die exe ran. Der kannst du dann recht leicht eine bestimmte Länge geben, und dann auch den Inhalt ändern. Laden kannst du das dann mit Find-/LockResource. Für was man sowas aber braucht 😕



  • Petr1 schrieb:

    Wenn ich bla.exe öffne nach Offset von "Hallo Welt" suche, und dann d String
    "Hallo Welt" durch "Es funktioniert" ersetze, dann funzt es leider nicht 😕 Dabeu würde nix verschoben, offset des Strinds blieb unverändert, den Rest (da 256 Zeichen) hab ich mit '\0' gefült.

    Ich denke das man nicht nach offset des Strings suchen mus, sondern nach Speicherbereich der für String reserviert ist. Nun wenn folgende Code habe, weiss ich einfach nicht wie ich den Speicherbereich finde ?????

    int main()
    {
      char String[256]; //  < String mit dem HexEditor hierher schreiben
    
      puts(String);
      
      return 0;
    }
    

    Hat jemand Ideen dazu ????

    so weit ich weiß, hat eine exe datei einen header und wenn du die größe der exe änderst, musst du auch das im header ändern

    also versuch mal "Hallo Welt!" mit "Welt Hallo!" oder so zu verändern

    Tim



  • musicman schrieb:

    Häng halt eine binär/Textresource an die exe ran. Der kannst du dann recht leicht eine bestimmte Länge geben, und dann auch den Inhalt ändern. Laden kannst du das dann mit Find-/LockResource. Für was man sowas aber braucht 😕

    Ich schreibe ein KeyLogger das alle Tastatureingaben protokoliert, in log.txt schreibt und alle
    n Stunden mir das log.txt per e-mail sendet. Da das Programm nicht für mich allein bestimmt ist, muß es ein Möglichkeit geben den KeyLogger.exe vorcher mit einem Configure.exe zuöffnen und Empfänger Adresse zu bestimmen.
    Naja, sowas wie bei Trojanern 🙄



  • Für sowas gibt's eigentlich *.ini, *.xml-Konfigurationsdateien, oder sogar die Registry wo eigentlich die Konfigurationsdaten gespeichert werden.



  • musicman schrieb:

    Für sowas gibt's eigentlich *.ini, *.xml-Konfigurationsdateien, oder sogar die Registry wo eigentlich die Konfigurationsdaten gespeichert werden.

    Ah du verstehst gar nix was ich meine 😉

    wie arbeiten Trojaner???

    es gibt 3 Dateien:
    1 = Client
    2 = Server
    3 = ServerConfigurator

    bevor man aber Serverteil zum Opfer schickt, mus er es mit dem ServConfigurator öffnen, konfigurieren ( e-mail Adresse hinschreiben an der
    Port und IP des Opfer gesendet werden falls letzte online geht) und unter Result.exe abspeichern. So nun wird zum Opfer nicht mehr Server.exe sondern
    Result.exe geschickt. Sowas änliches muß ich auch machen, versteht ihr jetzt ?



  • Hast du es mal als Resource versucht?





  • Häng einfach eine (leere) Textdatei mit der Mindestlänge die du brauchst als Resource an deine exe. Such dir die Startadresse in der exe. Ab da hast du dann deine gewünschte Länge an Platz und kannst Weißgottwas reinschreiben.



  • nirsaja schrieb:

    BeginUpdateResource
    UpdateResource
    EndUpdateResource

    Also wie gesagt es gibt ein *.exe Datei der als Resource StringTable hat.
    In StringTable steht ein einzige String, und zwar "Hello World" mit id = IDS_STRING.
    Nun schreibe ich ein zweite *.exe der das erste exe öffnet und per UpdateString
    "Hello World" durch "Irgendwas" ersetzt. Das Programm lässt sich zwar ohne Fehlern kompilieren, funzt aber ned. Was mache ich falsch ???

    #include <windows.h>
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevIsntance, PSTR szCmdine, int iCmdShow)
    {
    	HANDLE h;
    	int Anz;
    	BOOL res;
    	WCHAR* buffw;
    	char buff[] ="Neue String";
    	buffw = new WCHAR[256];
    
             // ASCII-String in Unicode-String umwandeln
    	Anz = MultiByteToWideChar(CP_ACP, 0, buff, lstrlen(buff), NULL, 0);
    	MultiByteToWideChar( CP_ACP, 0, buff, lstrlen(buff), buffw, Anz); 
    
    	h = BeginUpdateResource("C:\\ZielExe.exe", FALSE);
    	res = UpdateResource(h, RT_STRING, "IDS_STRING", MAKELANGID(LANG_GERMAN, SUBLANG_GERMAN), buffw, sizeof(buffw));
    	EndUpdateResource(h, TRUE);
    
    	return 0;
    }
    

    Erlich gesagt verstehe nicht soganz was ich bei UpdateResource() als Param. übergeben muß 😞 Bekomme immer 1 als Rückgabewert von UpdateResource obwohl es nonzero sein muß 😞



  • Peter I schrieb:

    Bekomme immer 1 als Rückgabewert von UpdateResource obwohl es nonzero sein muß

    Ich muß schon sagen: Prima Unterhaltungswert dieser Thread. Mit der Dll hat es wohl nicht ganz geklappt? Bin auch schon ganz gespannt, wann Dir der erste seinen fertigen Trojaner präsentiert ...



  • -King- schrieb:

    Peter I schrieb:

    Bekomme immer 1 als Rückgabewert von UpdateResource obwohl es nonzero sein muß

    Ich muß schon sagen: Prima Unterhaltungswert dieser Thread. Mit der Dll hat es wohl nicht ganz geklappt? Bin auch schon ganz gespannt, wann Dir der erste seinen fertigen Trojaner präsentiert ...

    Was hat DLL damit zutun???
    Wach endlich auf Mensch!!! Über dll haben wir in anderem Thread geredet.
    Du kannst denken was du willst, aber meiner Meinung nach, wenn man sich über Trojanerfunktionen informiert, heißt das noch lange nicht ,dass man einen schreibt.
    Und tun mir eine Gefale, antworte nicht mehr auf meine Fragen, gell?
    Denn dein Quatch was du hier schreibst ist sowieso nutzlos.


Anmelden zum Antworten