[Lenguaje] : Delphi
[Autor] : Doddy Hackman
[Temario]
-- =================--------
0x01 : Introduccion
0x02 : Creacion del builder
0x03 : Creacion del stub
0x04 : Probando el programa
-- =================--------
0x01 : Introduccion
Siempre quise hacer un Server Builder en delphi pero siempre me fue dificil porque nadie habia hecho un manual en Delphi donde se explicara , tampoco en los foros
de programacion me querian ayudar , entonces tuve que buscar mucho en google hasta encontrar un codigo simple donde se tratara de este tema.
Entonces encontre un codigo donde se trataba de este caso hecho en Delphi por alguien llamado Faceless Wonder , de esta forma me base del codigo de Faceless Wonder
para poder hacer uno bien basico para poder explicar en este tutorial.
Empecemos .......
0x02 : Creacion del builder
Primero vamos a crear el builder , para eso vamos a File->New->VCL Forms Application como lo hice en la imagen :
Ahora creamos dos edit y un boton como en la imagen :
Despues le damos doble click al boton para poner el siguiente codigo :
Código
procedure TForm1.Button1Click(Sender: TObject); var linea: string; // Declaramos todas las variables aca: THandle; code: Array [0 .. 80 + 1] of Char; nose: DWORD; marca_uno: string; marca_dos: string; begin marca_uno := '{IP}'; // Ponemos la marca para la IP marca_dos := '{PORT}'; // Ponemos la marca para el puerto aca := INVALID_HANDLE_VALUE; nose := 0; begin linea := marca_uno + Edit1.Text + marca_uno + marca_dos + Edit2.Text + marca_dos; // Formamos la linea con los datos de la IP y el Puerto StrCopy(code, pchar(linea)); aca := CreateFile(pchar('server.exe'), GENERIC_WRITE, FILE_SHARE_READ, nil, OPEN_EXISTING, 0, 0); // Abrimos el archivo server.exe if (aca <> INVALID_HANDLE_VALUE) then begin SetFilePointer(aca, 0, nil, FILE_END); WriteFile(aca, code, 80, nose, nil); // Escribimos en el archivo CloseHandle(aca); // Cerramos el archivo end; end; end;
Otra imagen para que vean como quedo :
Con eso guardamos el proyecto y vamos al stub
0x03 : Creacion del stub
La parte vital y supuestamente mas dificil , la idea es que el archivo se lea a si mismo y busque lo que hicimos en el builder , para empezar hacemos lo mismo que el builder ,
creamos otro proyecto como la otra vez , File->New->VCL Forms Application , entonces agregamos dos edit y un boton como en la imagen.
Una vez hecho hacemos doble click en el boton y ponemos el siguiente codigo :
Código
// Funcion para dividir el texto para buscar la IP y el Puerto function regex(text: String; deaca: String; hastaaca: String): String; begin Delete(text, 1, AnsiPos(deaca, text) + Length(deaca) - 1); SetLength(text, AnsiPos(hastaaca, text) - 1); Result := text; end; procedure TForm1.Button1Click(Sender: TObject); var ob: THandle; // Declaramos todas las variables code: Array [0 .. 80 + 1] of Char; nose: DWORD; ip: string; port: string; begin ob := INVALID_HANDLE_VALUE; code := ''; // El programa se lee a si mismo ob := CreateFile(pchar(paramstr(0)), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, 0, 0); if (ob <> INVALID_HANDLE_VALUE) then begin SetFilePointer(ob, -80, nil, FILE_END); ReadFile(ob, code, 80, nose, nil); // Extraemos el contenido y lo ponemos en la variable code CloseHandle(ob); // Cerramos el archivo end; ip := regex(code, '{IP}', '{IP}'); // Usamos la funcion regex para sacar la IP port := regex(code, '{PORT}', '{PORT}'); // Usamos la funcion regex para sacar el puerto Edit1.text := ip; // Ponemos la IP en Edit1 Edit2.text := port; // Ponemos el puerto en Edit2 end;
Una imagen de como queda :
Guarden el proyecto de forma que el ejecutable termine llamandose server.exe
Ahora que esta todo hecho pasamos al siguiente punto.
0x04 : Probando el programa
Bueno ,ahora solo cargan el builder , ponen los datos que quieran y despues cargan el stub "server.exe" para cargar el boton del stub , entonces veran algo como esto
Como ven tambien use WinHex para cargar el ejecutable server.exe y verificar que realmente el builder habia hecho bien el trabajo.
Eso seria todo.
Si quieren bajar el manual en formato PDF lo pueden hacer de aca.
--========--
The End ?
--========--