• Publicidad

Joiner

¿Estás desarrollando un proyecto, o piensas hacerlo? Pon aquí tu propuesta, lo más seguro es que alguien esté interesado en ayudarte.

Re: Decodificar hex en Python y Perl

Notapor BigBear » 2013-03-06 11:38 @527

explorer escribiste:
Doddy escribiste:Necesito hacer un script en Perl que me ayude a decodificar hex como lo hace el script en Python en la parte "decode('hex')".

¿ Alguien sabe cómo lograr el mismo resultado ?
Estas son dos maneras de hacerlo:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $cadena = '45645cbeaae75cac487b59bcadcbae';
  2. $texto .= chr hex $1 while $cadena =~ /(..)/g;
  3.  
  4. $texto = pack "H*", $cadena;
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
(La parte del hexdump es solo para comprobar que lo hace bien).
(Obviamente, el pack() es mucho más óptimo que el bucle while).
(Ejemplos sacados de perldoc perlpacktut, y en la Web).


Humm, ojalá tuviera tu experiencia. Te quería preguntar cómo hago lo inverso. Me refiero a codificar en hexadecimal que es lo contrario a esto.

¿ Me podrías dar un ejemplo ?
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Publicidad

Re: Joiner

Notapor explorer » 2013-03-06 12:11 @549

Pero... Doddy, si es de pura lógica :)

Si
para pasar de hexadecimal a binario, necesitamos pack(),
para pasar de binario a hexadecimal, necesitaremos unpack():
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $hex = unpack "H*", $binario;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


A ver si podemos terminar perlpacktut de una vez...
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Joiner

Notapor BigBear » 2013-03-06 12:30 @562

Nooooooo, lo había pensado pero pensé que estaba errado (como siempre) por eso te lo pregunté, qué desgracia :(

Estoy haciendo un script para extraer los bytes y pasarlos a hexadecimal, como ves, pero me gustó una opción de dividir cada ciertos caracteres como separar cada 23 bytes.

Mira:
Sintáxis: [ Descargar ] [ Ocultar ]
Using python Syntax Highlighting
  1.         f = open(sys.argv[2],"rb")
  2.         lee = f.read()
  3.         leehex = lee.encode("hex")
  4.         longitud = len(leehex)
  5.         for i in range (0,longitud-1,int(sys.argv[1])):
  6.                 final = leehex[i:i+int(sys.argv[1])]
  7.                 print final
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Quiero pasarlo a Perl pero lo único que no entiendo es el for y cómo guarda la variable final.

¿ vos entendés esas líneas de Python ?
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Re: Joiner

Notapor explorer » 2013-03-06 12:47 @574

Lo que hace ese código es leer el archivo en modo binario, pasarlo a hexadecimal, y leer la cadena hexadecimal cada cierto número de caracteres, para sacarlos en pantalla.

Lo que hace el for se puede escribir así:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. for (my $i = 0; $i <= $longitud-1; $i += $ARGV[1]) {
  2.     my $final = substr $leehex, $i, $ARGV[1];
  3.     say $final;
  4. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Joiner

Notapor BigBear » 2013-03-09 11:45 @531

El proyecto avanzo algo, pero gracias a tu ayuda, el código del inicio está aquí:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!usr/bin/perl
  2. #HexNow 0.1
  3. #Coded By Doddy H
  4. #Script based in getbytes.py made by hecky neobits
  5. #Thanks to hecky neobits & explorer(perlenespanol)
  6.  
  7. use Getopt::Long;
  8. use File::Basename;
  9. use Cwd;
  10.  
  11. chdir( getcwd() );
  12.  
  13. GetOptions(
  14.     "hex=s"      => \$hex,
  15.     "each=s"     => \$hexeach,
  16.     "output=i"   => \$output,
  17.     "savefile=s" => \$savefile
  18. );
  19.  
  20. head();
  21.  
  22. if ($hex) {
  23.  
  24.     my $code_final;
  25.  
  26.     if ($hexeach) {
  27.  
  28.         my $st = unpack "H*", getcontent($hex);
  29.         my $reco;
  30.  
  31.         for ( my $num = 0 ; $num <= length($st) - 1 ; $num += $hexeach ) {
  32.             my $final = substr $st, $num, $hexeach;
  33.             $reco .= $final . "\n";
  34.         }
  35.  
  36.         $code_final = $reco;
  37.  
  38.     }
  39.     else {
  40.         $code_final = unpack "H*", getcontent($hex);
  41.     }
  42.  
  43.     if ( $output eq "1" ) {
  44.  
  45.         print "\n\n[+] Encoding ....\n";
  46.  
  47.         print "\n[Start]\n\n";
  48.         print $code_final;
  49.         print "\n\n[End]\n";
  50.  
  51.     }
  52.  
  53.     if ($savefile) {
  54.         savefile( $savefile, $code_final );
  55.         print "\n[+] Result generated in : $savefile\n";
  56.     }
  57.     else {
  58.         my $div = basename($hex);
  59.         if ( $div =~ /(.*)\.(.*)/ ) {
  60.             my $listo = $1 . "_hex.txt";
  61.             savefile( $listo, $code_final );
  62.             print "\n[+] Result generated in : $listo\n";
  63.         }
  64.     }
  65.  
  66.     copyright();
  67.  
  68. }
  69.  
  70. sub head {
  71.     print qq(
  72.  
  73.              _____
  74.       ,----/,--.   `.
  75.     /    '. `-'     \         Program Name : HexNow
  76.     | ____ \      '`|_        Version : 0.1
  77.     \'.--._/` _     \ '.       Author : Doddy H
  78.          /'-|/ \|`\|-`  \       Script based in getbytes.py made by hecky neobits  
  79.          /   /       \   |     Thanks to hecky neobits
  80.          |  ;    '`  |  .'
  81.          '. |;;      ;  /
  82.          \ \ ;     / ,'        Examples :
  83.            ;--,   .,--,
  84.         __||=|=|./|=|=||___   perl hexnow.pl -hex imagen.jpg
  85.           `'-'-'  `-'-'`      perl hexnow.pl -hex imagen.jpg -each 5
  86.      ______________________  perl hexnow.pl -hex imagen.jpg -output 1
  87.          /'/ /  \ \ \         perl hexnow.pl -hex imagen.jpg -savefile test.txt
  88.         / '.';  ; \ ' \
  89.        '-/   | ; | ; \-'
  90.          \_| |   | |_/        The End ?
  91.            `-'\_/`-'
  92.  
  93. );
  94. }
  95.  
  96. sub copyright {
  97.     print "\n(C) Doddy Hackman 2013\n";
  98.     exit(1);
  99. }
  100.  
  101. sub getcontent {
  102.  
  103.     open( FILE, $_[0] );
  104.     binmode(FILE);
  105.     my @lines = <FILE>;
  106.     close FILE;
  107.  
  108.     $code = join "", @lines;
  109.     return $code;
  110.  
  111. }
  112.  
  113. sub savefile {
  114.  
  115.     if ( -f $_[0] ) {
  116.         unlink( $_[0] );
  117.     }
  118.  
  119.     open( SAVE, ">>" . $_[0] );
  120.     print SAVE $_[1];
  121.     close SAVE;
  122. }
  123.  
  124. #The End ?
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Cualquier sugerencia para mejorar el código, decidla.
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Re: Joiner

Notapor explorer » 2013-03-09 17:23 @766

En los comentarios debería aparecer una explicación de los argumentos que se le pueden pasar al programa. Y un ejemplo tampoco estaría mal.

La función getcontent() se podría escribir así:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. sub getcontent {
  2.     my $file = shift;
  3.     my $code;
  4.     {
  5.         local $/;                          # activar modo aspiradora
  6.         open  my $FILE, '<', $file or die "ERROR: Can't open file $file: $!\n";
  7.         binmode  $FILE;
  8.         $code = <$FILE>;
  9.         close    $FILE;
  10.     }
  11.     return $code;
  12. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


El die() es necesario porque no usas autodie, claro.

Sigo pensando que haces programas demasiado largos... Lo del loro... quizás se entienda en el mundo Windows, pero en el mundo UNIX/Linux sería objeto de burla y escarnio, debido a que tu programa no podría ser entubado con otro :)
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Joiner

Notapor BigBear » 2013-03-31 16:55 @746

Gracias por la ayuda, explorer, el proyecto está terminado.

Una imagen del generador:
Imagen

Pueden bajar el programa desde aca.
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Anterior

Volver a Proyectos

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado