comment
IRC Chat
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

[Delphi] Creacion de un Server Builder con recursos

  • 1 Respuestas
  • 1478 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado BigBear

  • *
  • Underc0der
  • Mensajes: 543
  • Actividad:
    0%
  • Reputación 3
    • Ver Perfil
« en: Marzo 09, 2015, 02:52:05 pm »
[Titulo] : Creacion de un Server Builder con recursos
[Lenguaje] : Delphi
[Autor] : Doddy Hackman

[Temario]

-- =================--------

0x01 : Introduccion
0x02 : Creacion del builder
0x03 : Creacion del stub
0x04 : Probando el programa
0x05 : Builder Tools

-- =================--------

0x01 : Introduccion

En este manual les voy a enseñar como hacer un Server Builder en Delphi usando recursos , en el manual anteior les enseñe como hacerlo mediante EOF , algo que no era muy seguro porque los datos estaban en texto plano y se podian leer facilmente , mediante recursos es diferente y para asegurarlo vamos a usar XOR para eso.

Empecemos ...

0x02 : Creacion del builder

Primero vamos hacer el builder , para eso vamos a "File->New->VCL Forms Application" como lo hice en la imagen :



Ahora creamos dos edit y boton con el texto de "Make Server" como en la siguiente imagen :



Despues deben cambiar el titulo del formulario a "Builder" y cambiarle el nombre por defecto que tienen los edits de la siguiente forma :

Edit1 -> ip
Edit2 -> port

Una vez hecho , hacemos doble click en el boton y agregamos el siguiente codigo :

Código: Delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var
  3.   archivo: string; // Declaramos la variable "archivo" como string
  4.   datos: string; // Declaramos la variable "datos" como string
  5.   clave: integer; // Declaramos la variable "clave" como integer
  6. begin
  7.   archivo := 'stubnow.exe';
  8.   // Establecemos la variable "archivo" como el nombre del ejecutable
  9.   // que vamos abrir
  10.   datos := '[ip]' + ip.Text + '[ip]' + '[port]' + port.Text + '[port]';
  11.   // Establecemos los datos que contiene la IP y el puerto separados por etiquetas
  12.   // y los guardamos en la variable "datos"
  13.   clave := 123; // Establecemos la variable "clave" como "123"
  14.   escribir_recurso(archivo, datos, clave);
  15.   // Escribimos el recurso usando la funcion
  16.   // "escribir_recurso" usando como argumentos las variables que acabamos de establecer
  17.   ShowMessage('Done'); // Mostramos un mensaje en pantalla
  18. end;
  19.  

Fuera del codigo de la funcion "click" del boton agregamos el codigo de estas dos funciones :

Código: Delphi
  1. function xor_now(texto: string; clave: integer): string;
  2. // Funcion xor_now con el argumento
  3. // del texto a crifrar y la clave a usar
  4.  
  5. var
  6.   numero: integer; // Declaramos la variable "numero" como entero
  7.   contenido: string; // Declaramos la variable "contenido" como string
  8. begin
  9.   contenido := ''; // Vaciamos la variable contenido
  10.   for numero := 1 to Length(texto) do // Realizamos un for del "1"
  11.   // a la longitud de la variable texto
  12.   begin
  13.     contenido := contenido + Char(integer(texto[numero]) xor clave);
  14.     // Realizamos el cifrado xor
  15.   end;
  16.   Result := contenido; // Devolvemos como resultado la variable "contenido"
  17. end;
  18.  
  19. function escribir_recurso(ruta: string; datos: string; clave: integer): bool;
  20. var
  21.   escribiendo: THandle; // Declaramos la variable "escribiendo" como THandle
  22. begin
  23.   datos := xor_now('-0x646F646479206861636B6D616E-' + datos +
  24.     '-0x646F646479206861636B6D616E-', clave);
  25.   // Ciframos los datos usando la funcion xor_now
  26.   // Los parametros que usamos en la funcion xor_now son la variable "datos" como el texto
  27.   // a cifrar , los "datos" estan entre dos delimitadores para facilitar su busqueda y
  28.   // tambien usamos la variable "clave" como key en el cifrado xor
  29.   escribiendo := BeginUpdateResource(pchar(ruta), False);
  30.   // Empezamos el inicio de de la creacion
  31.   // del recurso usando la variable "ruta"
  32.   UpdateResource(escribiendo, MakeIntResource(10), 'CONFIGURATION', 0,
  33.     pchar(datos), (Length(datos) + 1) * SizeOf(datos[1]));
  34.   // Escribimos el recurso usando
  35.   // la variable "datos" como el contenido del recurso y como nombre del recurso usamos
  36.   // "CONFIGURATION"
  37.   EndUpdateResource(escribiendo, False); // Terminamos de crear el recurso
  38.   Result := True; // Devolvemos True como resultado de la funcion
  39. end;
  40.  

Les deberia quedar algo asi :



Con eso ya estaria el builder entonces guardamos el proyecto como "builder_now" o como quieran para terminar el builder.

0x03 : Creacion del stub

Ahora vamos a codear el Stub para eso vamos a "File->New->VCL Forms Application" como lo hice en la imagen :



La idea es buscar el recurso en el ejecutable mismo , entonces para eso vamos a crear dos edits y un boton con el texto de "Get Values".

Despues deben poner como titulo del formulario "Stub" y cambiar los names de los edits de la siguiente forma :

Edit1 -> ip
Edit2 -> port

El formulario les deberia quedar algo asi :



Ahora hacemos doble click en el boton y ponemos el siguiente codigo :

Código: Delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var
  3.   clave: integer; // Declaramos la variable "clave" como integer
  4.   datos: string; // Declaramos la variable "datos" como string
  5.   ip_found: string; // Declaramos la variable "ip_found" como string
  6.   port_found: string; // Declaramos la variable "port_found" como string
  7. begin
  8.   clave := 123; // Establecemos la variable "clave" como 123
  9.   datos := leer_recurso(clave); // Leemos el recurso usando el key que esta
  10.   // en la variable clave y guardamos los datos en la variable "datos"
  11.   ip_found := regex(datos, '[ip]', '[ip]');
  12.   // Usamos la funcion regex() para buscar
  13.   // la ip y la guardamos en la variable "ip_found"
  14.   port_found := regex(datos, '[port]', '[port]');
  15.   // Usamos la funcion regex() para
  16.   // buscar el puerto y lo guardamos en la variable "port_found"
  17.   ip.text := ip_found; // Mostramos en el edit "ip" la IP
  18.   port.text := port_found; // Mostramos en el edit "port" el puerto
  19.   ShowMessage('Loaded'); // Mostramos en pantalla un mensaje
  20. end;
  21.  

Despues ponemos las siguientes funciones fuera del codigo del boton :

Código: Delphi
  1. function regex(text: string; deaca: string; hastaaca: string): string;
  2. begin
  3.   Delete(text, 1, AnsiPos(deaca, text) + Length(deaca) - 1);
  4.   SetLength(text, AnsiPos(hastaaca, text) - 1);
  5.   Result := text;
  6. end;
  7.  
  8. function xor_now(texto: string; clave: integer): string;
  9. // Funcion xor_now con el argumento
  10. // del texto a crifrar y la clave a usar
  11.  
  12. var
  13.   numero: integer; // Declaramos la variable "numero" como entero
  14.   contenido: string; // Declaramos la variable "contenido" como string
  15. begin
  16.   contenido := ''; // Vaciamos la variable contenido
  17.   for numero := 1 to Length(texto) do // Realizamos un for del "1"
  18.   // a la longitud de la variable texto
  19.   begin
  20.     contenido := contenido + Char(integer(texto[numero]) xor clave);
  21.     // Realizamos el cifrado xor
  22.   end;
  23.   Result := contenido; // Devolvemos como resultado la variable contenido
  24. end;
  25.  
  26. function leyendo_recurso: string;
  27. var
  28.   leyendo1: HRSRC; // Establecemos la variable "leyendo1" como HRSRC
  29.   leyendo2: DWORD; // Establecemos la variable "leyendo2" como DWORD
  30.   leyendo3: THandle; // Establecemos la variable "leyendo3" como THandle
  31.   leyendo4: pointer; // Establecemos la variable "leyendo4" como Pointer
  32. begin
  33.   leyendo1 := FindResource(hInstance, 'CONFIGURATION', RT_RCDATA);
  34.   // Buscamos el recurso
  35.   // "CONFIGURATION"
  36.   leyendo2 := SizeofResource(hInstance, leyendo1);
  37.   // Calculamos la tamaño del recurso
  38.   leyendo3 := LoadResource(hInstance, leyendo1); // Cargamos el recurso
  39.   leyendo4 := LockResource(leyendo3);
  40.   // Bloqueamos el recurso para poder leerlo despues
  41.   if leyendo4 <> nil then // Si "leyendo4" no esta null ...
  42.   begin
  43.     SetLength(Result, leyendo2 - 1); // Cambiamos la longitud de Result
  44.     CopyMemory(@Result[1], leyendo4, leyendo2);
  45.     // Copiamos los datos al resultado de la funcion
  46.     FreeResource(leyendo3); // Liberamos el recurso
  47.   end;
  48. end;
  49.  
  50. function leer_recurso(clave: integer): string;
  51. var
  52.   datos: string; // Declaramos la variable "datos" como string
  53. begin
  54.   datos := xor_now(leyendo_recurso, clave);
  55.   // Realizamos el cifrado xor con los datos que usamos
  56.   // como argumentos de la funcion leer_recurso()
  57.   datos := regex(datos, '-0x646F646479206861636B6D616E-',
  58.     '-0x646F646479206861636B6D616E-');
  59.   // Usamos la funcion regex() para cortar los delimitadores
  60.   // y encontrar asi los datos del recurso para despues guardar el
  61.   // resultado en la variable "datos"
  62.   Result := datos;
  63.   // Devolvemos como resultado lo que contiene la variable "datos"
  64. end;
  65.  

El codigo les deberia quedar asi :



Guardan el proyecto con el nombre que quieran y con eso ya estaria listo el stub.

0x04 : Probando el programa

Para probarlo cargamos el builder y llenamos los campos de IP y Puerto como quieran , un ejemplo de como los complete yo seria  :



Despues presionan el boton "Make Server" y listo.

Ahora cargamos el stub y le damos al boton "Get Values" , deberian ver como resultado algo como esto :



Si no ven algo como en la imagen es porque hicieron algo mal en el codigo.

0x05 : Builder Tools

Como regalo les dejo esta Unit que hice en Delphi sobre como hacer un Builder , contiene funciones para EOF y Recursos , en los dos casos uso XOR para encriptar los datos , tambien viene con ejemplos de uso.

Solo deben agregar "builder_tools" en el parte de "uses" del codigo y listo , podran usar las funciones.

El codigo :

Código: Delphi
  1. // Unit : Builder Tools
  2. // Version : 0.2
  3. // (C) Doddy Hackman 2015
  4. // Credits : Resources based in http://www.hackforums.net/showthread.php?tid=1422700
  5. // Examples :
  6. // escribir_eof('stub.exe','-delimitador-','-delimitador-','test',123);
  7. // leer_eof('stub.exe','-delimitador-','-delimitador-',123);
  8. // escribir_recurso('stub.exe','test',123);
  9. // leer_recurso(123);
  10.  
  11. unit builder_tools;
  12.  
  13. interface
  14.  
  15. uses SysUtils, Windows;
  16.  
  17. function leer_eof(ruta, delimitador1, delimitador2: string;
  18.   clave: integer): string;
  19. function escribir_eof(ruta, delimitador1, delimitador2, texto: string;
  20.   clave: integer): bool;
  21. function escribir_recurso(ruta: string; datos: string; clave: integer): bool;
  22. function leyendo_recurso: string;
  23. function leer_recurso(clave: integer): string;
  24. function xor_now(texto: string; clave: integer): string;
  25. function regex(text: string; deaca: string; hastaaca: string): string;
  26.  
  27. implementation
  28.  
  29. function xor_now(texto: string; clave: integer): string;
  30. var
  31.   numero: integer;
  32.   contenido: string;
  33. begin
  34.   contenido := '';
  35.   for numero := 1 to Length(texto) do
  36.   begin
  37.     contenido := contenido + Char(integer(texto[numero]) xor clave);
  38.   end;
  39.   Result := contenido;
  40. end;
  41.  
  42. function regex(text: string; deaca: string; hastaaca: string): string;
  43. begin
  44.   Delete(text, 1, AnsiPos(deaca, text) + Length(deaca) - 1);
  45.   SetLength(text, AnsiPos(hastaaca, text) - 1);
  46.   Result := text;
  47. end;
  48.  
  49. function leer_eof(ruta, delimitador1, delimitador2: string;
  50.   clave: integer): string;
  51. var
  52.   ob: THandle;
  53.   code: Array [0 .. 9999 + 1] of Char;
  54.   nose: DWORD;
  55.   resultado: string;
  56.  
  57. begin
  58.  
  59.   ob := INVALID_HANDLE_VALUE;
  60.   code := '';
  61.  
  62.   ob := CreateFile(pchar(ruta), GENERIC_READ, FILE_SHARE_READ, nil,
  63.     OPEN_EXISTING, 0, 0);
  64.   if (ob <> INVALID_HANDLE_VALUE) then
  65.   begin
  66.     SetFilePointer(ob, -9999, nil, FILE_END);
  67.     ReadFile(ob, code, 9999, nose, nil);
  68.     CloseHandle(ob);
  69.   end;
  70.  
  71.   resultado := regex(code, delimitador1, delimitador2);
  72.   resultado := xor_now(resultado, clave);
  73.   Result := resultado;
  74.  
  75. end;
  76.  
  77. function escribir_eof(ruta, delimitador1, delimitador2, texto: string;
  78.   clave: integer): bool;
  79. var
  80.   linea: string;
  81.   aca: THandle;
  82.   code: Array [0 .. 9999 + 1] of Char;
  83.   nose: DWORD;
  84.   marca_uno: string;
  85.   marca_dos: string;
  86.  
  87. begin
  88.  
  89.   aca := INVALID_HANDLE_VALUE;
  90.   nose := 0;
  91.  
  92.   begin
  93.     linea := delimitador1 + xor_now(texto, clave) + delimitador2;
  94.     StrCopy(code, pchar(linea));
  95.     aca := CreateFile(pchar(ruta), GENERIC_WRITE, FILE_SHARE_READ, nil,
  96.       OPEN_EXISTING, 0, 0);
  97.     if (aca <> INVALID_HANDLE_VALUE) then
  98.     begin
  99.       SetFilePointer(aca, 0, nil, FILE_END);
  100.       WriteFile(aca, code, 9999, nose, nil);
  101.       CloseHandle(aca);
  102.       Result := True;
  103.     end
  104.     else
  105.     begin
  106.       Result := False;
  107.     end;
  108.   end;
  109. end;
  110.  
  111. function escribir_recurso(ruta: string; datos: string; clave: integer): bool;
  112. var
  113.   escribiendo: THandle;
  114. begin
  115.   datos := xor_now('-0x646F646479206861636B6D616E-' + datos +
  116.     '-0x646F646479206861636B6D616E-', clave);
  117.   escribiendo := BeginUpdateResource(pchar(ruta), False);
  118.   UpdateResource(escribiendo, MakeIntResource(10), 'CONFIGURATION', 0,
  119.     pchar(datos), (Length(datos) + 1) * SizeOf(datos[1]));
  120.   EndUpdateResource(escribiendo, False);
  121.   Result := True;
  122. end;
  123.  
  124. function leyendo_recurso: string;
  125. var
  126.   leyendo1: HRSRC;
  127.   leyendo2: DWORD;
  128.   leyendo3: THandle;
  129.   leyendo4: pointer;
  130. begin
  131.   leyendo1 := FindResource(hInstance, 'CONFIGURATION', RT_RCDATA);
  132.   leyendo2 := SizeofResource(hInstance, leyendo1);
  133.   leyendo3 := LoadResource(hInstance, leyendo1);
  134.   leyendo4 := LockResource(leyendo3);
  135.   if leyendo4 <> nil then
  136.   begin
  137.     SetLength(Result, leyendo2 - 1);
  138.     CopyMemory(@Result[1], leyendo4, leyendo2);
  139.     FreeResource(leyendo3);
  140.   end;
  141. end;
  142.  
  143. function leer_recurso(clave: integer): string;
  144. var
  145.   datos: string;
  146. begin
  147.   datos := xor_now(leyendo_recurso, clave);
  148.   datos := regex(datos, '-0x646F646479206861636B6D616E-',
  149.     '-0x646F646479206861636B6D616E-');
  150.   Result := datos;
  151. end;
  152.  
  153. end.
  154.  
  155. // The End ?
  156.  

Eso seria todo.

--========--
  The End ?
--========--

Version PDF.

Version en VideoTutorial :


Desconectado Flemon

  • *
  • Underc0der
  • Mensajes: 235
  • Actividad:
    0%
  • Reputación 0
  • NO HAY FORMA DE DETENERME!!
    • Ver Perfil
    • Email
« Respuesta #1 en: Marzo 09, 2015, 07:56:20 pm »
En verdad Excelente vieja!! un aporte muy bueno... gracias por la dedicacion!!
No intentes pararme, trata de defenderte, trata de matarme, pero de cualqueir forma TE SUPERARE

 

¿Te gustó el post? COMPARTILO!



[Sintaxis general de Delphi] By: Geek Lord Venezuela [R00t] Team

Iniciado por ANTRAX

Respuestas: 0
Vistas: 2054
Último mensaje Febrero 24, 2010, 04:35:15 pm
por ANTRAX
Eliminar acentos y otros agregados de un caracter/cadena Delphi 2009

Iniciado por ANTRAX

Respuestas: 0
Vistas: 3265
Último mensaje Febrero 24, 2010, 04:57:14 pm
por ANTRAX
1er troyano en Delphi By: Geek Lord Venezuela [R00t] Team

Iniciado por ANTRAX

Respuestas: 0
Vistas: 3512
Último mensaje Febrero 24, 2010, 04:34:48 pm
por ANTRAX
[Delphi] Project Spartacus 1.0 (Regalo de Navidad)

Iniciado por BigBear

Respuestas: 2
Vistas: 1680
Último mensaje Diciembre 26, 2014, 11:54:34 pm
por n4pst3r
[Delphi] Project Arsenal X 0.2 (Regalo de navidad)

Iniciado por BigBear

Respuestas: 2
Vistas: 2945
Último mensaje Diciembre 28, 2015, 10:27:44 am
por BigBear