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

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


  Mostrar Mensajes
Páginas: 1 ... 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 [24] 25 26 27
231  Programación / ASM / Re: Ejemplo de la necesidad de la instruccion CLI en: 10 Mayo 2020, 13:38 pm
<save the registers used in the ISR>
:rolleyes:

Que yo sepa el hook antes de la instruccion cli llama al ISR que estaba originalmente en 09h y al servicio 01h del ISR de la interrupcion 16h
Si, precisamente, solo me intrigaba como estabas adivinando tantas cosas, ya vi a que te refieres con que tienes el libro en papel. Estaba pensando que hacias un juego de palabras que no estaba entendiendo.

The Rootkit Arsenal Escape and Evasion in the Dark Corners of the System de Bill Blunden (2009), HookTSR es un ejemplo que viene en el segundo capitulo (no se quien habra copiado a quien ya que no diste la fuente de tu fragmento).
Buen chiste.
Bill Blunden y Matt Pietrek desnudaron a Microsoft...
https://books.google.es/books/about/Undocumented_Windows.html?id=HLhbcgAACAAJ&redir_esc=y

Para poder llamar al ISR hace falta poner EFLAGS en la pila ya que igual que el hook de ISR debe terminar con IRET y esa instruccion asume que EFLAGS fue empujado en la pila. Por cierto hace falta ejecutar CLI en el hook justamente por haber llamado a los otros ISRs que ejecutaron STI, el hook es llamado con las interrupciones ya deshabilitadas como se explica en el enlace de arriba (15.1    Interrupt Processing in the Real Mode).
Si si... esto lo sabia, solo no habia aprendido a distinguir un sector critico.

Gracias por tu ayuda.
232  Sistemas Operativos / Windows / ¿para que sirve el MCB "entorno" en MS-DOS? en: 10 Mayo 2020, 12:52 pm
Hola,

Estaba jugando con MS-DOS 6.22 y me puse a seguir la cadena de MCB's con DEBUG y me perdi en uno el cual no entendia para nada. Ejecute MEM /D y resulta esto:


Se puede ver que existen dos MCB's para un mismo modulo; uno Program y uno Envirnonment, los cuales residen en los parrafos 195FH y 196BH respectivamente (hablo del modulo program, el de 8 208 bytes, disculpen la ambiguedad).

Mi pregunta es:
¿que es el MCB Environment?
Supongo que aqui ha de estar el segmento DS o SS del programa... pero es una suposicion demasiado a priori y me gustaria saber la respuesta precisa.

Gracias de antemano.
Saludos.


Edito:
Estaba prestandole un poco mas de atencion y creo que, o tengo la respuesta, o descubri una nueva duda:



El numero de segmento del PSP del MCB Environment de COMMAND.COM es distinto al numero de segmento del MCB Program. Y esto me hace preguntarme por que, si es el mismo pograma.

Ademas de todo esto, ¿alguien sabe si este valor es el que se utiliza para definir el PID del proceso?Ademas de todo esto, ¿alguien sabe si este valor es el que se utiliza para definir el PID del proceso?


Edito de nuevo:
Encontre la respuesta a mi primera pregunta:
https://en.wikipedia.org/wiki/Environment_variable

Sin embargo sigo preguntandome esto:

Cita de: marax
El numero de segmento del PSP del MCB Environment de COMMAND.COM es distinto al numero de segmento del MCB Program. Y esto me hace preguntarme por que, si es el mismo pograma.
Cita de: marax
Ademas de todo esto, ¿alguien sabe si este valor es el que se utiliza para definir el PID del proceso?
233  Seguridad Informática / Análisis y Diseño de Malware / Re: Ocultar ip en backdoor en: 10 Mayo 2020, 12:39 pm
de que manera se puede ocultar una ip en una backdoor
La unica manera es utilizar un rootkit compatible con el sistema que utilices, y modificar el backdoor para que lo instale adecuadamente.
234  Programación / ASM / Re: Ejemplo de la necesidad de la instruccion CLI en: 10 Mayo 2020, 12:26 pm
¿Que manera mas sencilla que cli/sti propones?
Antes del ejemplo que muestras en seguida se me ocurria salvar todos los registros en la rutina del ISR para que asi, al terminar, los registros continuasen con su valor original (en la cadena de "valores originales") tal como el sistema operativo salva un PCB antes de entrar en otro proceso. Sin ambargo entiendo ahora por que se desactivan las interrupciones en ese fragmento:

Código
  1. CLI
  2. PUSH DS
  3. PUSH CS
  4. POP DS
  5. JZ _noChar
  6. LEA BX, _buffer
  7. PUSH SI
  8. MOV SI, WORD PTR [_index]
  9. MOV BYTE PTR [BX+SI], AL
  10. INC SI
  11. MOV WORD PTR [_index], SI
  12. ;////////////////esta es la region critica
  13. POP SI
  14. MOV BX, WORD PTR [_index]
  15. CMP BX, 32H
  16. JB _noOverlapping
  17. MOV AX, 0
  18. MOV WORD PTR [_index], AX
  19. _noOverlapping:
  20. _noChar:
  21. ;en seguida se recupera el registro DS
  22.  
Si ocurre una reentrada en ese punto, la direccion de memoria a la que hace referencia _index podria ser incrementada dos veces si se presiona una tecla en ese preciso momento.
Y viendo el codigo dos veces estoy viendo mas de una sección critica. Ahora si tiene sentido.
Aunque sigo con una pregunta:
¿deben todos los ISR salvar el valor de los registros que utiliza? Porque no se por que siento que en algun momento un ISR no me va a funcionar porque alguna llamada a un servicio de interrupcion va a modificar un registro que estoy a punto de utilizar. Llamame paranoico... lo soy. Solo me pregunto si como norma general los ISR deben hacer eso. De hecho tambien seria curiosidad por el funcionamiento (ademas de paranoia).

Este link lo voy a guardar. Estaba buscando algo asi desde hace rato. Muchas gracias por citarlo.

En el fragmento que dejaste no se guarda EFLAGS, pero bueno entiendo que yo tengo ese libro en papel, en realidad se empuja EFLAGS en la pila para simular el estado de llamada a una interrupcion, sino se joderia la pila cuando el codigo original de la interrupcion (o el de la int 16h) se terminara con IRET.
Esto lo lei varias veces pero no logro entender precisamente a lo que te refieres.
No se guarda EFLAGS pero eso es implicito en una llamada a una interrupcion, ¿no?.

yo tengo ese libro en papel
¿Cual libro?

se empuja EFLAGS en la pila para simular el estado de llamada a una interrupcion, sino se joderia la pila cuando el codigo original de la interrupcion (o el de la int 16h) se terminara con IRET.
Esta bien... te refieres con simular a mantener la integridad de la entrada inmediatamente anterior de la cadena de ejecucion de las interrupciones (en la pila), ¿no?.

Gracias por la ayuda y el enlace.
Saludos.
235  Programación / ASM / Re: Declaracion de segmentos en TASM en: 9 Mayo 2020, 20:38 pm
Y es que no tiene absolutamente nada que ver con lo que yo dije, tenemos la suerte de que la plataforma en la que trabajamos haya avanzado lo suficiente como para no tener que preocuparnos por estos temas arcaicos en la vida real de un programador.
No quiero ser insistente... pero era una broma, un guiño.
Hablando seriamente, creo que hasta ahora los avances que han hecho mas de la comodidad para con un programador han sido los modelos modernos de administracion de memoria y el modo protegido en los procesadores.
236  Programación / ASM / Re: Declaracion de segmentos en TASM en: 9 Mayo 2020, 18:25 pm
¿Cual seria el riesgo exactamente? ¿Tener que lidiar con codigo de los años 80s/90s?
No. Me refiero a la versatilidad del codigo maquina; las posibilidades del exito con la suerte se llevan al minimo.
Me mal interpretaste.  :rolleyes:
Saludos.
237  Programación / ASM / Ejemplo de la necesidad de la instruccion CLI en: 9 Mayo 2020, 17:58 pm
Hola,

Entiendo bien lo que hace esta instruccion: desactiva las interupciones enmascarables. Y se que existen variedad de ejemplos acerca de su filosofia, sin embargo no me queda clara su necesidad real; creo que muchas soluciones podrian implementarse mas facilmente sin ello.

Un ejemplo concreto: estaba revisando un codigo en el que se utiliza:

Código
  1. CLI
  2. PUSH DS
  3. PUSH CS
  4. POP DS
  5. JZ _noChar
  6. LEA BX, _buffer
  7. PUSH SI
  8. MOV SI, WORD PTR [_index]
  9. MOV BYTE PTR [BX+SI], AL
  10. INC SI
  11. MOV WORD PTR [_index], SI
  12. POP SI
  13. MOV BX, WORD PTR [_index]
  14. CMP BX, 32H
  15. JB _noOverlapping
  16. MOV AX, 0
  17. MOV WORD PTR [_index], AX
  18. _noOverlapping:
  19. _noChar:
  20. ;en seguida se recupera el registro DS
  21.  
Este es el fragmento de un hook a una rutina de interrupcion que guarda en un buffer indexado el contenido de AL cada vez que es ejecutada.
Sin embargo no entiendo, por ejemplo, en este caso, cual es la necesidad de ello.

Tengo las siguientes suposiciones:
¿es porque el contenido de los registros se pierde? ¿entonces por que no ademas de guardar el regustro EFLAGS en la pila no tambien el contenido de los registros?
¿es por velocidad de ejecucion? Me parece un prejuicio aceptable.

En verdad solo me pregunto si alguien conoce bien la necesidad de tal cosa y tiene la amabilidad de compartirlo conmigo.

Gracias por su tiempo. Saludos.


Por cierto... El buffer tiene un tamano de 32 unidades hexadecimales, por tanto el
Código
  1. MOV BX, WORD PTR [_index]
  2. CMP BX, 32H
  3. JB _noOverlapping
  4.  

No subestimo la intuicion, lo digo solo por si acaso.  :silbar:
238  Programación / ASM / Re: Declaracion de segmentos en TASM en: 9 Mayo 2020, 17:16 pm
Eso último entre comillas simples es el nombre de "clase". El ensamblador pone juntos en memoria los segmentos pertenecientes a una clase, independientemente del orden en que hayan sido declarados o si están en diferentes archivos. Hay algunos nombres predefinidos y "code" es uno de ellos. Ése es básicamente su uso.
Lo intuia... aunque me considero demasiado poco experto aun para permitirme confiar en mi intuicion.
Gracias, ahora comprendo la expresion correctamente.

por suerte
Me parece demasiado arriesgado hablar de suerte y de ensamblador en el mismo contexto...  :-X
Saludos.
239  Programación / ASM / Re: Declaracion de segmentos en TASM en: 8 Mayo 2020, 11:15 am
Nada mejor que probar para averiguar.

Si, en verdad.

Gracias por tu ayuda.



Al especificar BYTE, WORD, etc. al definir un segmento, estamos indicando cómo queremos que esté alineada la dirección donde comienzan las instrucciones o datos contenidos en él, pero el segmento en sí siempre estará en dirección múltiplo de 16.
Me alegra que comentes esto porque supuse que a algo parecido tenia que referirse el manual con aligned.
Y ¿se especifica de esta manera para que el direccionamiento comienze en la proxima direccion, o mas precisamente para que la forma de acceso por defecto al segmento sea BYTE, WORD, etc.?

se busca la primera dirección disponible que sea múltiplo de 2
Esto como una implicacion de lo anterior, ¿no?.

para que no se superpongan sus datos, el byte de seg1 no tendrá un offset de 0 sino de 2.
¿Y como el procesador deduce este offset al momento de acceder al segmento?
¿O debe ser especificado explicitamente en el programa?.  
Gracias por la ayuda.


es necesario contar tanto con el selector de segmento como con el desplazamiento (offset) para para obtener una direccion segmentada con la que poder trabajar.



The segment address is always added to a 16-bit offset in the instruction to yield a linear address, which is the same as physical address in this mode. For instance, the segmented address 06EFh:1234h (here the suffix "h" means hexadecimal) has a segment selector of 06EFh, representing a segment address of 06EF0h, to which the offset is added, yielding the linear address 06EF0h + 1234h = 08124h.

Because of the way the segment address and offset are added, a single linear address can be mapped to up to 212 = 4096 distinct segment:offset pairs. For example, the linear address 08124h can have the segmented addresses 06EFh:1234h, 0812h:0004h, 0000h:8124h, etc.

https://en.wikipedia.org/wiki/X86_memory_segmentation


Esto responde mi pregunta.

Ahora solo me pregunto que quiere decir 'code' en esa expresion. Sin embargo probablemente consiga la respuesta en seguida en el manual de TASM 5.
Respecto a lo que comentas, Eternal Idol, acerca de ello, no estoy seguro... claramente tiene que ver con codigo pero me pregunto mas bien como es precisamente esta relacion. Ya que, si en vez de 'code', lo expresas asi:

Código
  1. SEGMENT cseg 'code'
  2.  

Resulta en lo mismo que:

Código
  1. SEGMENT cseg 'qiwnef' ;(una cadena random)
  2.  

Esto concluye claramente en la poca importancia de ello, sin embargo me sigue intrigando.

Saludos.
240  Foros Generales / Foro Libre / . en: 6 Mayo 2020, 17:18 pm
.
Páginas: 1 ... 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 [24] 25 26 27
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines