C++-anwendung macht noch eine anwendung

Hi ihr!

Ich habe eine Frage. Es gibt ja bei den Trojanern die Server builder.
Wie kann man das in C++ machen?

Ich möchte eine Anwendung machen, die z.b. eine PWD abfrage stellt, und diese dann in eine andere Anwendung samt abfrage und noch ein paar sachen einfügt.



Wie macht man das in C++?



MfG Blacki
 
ich nehm mal an zuerst wird die server.exe kompiliert. die config.exe patcht dann nur noch die stellen an denen der port, bzw das passwort etc steht.
falls du selber sowas proggen willst, kannst zb. die stellen einfach markieren indem du zb. den port als
Code:
const unsigned short port = 0x6666;
definierst und dann mit nem hexeditor einfach die stelle an der 66 66 steht suchst.
beim passwort das gleiche:
Code:
const char pass[20] = {'p','a','s','s','w','d',0};
dann wieder einfach die stelle suchen wo "passwd" steht. hier aber die arraygrenzen und die terminierende null nicht vergessen, sonst gibts fehler.
 
Ist zwar nur C, ist aber alles drin was du brauchst:
Code:
#include <io.h>
#include <stdio.h>

int main()
{
  FILE *fp;
  unsigned short zahl;
  long filelen;
  long i;

  if ((fp = fopen("test.exe", "r+b")) == 0)
      return(-1);
  filelen = filelength(fileno(fp));
  for (i = 0; i < filelen-1; i++)
    { fseek(fp, i, SEEK_SET);
      fread(&zahl, 2, 1, fp);
      if (zahl == 0x6666)
        { fseek(fp, i, SEEK_SET); /* read <-> write umschalten */
          zahl = 0x3333;
          fwrite(&zahl, 1, 2, fp);
          break;
        }
    }
  fclose(fp);
  return(-1);
}
 
Ok. Nehmen wir mal an du hast 3 GLOBALE Variablen in deinem Server:
Code:
unsigned short port = 0x1234;
char username[20] = {'u','s','e','r',0};
char password[20] = {''p','a','s','s',0};

Du kompilierst das ganze und öffnest dann mit einem Hex-Editor deiner Wahl die entstandene EXE-Datei. Dann machst du eine Suche nach "34 12" (???) oder auch einfach nach "user" oder "pass". Nachdem du die Stelle gefunden hast notierst du das offset der 3 Variablen. zb. port ist an offset 100, username an offset 102 und passwort an 122 (zahlen sind beispiele aber der unterschied sollte stimmen).

in deiner config.exe öffnest du dann die datei und machst dann ein fseek()/SetFilePointer()/etc an die stelle 100 und schreibst dann deinen port (achtung, nur 2 bytes). da du jetzt automatisch an der stelle 102 bist, kannst du jetzt deinen usernamen schreiben (terminierende null nicht vergessen!!!). dann solltest du nochmal an die stelle 122 seeken und hier dein passwort schreiben (auch wieder die terminierende null nicht vergessen und auch auf die arraygrenzen aufpassen, also in unserem fall ist ja user und pass mit maximal 20 zeichen definiert).
jetzt noch brav die datei schließen und fertig ist es.

die lösung von keksekekse ist nicht so gut, da es sein kann dass an anderer stelle die 0x6666 vorkommen kann und du dann deine EXE beschädigst. Außerdem funktioniert die Lösung von keksekekse (scheiß tipparbeit...^^) nur EINMAL und danach nicht mehr. das heißt nachdem du einmal den port geändert hast, kannst du ihn NIE mehr zurückändern ;)

//edit:
achja bei den offsets solltest du aufpassen, dass du nicht hexadezimal und dezimal verwechselst. das heißt, wenn im hex-editor steht "offset 100" dann ist das meistends in hex. du machst also beim fseek dann nicht fseek(file, 100, FILE_BEGIN) sondern fseek(file, 0x100, FILE_BEGIN) so umgehst du den fehler.
 
@v01d:

Okokok, das war nicht der ideale Code (wäre noch ausbaufähig).

Möglichkeit 1:

Code:
char username[20] = {'u','s','e','r',0};

Möglichkeit 2, more human readable (belastet die Tastatur und das Auge weniger):

Code:
char username[20] = "user";
 
Zurück
Oben