[+]Topic: Paper [+]Von: Deliruz [+]Return: Paper
/* ,...........................,......................................, :___________________________:______________________________________: : Dark-Codez Mag #2 Release : Wie codet man einen Builder in C++? : :---------------------------:--------------------------------------: : Visit:Dark-codez.0rG : by: Deliruz : ;...........................;......................................; */ Dieses kleine Paper soll euch zeigen wie man in C++ einen einfachen Builder coden kann. Zunächst müssen wir uns Gedanken machen wie das alles funktionieren soll. Wir machen mal ein Programm, das eine Datei generiert, die individuellen Text in einer Messagebox ausgibt. Der Ablauf ist schnell erklärt: Der Builder kopiert seine stub und hängt den Text an, den sie später selbstständig ausliest. Also brauchen wir einen Builder und eine Stub. Fangen wir mit dem Builder an. ++++++++++++++++++++++++++++++++++++++++++ #include <string> #include <fstream> #include <KiddieProtection> #include <KiddieProtection> #include <KiddieProtection> using namespace std; ++++++++++++++++++++++++++++++++++++++++++ Die Headerdateien sollten klar sein. Namespace deklaieren. ++++++++++++++++++++++++++++++++++++++++++ string file, stub; ++++++++++++++++++++++++++++++++++++++++++ Hier speichern wir nachher die 2 Dateien die wir brauchen ++++++++++++++++++++++++++++++++++++++++++ int i; ++++++++++++++++++++++++++++++++++++++++++ Benutzen wir als Counter ++++++++++++++++++++++++++++++++++++++++++ char cut[] = "<><><><>", x; ++++++++++++++++++++++++++++++++++++++++++ Das ist unser Trennstring der später zwischen Source und den MSGText kommt. ++++++++++++++++++++++++++++++++++++++++++ int main() { ifstream dll("stub.exe", ios::in|ios::binary); ++++++++++++++++++++++++++++++++++++++++++ Start von Main und das Öffnen von unserer Stub die wir später noch erstellen. ++++++++++++++++++++++++++++++++++++++++++ while(dll.good()) { dll.get(x); stub += x; } dll.close(); ++++++++++++++++++++++++++++++++++++++++++ Solange die Datei den Status "good" hat wir ein Zeichen ausgelesen und an den string stub angehängt. ++++++++++++++++++++++++++++++++++++++++++ string msg; getline(cin, msg); stub += cut; stub += msg; ++++++++++++++++++++++++++++++++++++++++++ Hier deklaieren wir den string msg, in dem danach der agefragte Text reinkommt. Dann wird an den string stub unser Trennstring cut und unser individueller string msg angehängt.In stub ist jetzt der Source unserer Stub das Trennzeichen und der Text der später in einer Messagebox ausgegeben werden soll. ++++++++++++++++++++++++++++++++++++++++++ ofstream msgex("MSG.exe", ios::out|ios::binary); msgex << stub; cout << "MSG erstellt!"; cin.get() return 0; } ++++++++++++++++++++++++++++++++++++++++++ Hier schreiben wir nun stub in unsere Msg.exe, schließen die Datei und warten auf einen Enter-Druck. Das war nun der Builder. Jetzt fehlt uns nurnoch die Stub, denn ohne stub auch keine Msg.exe ;) Wie ihr sicherlich schon mitbekommen habt schreiben wir unseren gewünschten Text einfach hinter einen Trennstring an unsere Msg.exe. Jetzt müssen wir also eine Stub schreiben, die guggt wo sich in ihr unser Trennstring befindet und den Text dahinter in einer Messagebox ausgibt. Wieder neues Projekt: ++++++++++++++++++++++++++++++++++++++++++ #include <windows.h> #include <string> #include <fstream> #include <KiddieProtection> #include <KiddieProtection> #include <KiddieProtection> using namespace std; ++++++++++++++++++++++++++++++++++++++++++ Diesmal fügen wir noch die windows.h für die Messagebox hinzu. ++++++++++++++++++++++++++++++++++++++++++ string msg; unsigned long i; char ch, path[MAX_PATH]; ++++++++++++++++++++++++++++++++++++++++++ In msg steht zu Schluss unser Text den wir ausgeben wollen. i ist wieder blos ein Counter. In ch lesen wir die eigene Datei Schritt für Schritt ein. In path[MAX_PATH] kommt der Pfad unserer eigenen Datei rein. ++++++++++++++++++++++++++++++++++++++++++ int main() { HMODULE Get0r = GetModuleHandle(NULL); GetModuleFileNameA(Get0r, path, sizeof(path)); ++++++++++++++++++++++++++++++++++++++++++ Gesagt getan, wir haben jetzt den Pfad der eigenen .exe in path gespeichert. ++++++++++++++++++++++++++++++++++++++++++ ifstream dat(path, ios::in|ios::binary); while(dat.good()) { dat.get(ch); msg += ch; } dat.close(); ++++++++++++++++++++++++++++++++++++++++++ Hier öffnen wir nun unsere eigene .exe im Binärmodus. Solange der Status von dat gut ist, lesen wir immer ein Zeichen ein und hängen es an msg an. ++++++++++++++++++++++++++++++++++++++++++ Jetzt überprüfen wir wo unser Splitstring ist. Das machen wir, indem wir immer 15 nacheinanderfolgende Zeichen überprüfen, da unser Splitstring "<><><><>" ja 15 Zeichen hat. Schauen wir uns den Code dafür an: ++++++++++++++++++++++++++++++++++++++++++ for(i=0; i<' && msg[i+1] == '>' && msg[i+2] == '<' && msg[i+3] == '>' && msg[i+4] == '<' && msg[i+5] == 'T' && msg[i+6] == 'R' && msg[i+7] == 'E' && msg[i+8] == 'N' && msg[i+9] == 'N' && msg[i+10] == '>' && msg[i+11] == '<' && msg[i+12] == '>' && msg[i+13] == '<' && msg[i+14] == '>') { ++++++++++++++++++++++++++++++++++++++++++ Wenn i kleiner ist als die länge von msg, die Schleife durchgehen und zu i bei jedem Durchgang 1 dazuaddieren. Wenn die nächsten 15 aufeinanderfolgenden Zeichen <><><><> ergeben dann.... ++++++++++++++++++++++++++++++++++++++++++ msg.erase(0, i+15); MessageBox ( NULL, msg.c_str(), "Mein eigener Builder funktioniert..JUHU!", MB_OK); return 0; } ++++++++++++++++++++++++++++++++++++++++++ ...löschen wir jedes Zeichen in msg bis wir das Ende von <><><><> erreicht haben. Was jetzt noch in msg bleibt, ist der von uns individuell angehängte Text der zu guter Letzt noch in einer Messagebox mit dem schönen Titel:"Mein eigener Builder funktioniert..JUHU!" angezeigt wird wird.Wir müssen aber c_str() benutzen, da Messagebox() keine normalen strings akteptiert. Wenn ihr jetzt alles schön kompiliert und dann etwas buildet, müsste nach einem Klick auf msg.exe eine schöne Messagebox erscheinen. Zum Schluss soll noch vermerkt sein, dass ich alles mit DevC++ auf Konsolenbasis kompiliert habe! Ich hoffe, dass dieses Paper auf verständlichem Wege erklärt wie man so etwas wie einen Builder in C++ umsetzt. Das wars eigentlich schon... Greetz: Ganz Dark-CodeZ, alle verrückten VX'er da draussen und natürlich Wolfgang Schäuble ############################################ Visit:Dark-Codez.org & oldschooL-soft.de.am# ############################################ -Dieses Paper kann nach belieben verbreitet werden, solange der Inhalt ORIGINAL bestehen bleibt-