Título: Obtencion de Ring 0 por parte del virus CIH en Windows 9x. Publicado por: Usuario887 en 7 Agosto 2020, 12:25 pm Hola,
Hace poco descargue el codigo fuente del virus CIH para entenderlo, pues me parece interesante. Sin embargo me encontre con una parte de el que no entiendo muy bien, como era de esperarse... Código
El comentario es bastante descriptivo. Sin duda suficiente para entender el objetivo, sin embargo el medio en si que utiliza en toda profundidad no lo entiendo plenamente: Código Aparentemente esta metiendo a EAX en la pila para luego, en sidt [esp-02h], introducir la base de la IDT en EBX pero, ¿por que resta 2? ¿no deberia mas bien sumar 4? recordemos que los valores en la medida que son antiguos en la pila, se encuentran en posiciones de memoria mas altas y, en este caso, hablando de un registro de 4 bytes, precisamente 4 posiciones mas alto. Código Esto no es nada evidente para mi. ¿Mueve, aparentemente, el Entry Point del IDT HookExceptionNumber a ebp, y luego lo que sea que se encuentre 4 bytes antes del mismo en los 16 bits menos significativos de EBP? ¿que sentido tiene? Código Ahora, mas evidentemente mueve el desplazamiento del hook a ESI. Sin embargo, ¿que es -@1[ecx]? ¿alguna forma de relocalizacion? No lo entiendo en absoluto. Aun no he aprendido esa sintaxis... ¿alguien tiene idea de al menos como se llama? Código Mueve a esa misteriosa direccion (EBX-04) el desplazamiento antes mencionado... ¿alguien tiene idea de que hay en los anteriores 4 bytes a un IDT? (evidentemente otro IDT, pero la pregunta es ironica, quiero decir, ¿alguien sabe por que?) Eso es todo... estoy un poco enredado. Saludos. Título: Re: Obtencion de Ring 0 por parte del virus CIH en Windows 9x. Publicado por: BloodSharp en 7 Agosto 2020, 18:46 pm Hola, Hace poco descargue el codigo fuente del virus CIH para entenderlo, pues me parece interesante. Sin embargo me encontre con una parte de el que no entiendo muy bien, como era de esperarse... Código
Nooooo que nostalgia, este código lo que hace es hookear el manejador de la interrupción en kernel mode de 32 bits... Código
Lo que hace es obtener el puntero a la estructura de IDT y luego añadir el offset de la interrupción deseada (HookExceptionNumber) para llegar a la subestructura de la interrupción. Código Deshabilita las interrupciones si mal no recuerdo, eso es para poder escribir en sectores importantes como la IDT... En algun momento debe rehabilitar con la instrucción sti... Código Ni idea porque hace eso exactamente... Código
Obtiene la dirección del manejador MyExceptionHook y la inserta en la tabla Descriptor de la interrupción si mal no recuerdo, esa instrucción Código es un desplazamiento de bits para agregarla la mitad en una zona del descriptor, finalmente la otra mitad en iba en otra zona. En castellano lo que hace esto es como un API Hooking de una interrupción, había un libro viejazo llamado Rootkits Subverting the Windows Kernel donde había un ejemplo completo hecho en C y assembler... Seguramente por internet debe haber un pdf o chm filtrado de ese libro. :silbar: B# Título: Re: Obtencion de Ring 0 por parte del virus CIH en Windows 9x. Publicado por: Usuario887 en 9 Agosto 2020, 14:36 pm Lo que hace es obtener el puntero a la estructura de IDT y luego añadir el offset de la interrupción deseada (HookExceptionNumber) para llegar a la subestructura de la interrupción. Claro... pero, ¿no te paree curioso que añada 4 sin razon alguna?: Código Tienes la base de la IDT en EBX. Le sumas cuantas IDTs hayan en el camino hasta el descriptor objetivo (cuantia que se expresa como HookExceptionNumber*8) y ya esta; no es necesario sumar 4. A partir de aqui comienza mi confusion. Saludos. |