hmmm No te preocupes, El último script que puse hacia eso.
El code sigue las siguientes condiciones (Si esto no es como lo he tenido en cuenta, Especifícalo para corregirlo):
- El principio del code en base64 empieza SIEMPRE después de la cadena "X-Attachment-Id: ......."
El problema en los eml reales es que esa condición no se cumple, La cadena es distinta:
Content-Disposition: attachment; filename=........
Así que es suficiente con cambiar la cadena que el script tiene que buscar...:
if line.include?('Attachment-Id')
Por esta:
if line.include?('attachment')
(
EDITO:
DEBES ASEGURARTE DE QUE EN TODOS LOS ARCHIVOS EML SÉA IGUAL LA CONDICIÓN ANTES DE USAR EL SCRIPT, SINÓ NO SE DESENCRIPTARAN TODOS LOS EMAILS. SUPONGO QUE SI TODOS LO HAN MANDADO CON EL MISMO CLIENTE DE CORREO PUES LA CONDICIÓN NO CAMBIARÁ, PERO ASEGURATE TÚ MISMO MEJOR. SI HAY MÁS CADENAS DISTINTAS AGREGALAS A ESTE ÚLTIMO SCRIPT COMO VES QUE HE HECHO)
Aquí tienes una versión mejorada:
EML-Decrypter.RB# -*- coding: UTF-8 -*-
require 'base64'
# Este es el archivo de destino que contendrá todos los base64 descifrados.
DestFile = '.\Todo.txt'
# Cambia el directorio de trabajo actual si se indica la ruta desde la consola.
if not ARGV[0] == nil
Dir.chdir(ARGV[0])
end
# Cambia el archivo de destino si se indica desde la consola.
if not ARGV[1] == nil
DestFile = ARGV[1]
end
# Procesa cada archivo EML del directorio actual, descifrando los codes en Base64 que contenga cada archivo, Y los guarda en el archivo de destino.
for file in Dir.glob('*.eml') do
puts "\n[+] #{file}"
File.open(file).each_line do |line|
if line.include?('attachment') or line.include?('X-Attachment-Id')
puts "Adjunto: #{line.split('=').last.to_s}"
File.open(DestFile, 'a+') do |newfile|
newfile.puts Base64.decode64(File.read(file).split(line.to_s).last.split('--').first.split(' ').to_s)
end # newfile
end # split
end # line
end # for *.eml
__END__
PD: No es necesario que copies todos los EML en un solo archivo, El code va procesando archivo por archivo, Y va guardando los base64 descifrados en el archivo de destino.
Ruby.exe EML-Decrypter.rb "Carpeta donde tengas los EML" "Archivo de destino"
REM Ejemplo:
REM EML-Decrypter.rb "C:\Test\emails" "C:\destino-descifrado.txt"
Con esto creo que ya está más que solucionado jeje xD.
Saludos.