Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - Usuario887

#91
Hola,
en modo protegido (paginado) la forma de acceso es a traves de un indice en el Directorio de Paginas que a su vez es un indice a la Tabla de paginas del proceso, lo cual resulta al fin y al cabo en la pagina fisica, sobre la cual se calcula la direccion efectiva a traves de los 12 bits menos significativos de la direccion lineal, segun la arquitectura de Intel IA-32. Esto me hace dudar de varias cosas: primero, ¿por que es necesaria una Tabla de Paginas? digo... bastaria con un solo directorio mediante el cual acceder a las correspondientes paginas del sistema, ¿no? (¿por que dos estructuras si una puede hacer mas eficientemente el trabajo?) se que nadie aqui es ingeniero de Intel, pero debe haber una razon; segundo, ¿por que entonces es necesaria la Tabla de Descriptores Global? me explico: la direccion base del Directorio de Paginas se encuentra en el registro CR3 del proceso en cuestion, mediante los 10 bits mas altos de la direccion lineal se deduce el indice en la misma y blablabla, todo lo que dije antes... pero, ¿que caso tiene entonces la GDT? ¿a que viene si la direccion se esta deduciendo basicamente a partir de la sistematica de la paginacion? ¿no se utiliza?

Saludos y, de antemano, gracias por la respuesta.



Resulta que la respuesta estaba en Wikipedia... es una cuestion de multinivel:
https://en.wikipedia.org/wiki/Page_table
#92
Desde ayer quiero leer la GDT y sus amigos. Estoy utilizando WinDbg en modo kernel y como depuracion local. Ya active el modo /debug con BCDEDIT y su configuracion como Local. Sin embargo no puedo leer los valores la memoria virtual; obtengo esta salida en la linea de comandos de KD:


lkd> d 0 f
00000000  ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ??  ????????????????


Admito que son mis primeros pasos en la depuracion del kernel. La verdad no tengo ni idea de por que no puedo leer los valores de la memoria. (Y, sin embargo, puedo leer los correspondientes PDEs y PTEs a una direccion virtual, lo cual me confunde).

¿alguien mas listo que yo?

Saludos.
#93
Foro Libre / ¿alguien conoce esta historia?
21 Julio 2020, 12:30 PM
Hola,

llevo un rato buscando en Google el nombre de esta historia que lei en algun momento y no encuentro. Con la variedad congnitiva de este foro, me preguntaba si alguien la conoce...

Se trata de una montaña de oro celestial en la cual los reyes y grandes lideres escribian sus nombres, como un simbolo honorable de su reinado en la tierra. Sin embargo, cada vez que un nuevo rey moria, debia borrar el nombre de algun otro para escribir el suyo debido al espacio real limitado.

Saludos y gracias de antemano.
#94
Hace tiempo ya que llevo estudiando en profundidad el formato PE, y algo tedioso es revisar la MSDN o a winnt.h a cada rato por referencias de las estructuras, asi que hice un esquema (casi) completo del formato y pense que le podria ser util a alguien:

https://i.imgur.com/TzgDSRz.png
Nota: los numeros a un lado (derecho o izquierdo segun lo considere conveniente) de los miembros de las estructuras definen la direccion relativa a la base de la estrutura de cada uno, para evitar el calculo.

Ademas, para los que no entiendan ni pio ni a buenas primeras, he aqui varias de las referencias que utilice:

https://tech-zealots.com/malware-analysis/pe-portable-executable-structure-malware-analysis-part-2/
https://es.wikipedia.org/wiki/Portable_Executable
https://en.wikipedia.org/wiki/Data_structure_alignment
https://blog.kowalczyk.info/articles/pefileformat.html
#95
Hola,

estoy inseguro de si entiendo el significado de "alineamiento" cuando se habla de programacion en ensamblador y otras categorias; segun lo que hasta ahora se, el alineamiento es el ambito de acceso. Sin embargo, ¿es eso exactamente?

Por ejemplo, existe un miembro de la estructura IMAGE_OPTIONAL_HEADER del formato PE llamado FileAlignment (cosa que no entiendo: ¿por que alinear un archivo en disco? ¿o se trata mas bien de informacion para la paginacion?). Ademas, MASM tiene ciertos atributos para la declaracion de segmentos que puede ser BYTE, WORD, PARA, etcetera, ¿se refiere esto solo al ambito del segmento que debe calcular el ensamblador? ¿o va mas alla de esto?.

Gracias de antemano.
#96
Forma parte de la libreria ntdll.dll de Windows... me parece curioso el nombre y, a pesar de encontrar su definicion en Internet:

NTSTATUS RtlAdjustPrivilege
(
 ULONG    Privilege,
 BOOLEAN  Enable,
 BOOLEAN  CurrentThread,
 PBOOLEAN Enabled
)


no encontre una explicacion tan buena de su funcionamiento (solo comentarios con descripciones de los parametros), ademas de no estar documentada por Microsoft.

¿alguien sabe de que se trata exactamente? cualquier conocimiento seria util...

Saludos.
#97
ASM / Documentacion de TASM.
9 Julio 2020, 17:50 PM
Hola,

he estado estudiando la guia de usuario de TASM 5:

http://bitsavers.informatik.uni-stuttgart.de/pdf/borland/turbo_assembler/Turbo_Assembler_Version_5_Users_Guide.pdf

sin embargo el manual me parece estar muy desordenado, ademas de no cubrir la profundidad del modo IDEAL de TASM (no el modo MASM).

Me preguntaba si alguien sabe de una direccion u otro manual que desarrolle TASM de una manera mas "adecuada" y, especialmente, mas profunda. Tambien agradeceria referencias a documentacion para la programacion de objetos (en TASM).

Gracias.
Saludos.
#98
...FAT?

Hola, estaba leyendo el siguiente tratado sobre el sistema de archivos FAT:

http://www.disc.ua.es/~gil/FAT12Description.pdf

Y no me ha quedado suficientemente claro la manera en la que se almacenan los directorios aunque entiendo bien lo mismo respecto a los archivos. Segun el enlace anterior, un directorio es basicamente un archivo. Entiendo a lo que probablemente se refiere: que el archivo en este caso (un sector), que es el directorio, almacena direcciones y descripciones de subdirectorios y archivos, haciendo posible lo que seria una estructura de arbol, lo cual es eo objetivo. Mis preguntas concretas, ademas de querer aclarar esto, si no es molestia, son:

¿si cada entrada de directorio es de 32 bits en cada sector (de 512 bits), entonces un directorio puede tener unicamente 16 entradas?.
¿un descriptor de directorio, por llamarle asi a una entrada, se considera tambien una FAT? Se me ocurre porque tambien es basicamente una tabla, sin embargo no se encuentra en la zona FAT del sistema.
¿Un cluster se define unicamente como un conjunto de sectores contiguos (ojo, logicamente contiguos, FAT es una lista enlazada)?.

Muchas gracias de antemano. Saludos.
#99
Hola,

Hay algo que me da mucha curiosidad ultimamente... y es que, si en los sistemas modernos (es decir, sistemas que funcionan en modo protegido) existe toda la integridad que permiten las entradas de la tabla GDT, ¿como es posible explotar un desbordamiento de pila?. Es decir, es facil deducir que tanto la pila como los datos del programa se accederan atraves de entradas en la estructura asignadas como datos. Es decir, si se produce un desbordamiento y, por ejemplo, se reescribe el retorno de la funcion que se ejecuta con una posicion de la misma pila (no podemos escribir en ninguna otra parte) entonces, cuando se acceda a la entrada del segmento de pila en la GDT (de datos) ¿el sistema operativo no detendria el programa por (intentar) ejecutar en un segmento de datos?.

Y si es asi, ¿entonces ya no es posible explotar desbordamientos de pila?.

Dejemos de lado las inconsistencias que podrian haber en un sistema real, yo me refiero especificamente a un sistema de modo protegido que sea ideal.

Saludos.



PD: ¿Estoy siendo demasiado ingenuo preguntando esto? xd
#100
Hola,

hago este tema porque me encuentro un poco confundido respecto a la unidad basica de almacenamiento secundario. Esta confusion viene de haber leido el siguiente articulo de Wikipedia:

https://es.wikipedia.org/wiki/Cilindro-Cabezal-Sector

CHS es un modo de acceso. Segun este modo, el primer sector que se encuentra en el primer cabezal del primer cilindro se expresa como 0/0/1, es decir, en una forma Cylinder/Header/Sector (notese la ausencia de una especificacion de un indice en tal sector). ¿quiere decir esto que para el controlador del sistema de archivos acceder a un byte en el disco, debe acceder necesariamente a los 512 bytes del sector en el que se encuentra?
#101
Foro Libre / ¿Algun bibliófilo?
1 Junio 2020, 21:52 PM
Hola, hago este tema con intencion de compartir literatura. Si hay algo que me gusta tanto como la musica y estas maquinas de electrones, son los libros.
¿Cuales son sus libros favoritos?

Los mios:

Asi Hablo Zaratustra, Friedrich Nietzsche

Definitivamente una obra maestra, como leer una buena pintura. Con una lirica erizante y elementos narrativos exquisitos, pone a la etica de rodillas, la buena filosofia en su unica expresion. Una forma impecable de desccribir el comportamiento humano y la naturaleza, ademas los elementos que hacen al mundo ser el mundo. Para mi, Nietzsche paso desapercibido como el mejor psicologo de la historia (¿el mas basico?).

Las Penas del Joven Werther, J.W. Goethe

El mejor de los pocos libros que me muestran la verdadera cara de mi corazon... sin duda una recomiendacion a los romanticos del foro. Se trata de una novela epistolar que narra un amor imposible entre una mujer casada y el autor... digo, mejor sigan ustedes.  :laugh:

Mas Alla del Bien y del Mal, Friedrich Nietzsche

Se dice que fueron una recopilacion de "notas" durante el desarrollo de Asi Hablo Zaratustra. El tema es basicamente el mismo: buscar su propia afirmacion en la refutacion de uno mismo. Mi parte favorita se trata de algunos interludios escritos por Nietzsche.

Tao Te Ching, Lao Tse

Literalmente, Lao Tse significa viejo maestro. Aunque se trata de una lectura "dificil" (si podemos llamarla asi), es un impecable tratado sobre el verdadero camino segun la filosifia de este sabio antiguo en quien se fundaron las bases de la filosofia taoista.

Informatica

Sistemas Operativos, William Stallings

Honestamente no he leido mucha de la variada literatura que existe al respecto como, por ejemplo, los libros de Tanenbaum, pero este (cual yo tengo la quinta edicion) explica una buena introduccion al funcionamiento fundamental de los procesadores. Ademas de una descripcion general aceptable del funcionamiento de la red ademas de, evidentenemte, los sistemas operativos. Acerca de los cuales habla en verdad en ocasiones de una manera bastante engorrosa, pero comprensible. Ademas de una amplia inmersion en cuestiones teoricas.

The Rootkit Arsenal, Bill Blunden

Algo un poco mas avanzado... un sumergimiento casi absoluto en las tecnologias del diseno e implementacion de rootkits. Presenta varios ejemplos aunque con una considerable sistematica anti-script kiddies. Aunque lo sigo leyendo, puedo decir con seguridad que es de esos que no quieren que leas.

posdata: perdonen el tamano de las imagenes. Si alguien conoce una manera de limitarlo le agradeceria decirme.

Saludos.

MOD: Imagenes adaptadas a lo permitido.
#102
Hola,

Estaba practicando con un hackme que programe. Precisamente el desbordamiento de pila; puedo enviarle el payload y el codigo por mensaje privado a quien le interese.
En resumen, tarde un buen rato buscando la funcion main en el binario resultante. De hecho, en el codigo fuente integre ciertas instrucciones en ensamblador (inutiles) que luego utilice como una 'firma' de la funcion para luego buscar la cadena con el depurador (llamenme novato).
Mi pregunta es: ¿existe una manera mas, digamos, eficiente de encontrarla?

Saludos.



Edito: Se me acaba de ocurrir una buena manera. Si a alguien le interesa, pues lo mismo. :)
Sin embargo me gustaria leer sus opiniones, igualmente.
#103
ASM / Algunas dudas sobre ensambladores.
16 Mayo 2020, 21:39 PM
Hola,

tengo algunas inseguridades acerca de los ensambladores y me preguntaba si alguien conoce las respuestas.

¿para que sirve precisamente la instruccion ORG?
Se que delimita el origen del programa en la generacion de archivos COM pero, ¿a que se refiere esto precisamente? ¿No es el registro CS dependiente unicamente del cargador del sistema?

Lo mismo respecto a la instruccion LEA...
Se supone que esta instruccion carga la direccion efectiva (Load Effective Address), pero ¿como?, es decir:

si
Código (asm) [Seleccionar]

mov dx, offset _data


es lo mismo que
Código (asm) [Seleccionar]

lea dx, _data


¿como el procesador, en tiempo de ejecucion, sabe que es _data?. Me explico: ¿como puede cargarse la direccion efectiva de una direccion de memoria? es redundante... ¿por que no simplemente la primera instruccion? ¿o es LEA una instruccion del compilador que luego sustituye por MOV ..., OFFSET ..., en vez de ser parte del repertorio de instrucciones del procesador?

Saludos y gracias de antemano.
#104
ASM / Structured Exception Handler
13 Mayo 2020, 18:56 PM
Hola,

pongo el tema aqui porque me refiero precisamente a su programacion en ensamblador.

Estoy intentando modificar el SEH para especificar la rutina de manejo de exception. Sin embargo lo hice de esta manera:

Código (asm) [Seleccionar]

MOV ESI, OFFSET handler
MOV DWORD PTR FS:[0], ESI
;...


Y no funciono. Luego busque un poco en internet y encontre esto:

Código (asm) [Seleccionar]

MOV ESI, OFFSET handler
PUSH ESI
PUSH DWORD PTR FS:[0] ;supongo que esto se utiliza como algun tipo de firma
MOV DWORD PTR FS:[0], ESP
;...


Este si funciona. Lo que no entiendo es por que.
¿alguien sabe por que, o en donde podria encontrar una explicacion?

Saludos y gracias de antemano.
#105
Foro Libre / .
13 Mayo 2020, 14:53 PM
.
#106
Hola,

Segun Wikipedia:

CitarDesde este punto de vista, un programa es un conjunto de componentes lógicos de tamaño variable o un conjunto de segmentos, es decir, el espacio lógico de direcciones se considera como un conjunto de segmentos, cada uno definido por un identificador, y consistente de un punto de inicio y el tamaño asignado.

Entiendo que el modelo de memoria segmentado puede ser mas intuitivo que un modelo totalmente lineal... sin embargo, ¿me estoy perdiendo de algo? porque precisamente intuyo que no solamente se debe a la simplicidad de utilzar segmentos sino a variedad de mas necesidades tecnicas. Sin embargo no se me ocurre ninguna. ¿alguien las conoce?

y otra cosa... si es por el margen mayor de acceso a la memoria, ¿por que no usar combinatoria en vez de segmentacion? es decir, en vez de (por ejemplo):

12ABh:34CDh referenciar a 12AB*10+34CD=15F7D

algo asi:

12ABh:34CDh referenciar a *calculos tediosos de combinatoria*=12AB34CD

tendriamos los mismos recursos y un rango mayor de acceso a la memoria.

Saludos.
#107
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?
#108
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 (asm) [Seleccionar]

CLI
PUSH DS
PUSH CS
POP DS
JZ _noChar
LEA BX, _buffer
PUSH SI
MOV SI, WORD PTR [_index]
MOV BYTE PTR [BX+SI], AL
INC SI
MOV WORD PTR [_index], SI
POP SI
MOV BX, WORD PTR [_index]
CMP BX, 32H
JB _noOverlapping
MOV AX, 0
MOV WORD PTR [_index], AX
_noOverlapping:
_noChar:
;en seguida se recupera el registro DS

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 (asm) [Seleccionar]

MOV BX, WORD PTR [_index]
CMP BX, 32H
JB _noOverlapping


No subestimo la intuicion, lo digo solo por si acaso.  :silbar:
#109
Foro Libre / .
6 Mayo 2020, 17:18 PM
.
#110
ASM / Declaracion de segmentos en TASM
2 Mayo 2020, 17:53 PM
Hola.

Me preguntaba si alguien conoce la sintaxis de la directiva SEGMENT en TASM.
Por ejemplo, en el siguiente codigo:


segment cseg para word 'code'


Entiendo que cseg precisa el nombre del segmento que se esta declarando pero, ¿que significa para, word y 'code'?

Segun el sentido logico se que puedo deducir que para se refiere a que hablamos de parrafo (es decir, 16 bytes), que word quiere decir que sera accedido como 16 bits y que 'code' algo que tenga que ver con codigo... pero son deducciones a priori y me gustaria saber que significan realmente ya que podria estar equivocado.

Nota: respecto a word... ¿no seria innecesario, tomando en cuenta que un segmento ya es de 16 bits?

Gracias de antemano y saludos.
#111
Hola.

Me he planteado esto desde hace poco y honestamente no se por donde empezar.
Lo que planeo es lo que planteo en seguida:

Quiero guardar un programa en el sector MBR de una forma de almacenamiento extraible que verifique que existe un disco conectado a la interfaz IDE y luego simplemente escribir contenido en el, suponiendo que el sistema de archivos es NTFS. En realidad lo menos importante es el sistema de archivos. Solo es una cuestion de conocer su opinion, ya que es primera vez que intento algo asi.
Mi idea es compilar el kernel de Linux en la unidad de almacenamiento y utilizar los controladores y API del mismo para efectuar la escritura -me pregunto si alguien penso en que haria yo mismo esta parte de mi objetivo solo con interrupciones de la BIOS.

Mi pregunta concreta es: si lo hago de esta forma, ¿funcionaria?

Posdata: se que estoy rechazando la adrenalina de intentarlo a ciegas... solo me estoy permitiendo un pequeño guiño.  :silbar:

Muchas gracias de antemano. Saludos.
#112
Definitivamente la piedra angular de la tecnologia moderna. Sin embargo ¿es tan conocido como utilizado?. Se bien que el campo magnetico ha sido bien estudiado en el pasado, especialmente por Maxwell y Faraday:

http://hermes.ffn.ub.es/luisnavarro/nuevo_maletin/Maxwell_1856_Faraday_lines_excerpt.pdf

Sin embargo, incluso luego de un modelo matematico, me parece que la pregunta mas esencial es lo menos comprobable, mas que una simple manifestacion en virtud de una facultad (como dirian varios fisicos modernos), es una cuesion de que es, mas que de como es o como funciona.

Podemos observar facilmente el fenomeno con el expermiento del polvo de hierro:



Pero sigo sin encontrar una respuesta a mi pregunta: ¿que son lineas de campo?.
Esta claro que hablamos de lineas como una representacion, como dijo Newton, del fenomeno, y no como el fenomeno en si y, sabiendo eso, ¿que es lo que realmente son? ¿una perturbacion del espacio?

Me gustaria saber lo que opinan sobre esto.

Saludos.
#113
Hola.
Echandole un vistazo a lo que tiene que decir Wikipedia acerca de esto me han quedado ciertas dudas acerca del funcionamiento, digamos, de bajo nivel del ensamblaje y linkeado de programas, en terminos generales.

¿Que es, fundamentalmente, la generacion del codigo objeto?
Facilmente en Internet puede encontrarse una variedad considerable de referencia para con este tema sin embargo lo que mas bien me pregunto es cual es el proceso preciso del compilador, tomando en cuenta que ya conozco las cuestiones mas superficiales. En verdad no pido (aunque agradeceria por añadidura) una explicacion (mas bien, resumen) de este proceso porque se que no merece un resumen. Tambien agradeceria saber en donde podria encontrar una buena referencia acerca del formato de archivo OBJ.

y, de igual manera, ¿que es, fundamentalmente, el proceso de linking?
Sin bastante que añadir, tengo basicamente la misma duda.

Como resultado de estas cuesitones, ademas tengo algunas otras preguntas:
Ya que no conozco el funcionamiento basico del proceso de linking, pido que disculpen mi ignorancia porque realmente no se si es posible linkear (¿soy el unico al que le parecen raros estos anglicismos?) un archivo COM pero, si es asi, ¿cual es la diferencia entre linkear un archivo COM y un archivo EXE? y ¿en que afecta este proceso los valores de los registros de segmento, o a los mismos en definitiva, en tiempo de ejecucion?

Gracias de antemano y saludos.
#114
Hola.

Soy nuevo en este foro y me gustaria hacer una pregunta.
He estado intentando desde hace una semana esto y sinceramente me frustra no hallar la manera. Lo que estoy intentando es hacer una llamada a una funcion que esta fuera del segmento por defecto (en modo real, es decir, real-mode tipo 8086), es decir, lejana (o far), desde el lenguaje de programacion C y no logro hacerlo. He utilizado ensamblador integrado (lo cual el compilador codifica como una llamada near, y me refiero a instrucciones tipo call es:[bx], por ejemplo), una locura de conversiones de tipos de punteros a funciones y hasta he intentado hacer el programa en su totalidad en emsablador como resultado de mi frustracion pero he terminado peor al haberlo "terminado" sin encontrar un ensamblador para 16 bits. ¿a alguien se le ocurre alguna solucion a mi problema?

posdata: Si alguien sabe de un ensablador para 16 bits (tipo TASM preferiblemente), se lo agradeceria.

Muchas gracias de antemano.