Jump to content
vladiii

File Editor

Recommended Posts

Salut. Multi v-ati intrebat cum sa editati anumite fisiere. Sau mai mult, v-ati intrebat cum sa faceti un server editor. Sau cum sa creati anumite executabile in functie de preferintele userului. In acest mic tutorial voi prezenta acest concept pt. un executabil realizat de mine, insa va fi indeajuns de explicit incat sa folositi pentru programele si nevoile voastre. Multe multumiri lui SlicK, fara tine as fi fost un sfert din ceea ce sunt acum. Thnx brotha’.

Sa incepem. Mediu de programare folosit: Dev-C++. Compilati urmatorul cod, care va fi folosit pentru teste:

#include <windows.h>
int main()
{
MessageBox(0, "Acesta este mesajul meu", "Titlu", 0);
return 0;
}

Practic asta va afisa un MessageBox cu titlul: Titlu si mesajul: Acesta este mesajul meu. Se observa foarte usor ca Titlu ocupa 5 bytes. Daca vom suprascrie 6 bytes, atunci titlul va fi reprezentat de: TitluAcesta este mesajul meu, iar mesajul: Acesta este mesajul meu. O sa explic imediat de ce.

Functia API MessageBox (si nu numai; asa sunt delimitate stringurile in sistemul de operare) “gandeste” dupa urmatorul principiu: afla offsetul lui T (de la Titlu) si parcurge in continuare pana cand ajunge la 0×00 (00 in HEX). Cand ajunge la 0×00, atunci citeste in continuare mesajul la fel, pana ajunge la 0×00, apoi le afiseaza. Daca eu scriu 6 bytes, o sa suprascriu acel 0×00, de aceea Titlul va fi reprezentat de Titlu+Mesaj.

Daca suprascriu mai mult de 6 bytes, Titlul va ramane acelasi: Titlu + Mesaj (noul mesaj + noul titlu, evident), iar mesajul se va modifica si va fi afisat noul mesaj.

Poate nu m-am exprimat cel mai corect, insa imaginea urmatoare este edificatoare [Deschideti executabilul cu Hex WorkShop] (click dreapta pe imagine si view imagine pt. a se vedea la dimensiunea normala):

hexe.JPG

Avem ceva de genul: Titlu.Acesta este mesajul meu. ! Unde . reprezinta 0×00 (sau 00). Deci… Am facut un mic patratel cu rosu in jurul adresei lui T. Deci avem posibilitatea sa scriem in continuare 5 bytes. Nu suprascriem 0×00. Continuam acum cu nr. de bytes din “Acesta este mesajul meu”.

Am facut codul in C care modifica titlul in aaaaa (5 bytes):

    #include <windows.h>
#include <stdio.h>
int main()
{
FILE * file;
//Noul titlu
char buffer[] = { 'a', 'a', 'a', 'a', 'a' };
//Deschidem
file = fopen ("msgbox.exe" , "r+" );
//Ne ducem la adresa la care avem nevoie
fseek(file, 0x00001000, SEEK_CUR);
//Scriem
fwrite(buffer , 1 , sizeof(buffer) , file );
//Inchidem
fclose(file);
return 0;
}

Cam acelasi lucru se poate face si pt. un trojan, numai ca acolo este recomandabil ca IPul sa fie tinut dinainte intr-un buffer de maxim 15 bytes (ca sa nu irosim memorie degeaba).

Succes in scrierea propriilor server editoare & stuff.

P.S. Trebuie sa stiti ca offseturile intr-un executabil nu sunt dinamice ca in DLLuri, deci conceptul poate fi pus in aplicare fara nicio retinere !

@vladii 2008 :)

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...