vladiii Posted February 9, 2008 Report Posted February 9, 2008 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):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 Quote
shamat Posted February 9, 2008 Report Posted February 9, 2008 Felicitari vladiii pentru tutorial. Ar trebuii pus si la tutoriale pe prima pagina.Am incercat si eu sa fac o implementare in Delphi si functioneaza perfect.Bafta Quote