Página 1 de 1

Cómo puedo editar un fichero de políticas de Windows (POL)

NotaPublicado: 2009-09-24 08:28 @394
por ricar
Hola a todos.

Quiero editar el fichero Registry.pol (de un Windows) pero tiene una codificación particular, creo que está en ABNF.

¿Alguien sabe cómo puedo editarlo sin que aparezcan caracteres extraños para extraer su información?

Muchas gracias.

Un saludo,
Ricar.

Re: Cómo puedo editar un fichero codificado en ABFN

NotaPublicado: 2009-09-24 08:40 @403
por explorer

Re: Cómo puedo editar un fichero codificado en ABFN

NotaPublicado: 2009-09-24 08:56 @414
por ricar
explorer escribiste:Quizás Parse::Win32Registry.


Jó!!, que rápido eres con el revolver :lol:

No creo que sea válido, porque este módulo tira del registro, o sea de un loquesea.reg (o de un .dat -que es la base de datos de políticas de Windows-). El fichero del que hablo, es registry.POL (no os dejéis engañar por el nombre :wink: ). Si lo editas con un notepad o similar, verás que hay caracteres que no codifica correctamente. Lo mismo pasa si lo abres con Perl.

Muchas gracias por tu respuesta.

Un saludo,
Ricardo.

Re: Cómo puedo editar un fichero codificado en ABFN

NotaPublicado: 2009-09-24 10:06 @462
por explorer
Tienes razón. Se trata de un fichero donde se guardan las políticas del sistema.

Los caracteres que ves mal codificados, en realidad se trata del cómo está codificado el fichero por dentro. No se trata de un fichero de texto completo, si no que tiene alguna parte en binario, como la cabecera. Y los textos podrían estar codificados en alguna tabla de caracteres propia de Windows.

Puedes usar el programa poledit.exe para editarlos.

El formato lo tienes en la página Registry Policy File Format.

Re: Cómo puedo editar un fichero codificado en ABFN

NotaPublicado: 2009-09-25 03:09 @173
por ricar
Hola, explorer.

El fichero está codificado en ABNF según http://download.microsoft.com/download/9/5/E/95EF66AF-9026-4BB0-A41D-A4F81802D92C/%5BMS-GPREG%5D.pdf,
The contents of the Registry.pol file read above MUST be formatted according to the following Augmented Backus-Naur Form (ABNF) (as specified in the [RFC4234]) description).
, por lo que entiendo que no sabe interpretar una sería de códigos y de ahí que los muestre con caracteres "raros".

El formato del fichero en cuestión ya lo conocía, vamos, encontré la página en MS, pero como no me muestra el código "virgen" no puedo interpretarlo yo mismo (¿me he explicado?).

poledit.exe se encuentra en versiones antiguas de Win. Para versiones a partir de W2K, se utiliza gpedit.msc. Esto es un GUI y no puedo interactuar (o al menos no sé cómo hacerlo) con él, así que no puedo utilizarlo para editar, modificar, comparar, etc. ficheros de tipo .pol.

Muchas gracias por todo.

Un saludo,
Ricar.

Re: Cómo puedo editar un fichero codificado en ABFN

NotaPublicado: 2009-09-25 04:26 @226
por explorer
No, no está codificado en ABNF. El párrafo dice:

The contents of the Registry.pol file read above MUST be formatted according to the following Augmented Backus-Naur Form (ABNF) (as specified in the [RFC4234]) description).

que quiere decir
Los contenidos del fichero Registry.pol leído antes DEBEN estar formateados de acuerdo a la siguiente descripción de formato aumentado de Backus-Naur (ABNF) (como se especifica en el [RFC4234])).

Es decir, lo que sigue,
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
PolicyFile = Header Body
Header = Signature Version
Signature = %x50 %x52 %x65 %x67
Version = %x01 %x00 %x00 %x00
Body = Instructions
Instructions = Instruction / (Instructions Instruction)
IdCharacter = %x0020-005B / %x005D-007E
ValueCharacter = SP / VCHAR
Key = 1*IdCharacter
Instruction = " [" KeyPath ";" Value ";" Type ";" Size ";" Data "]"
KeyPath = Key / KeyPath "\" Key
Value = 1*259ValueCharacter
Type = %x01 / %x02 / %x03 / %x04 / %x05 / %x07 / %x0B
Size = 1*5DIGIT
Data = *65535OCTET
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

que es formato ABNF, pero es la representación del contenido del fichero. (Explicación de lo que es Backus-Naur: una metasintaxis)

En otras palabras, esa docena de líneas debe servirte para ver cómo es el fichero por dentro y de cómo hacer un intérprete de él (parser).

Un ejemplo: mira que al principio pone que el fichero de políticas se compone de una cabecera (Header) seguida de un cuerpo (Body). Y la cabecera a su vez se compone de una firma (Signature) y un número de versión (Version). Y que la firma es la combinación de los bytes %x50, %x52, %x65 y %x67, mientras que la versión se compone (al principio) de los números %x01, %x00, %x00 y %x00 (el número de versión va cambiando). Si abres el fichero con un editor hexadecimal los verás. Y así el resto de la definición del fichero.

Otro ejemplo, pone que las claves (Key) se forman como uno o más IdCharacter (1*IdCharacter), siendo IdCharacter el rango de bytes que van del %x0020 al %x005B o (/) del %x005D al %x007E (todos los caracteres que van desde el espacio en blanco a la virgulilla de la eñe, salvo el carácter '\').

En cuanto a la codificación interna, tienes un ejemplo de volcado binario de un fichero pol en la página 24 del documento enlazado, y se ve claramente que la codificación de los caracteres es en Unicode (creo que utf-16, pero no estoy seguro. Al menos veo que todos los caracteres del ejemplo tienen 16 bits de largo).

Con todo esto, no deberías tener problemas para leer el fichero...

Re: Cómo puedo editar un fichero codificado en ABFN

NotaPublicado: 2009-09-25 05:20 @264
por ricar
Hola, explorer.

Ok, cierto, me he equivocado a la hora de confundir codificar con formatear.

Pero el problema sigue siendo el mismo. No puedo leerlo porque no sé cómo está codificado.

Intenté codificarlo de la siguiente manera:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
open (FICHERO, "<:encoding(utf16le)", $registryPOL)
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
y si bien es cierto que es más "legible" (puesto que puedo ver los registros y la claves) continúo sin ver correctamente los valores.

He probado también con utf16be. Por cierto, encoding(utf16) no está permitido.

Entonces, como veo que tu lo tienes bastante más claro que yo, ¿qué debo hacer para extraer la información y "jugar" con ella? ¿Me puede dar unas indicaciones claras y sencillas (for dummies :) ), please?

Muchas gracias.

Un saludo,
Ricar.

Re: Cómo puedo editar un fichero codificado en ABFN

NotaPublicado: 2009-09-25 07:45 @365
por explorer
Explicaciones sencillas, no, porque estamos en el foro Intermedio ;)

Lo que sí puedo darte es un programa que me he hecho en un rato (por lo que seguro que no funcionará siempre):

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl
#
# Volcado de ficheros .pol
#
# Joaquín Ferrero. Septiembre 2009.
#
use strict;
use warnings;
use diagnostics;

use Encode;

## Fichero a procesar
my $pol_file = $ARGV[0] || 'Registry.pol';

open my $pol_fh, q[<], $pol_file or die "ERROR: No puedo abrir $pol_file: $!\n";
binmode $pol_fh;


## Cabecera
read $pol_fh, my $pol_head, 4;
die "ERROR: No es un fichero POL\n" if $pol_head ne 'PReg';
print "Fichero POL $pol_file\n";


## Versión
read $pol_fh, my $pol_vers, 4;
$pol_vers = unpack "L", $pol_vers;
print "Versión del fichero: $pol_vers\n";


## Contenido
read $pol_fh, my $pol_content, (-s $pol_file) - 8;
print "Longitud de los datos: ", length($pol_content), " bytes\n";
close $pol_fh;


## Extracción de las reglas
my %pol_types = (
    1  => 'REG_SZ',
    2  => 'REG_EXPAND_SZ',
    3  => 'REG_BINARY',
    4  => 'REG_DWORD',
    5  => 'REG_DWORD_BIG_ENDIAN',
    7  => 'REG_MULTI_SZ',
    11 => 'REG_QWORD',
);

while ($pol_content =~ /\x5b\0 (.*?) \x5d\0/gx) {

    my ($KeyPath, $Value, $Type, $Size, $Data) = split ";\0", $1;


    # decodificación
    $KeyPath = decode('UTF-16LE', $KeyPath);    # Pasamos de unicode 16 a iso-8859-1
    $Value   = decode('UTF-16LE', $Value  );

    $KeyPath = unpack "Z*", $KeyPath;           # Quitamos los ceros finales
    $Value   = unpack "Z*", $Value;

    $Type    = $pol_types{ unpack "L", $Type }; # Tipo de datos: pasamos de largo a cadena

    $Size    = unpack("L", $Size);              # El tamaño de datos es otro largo


    # decodificación de los datos
    my $Data_hexa                               # Datos en formato hexadecimal
        = join ' ',
          map { sprintf "0x%02x", $_ }
          unpack "C[$Size]",
          $Data
        ;
    my $Data_repr                               # Datos en formato original (si se puede)
        = ($Type eq 'REG_SZ'              ) ? unpack("Z*", $Data)
        : ($Type eq 'REG_EXPAND_SZ'       ) ? unpack("Z*", $Data)
        : ($Type eq 'REG_BINARY'          ) ? 'binario'
        : ($Type eq 'REG_DWORD'           ) ? '32 bit LE'
        : ($Type eq 'REG_DWORD_BIG_ENDIAN') ? '32 bit BE'
        : ($Type eq 'REG_MULTI_SZ'        ) ? do {
                                                  my $valor = decode('UTF-16LE', $Data);
                                                  $valor =~ s/\0/-/g;
                                                  $valor;
                                              }
        : ($Type eq 'REG_QWORD'           ) ? unpack("Q", $Data)
        : 'desconocido'
        ;


    # salida
    print join " : ",
        $KeyPath, $Value, $Type, "$Size bytes", "[$Data_hexa]", "[$Data_repr]";

    print "\n";
}

__END__
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4

Lo he probado con un fichero que he encontrado en un ordenador de mis compañeros, y me sale esto:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
Fichero POL Registry.pol
Versión del fichero: 1
Longitud de los datos: 1288 bytes
Software\Policies\Microsoft\Windows\BITS : **del.EnableBITSMaxBandwidth : REG_SZ : 4 bytes : [0x20 0x00 0x00 0x00] : [ ]
Software\Policies\Microsoft\Windows\BITS : **del.MaxTransferRateOnSchedule : REG_SZ : 4 bytes : [0x20 0x00 0x00 0x00] : [ ]
Software\Policies\Microsoft\Windows\BITS : **del.MaxBandwidthValidFrom : REG_SZ : 4 bytes : [0x20 0x00 0x00 0x00] : [ ]
Software\Policies\Microsoft\Windows\BITS : **del.MaxBandwidthValidTo : REG_SZ : 4 bytes : [0x20 0x00 0x00 0x00] : [ ]
Software\Policies\Microsoft\Windows\BITS : **del.UseSystemMaximum : REG_SZ : 4 bytes : [0x20 0x00 0x00 0x00] : [ ]
Software\Policies\Microsoft\Windows\BITS : **del.MaxTransferRateOffSchedule : REG_SZ : 4 bytes : [0x20 0x00 0x00 0x00] : [ ]
Software\Policies\Microsoft\Windows\Psched : **del.MaxOutstandingSends : REG_SZ : 4 bytes : [0x20 0x00 0x00 0x00] : [ ]
Software\Policies\Microsoft\Windows\Psched : NonBestEffortLimit : REG_DWORD : 4 bytes : [0x00 0x00 0x00 0x00] : [32 bit LE]
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Re: Cómo puedo editar un fichero de políticas de Windows (POL)

NotaPublicado: 2009-09-25 11:06 @504
por ricar
De veras que me siento realmente inútil.

En fin, no lo he analizado y mucho menos probado, a ver si saco tiempo este fin de semana y le echo un vistazo.

Muchas gracias por tu ayuda y el tiempo dedicado.

Un saludo,
Ricar.

Re: Cómo puedo editar un fichero de políticas de Windows (POL)

NotaPublicado: 2009-09-28 06:07 @296
por explorer
Ya sabes que estamos para resolver cualquier duda.

Y que el programa propuesto es solo eso, una propuesta. Solo saca información. Otro tema es modificar el fichero.