• Publicidad

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

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

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

Notapor ricar » 2009-09-24 08:28 @394

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.
ricar
Perlero nuevo
Perlero nuevo
 
Mensajes: 71
Registrado: 2009-07-13 07:29 @353

Publicidad

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

Notapor explorer » 2009-09-24 08:40 @403

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: Cómo puedo editar un fichero codificado en ABFN

Notapor ricar » 2009-09-24 08:56 @414

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.
ricar
Perlero nuevo
Perlero nuevo
 
Mensajes: 71
Registrado: 2009-07-13 07:29 @353

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

Notapor explorer » 2009-09-24 10:06 @462

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.
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: Cómo puedo editar un fichero codificado en ABFN

Notapor ricar » 2009-09-25 03:09 @173

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.
ricar
Perlero nuevo
Perlero nuevo
 
Mensajes: 71
Registrado: 2009-07-13 07:29 @353

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

Notapor explorer » 2009-09-25 04:26 @226

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...
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: Cómo puedo editar un fichero codificado en ABFN

Notapor ricar » 2009-09-25 05:20 @264

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.004 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.
Última edición por explorer el 2009-09-28 06:11 @299, editado 2 veces en total
Razón: Ortografía
ricar
Perlero nuevo
Perlero nuevo
 
Mensajes: 71
Registrado: 2009-07-13 07:29 @353

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

Notapor explorer » 2009-09-25 07:45 @365

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
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: Cómo puedo editar un fichero de políticas de Windows (POL)

Notapor ricar » 2009-09-25 11:06 @504

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.
ricar
Perlero nuevo
Perlero nuevo
 
Mensajes: 71
Registrado: 2009-07-13 07:29 @353

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

Notapor explorer » 2009-09-28 06:07 @296

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.
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


Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 4 invitados