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

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  [Ruby] Extractor de archivos [Código inside]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Ruby] Extractor de archivos [Código inside]  (Leído 2,809 veces)
tbgio

Desconectado Desconectado

Mensajes: 13


Ver Perfil
[Ruby] Extractor de archivos [Código inside]
« en: 19 Julio 2011, 12:12 pm »

Acabo de medio terminar un script para extraer archivos de un paquete BNDL en ruby. Aquí va el código para el que le pueda interesar:

Código:
# MEDP (Multi Extractor De Paquetes) 0.0.1
# Programado por SeCaProject
# 2011 en Ruby

# Librerias necesarias
require 'FileUtils'

# Pregunta qué archivo leer
puts "Nombre completo del archivo"
nombrearchivo = gets.strip
puts "Leyendo "+nombrearchivo+", un momento por favor..."
arch = File.new(nombrearchivo, "rb")
arch_leer = File.new(nombrearchivo, "rb")
# Saber que tipo de archivo es
tipo_arch = arch.read(4)
puts "Tipo de archivo: #{tipo_arch}"
arch.read(4)
dirhex1 = arch.sysread(1).unpack('H*')
dirhex2 = arch.sysread(1).unpack('H*')
dirhex3 = arch.sysread(1).unpack('H*')
dirhex4 = arch.sysread(1).unpack('H*')
dirtotal = [dirhex4,dirhex3,dirhex2,dirhex1].join.to_i(16)
puts "Longitud de la tabla: #{dirtotal}"
arch.read(4)
puts "Seguimos?"
seguimos = gets.strip

# Pone el archivo al principio
arch.seek(16, IO::SEEK_SET)

# Lee el archivo
cuenta0 = 16
for cuenta1 in 1..dirtotal do
if cuenta0 == dirtotal
break
end
cuenta0 = cuenta0 + 1
archivo1 = arch.read(1).bytes.first

# Si es una carpeta
if archivo1 == 1
cuenta0 = cuenta0 + 1
archivo1a = arch.read(1).bytes.first
# Me aseguro de que es una carpeta
if archivo1a == 1
# Lee el nombre del archivo, maximo 50 caracteres
for cuenta3 in 1..50 do
cuenta0 = cuenta0 + 1
archivo1b = arch.read(1).bytes.first
if archivo1b == 0
arch.seek(cuenta0-cuenta3, IO::SEEK_SET)
carpetanueva = arch.read(cuenta3)
break
end
end
end
# Si es un archivo
elsif archivo1 == 2
cuenta0 = cuenta0 + 12
# Distancia del inicio del archivo
dirhex1 = arch.sysread(1).unpack('H*')
dirhex2 = arch.sysread(1).unpack('H*')
dirhex3 = arch.sysread(1).unpack('H*')
dirhex4 = arch.sysread(1).unpack('H*')
ini_file = [dirhex4,dirhex3,dirhex2,dirhex1].join.to_i(16)
# 4 bloques vacios
arch.read(4)
# Longitud del archivo
dirhex1 = arch.sysread(1).unpack('H*')
dirhex2 = arch.sysread(1).unpack('H*')
dirhex3 = arch.sysread(1).unpack('H*')
dirhex4 = arch.sysread(1).unpack('H*')
end_file = [dirhex4,dirhex3,dirhex2,dirhex1].join.to_i(16)
# Lee el nombre del archivo
for cuenta3 in 1..100 do
cuenta0 = cuenta0 + 1
archivo2d = arch.read(1).bytes.first
if archivo2d == 0
# Copiando nombre al archivo
arch.seek(cuenta0-cuenta3, IO::SEEK_SET)
content = arch.read(cuenta3)
# Copiando contenido del archivo
arch_leer.seek(ini_file, IO::SEEK_SET)
content1 = arch_leer.read(end_file)
# Creando archivo
save_arch = File.open("#{tipo_arch}/#{content[1..-1].chop!}", File::CREAT | File::WRONLY | File::TRUNC)
save_arch.syswrite(content1)
break
end
end
end
end

De momento solo válido para archivos BNDL.
Como iba diciendo, después de medio terminarlo, me he preguntado a ver si este código se puede hacer más corto, o algo sobra, o lo que sea.
Eso por un lado, luego también querría saber cómo puedo hacer para que me lo meta en carpetas que el propio archivo tiene.
Para cualquier duda sobre el script, preguntad. Si algo no está claro también avisad.


« Última modificación: 21 Julio 2011, 08:44 am por Leo Gutiérrez. » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Código-PyQT4]Extractor de imágenes - JaAViEr(0x5d)
Scripting
0x5d 0 2,210 Último mensaje 24 Diciembre 2011, 23:22 pm
por 0x5d
[Código-Ruby]String to ASCII - JaAViEr
Scripting
0x5d 0 2,501 Último mensaje 7 Enero 2012, 19:33 pm
por 0x5d
[Código-Ruby]Sucesión Fibonacci - JaAViEr
Scripting
0x5d 0 2,745 Último mensaje 8 Enero 2012, 08:57 am
por 0x5d
pendrive extractor de archivos
Hacking
badcat21 0 2,477 Último mensaje 6 Abril 2019, 20:56 pm
por badcat21
Aporte - Extractor de información de seguridad para archivos APK
Hacking
WHK 2 3,315 Último mensaje 11 Febrero 2020, 19:06 pm
por WHK
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines