Todo lo que nunca quisiste saber sobre los ordenadores (II)

Todo lo que nunca quisiste saber sobre los ordenadores (II)

[Update agosto 19 2016]

Esto no es un concepto fácil de entender para alguien que sepa informática, si no sabéis informática os resultará todavía más complicado, pero lo explicaré de forma sencilla (y sin pizzas aceituneras…).

Voy a añadir un enlace en la columna de widgets debajo de ‘Computer Science’ a un sitio web que se llama ‘Tutorials Point‘ donde explican de forma resumida y organizada montones de cosas de distintos lenguajes de programación. Sólo tenéis que poner en la barra de búsqueda de la cabecera la palabra que os interese y ver lo que va saliendo (si habláis inglés mejor para vosotros, si no, botón derecho “Traducir al español”). Tener en cuenta que muchas veces las explicaciones que dan ahí, y algunos de los enlaces están desfasados (estoy resolviendo algunos problemas en mi ordenador para instalarme un entorno de desarrollo en Visual Basic, VB.NET, pero como en mi ordenador suceden cosas poco habituales desactivé un montón de funcionalidades y servicios (como por ejemplo el scripting) y me he cargado medio sistema operativo (puede que tres cuartos…) a base de ir entrando con el regedit.exe o directamente cambiando las propiedades y permisos de carpetas y archivos varios, así que me llevará un tiempo dejarlo a punto. El caso es que Visual Basic va por la versión de 2015, que también es gratuíta, y en la página el enlace es a la de 2010.

http://www.tutorialspoint.com//assembly_programming/index.htm

Ahí arriba tenéis una explicación más larga y pormenorizada, con ejemplos.

Aquí os lo voy a explicar resumido, y os voy a explicar la parte que ni queríais, ni tendríais porqué saber, de no ser porque ya estáis hartos (fartucos, en asturiano) de que os falle el trasto y nadie sepa qué carajo es lo que le pasa. Para la parte didáctica ya os he puesto las indicaciones arriba.

En programación, básicamente, hay tres tipos de lenguaje: bajo nivel, medio nivel, y alto nivel.

Los más fáciles de usar y entender son los de alto nivel, esos se usan para programar de modo amigable aplicaciones con las que el usuario (vosotros) interactúa.

Los de medio nivel actúan de ‘traductores’ entre esos y los de bajo nivel, que son los realmente complicados de entender y utilizar porque son los que usan las instrucciones que leen y entienden los procesadores (y por eso también se llaman lenguajes máquina).

Y la parte que nunca tendríais que haber aprendido es esta:

Cuando alguien necesita un lugar en que almacenar alguna sustancia o material que no resulta ni práctico, ni cómodo almacenar en casa ¿qué hace?

Se busca un sitio fuera en el que meter las cosas que le resulta incómodo almacenar en su casa.

Es un ejemplo fácil de entender para explicaros que eso mismo se hace también con los datos. De hecho en bases de datos hay una palabra para definirlos: “almacén”.

Cuando alguien se hace con el control de tu ordenador (o red de ordenadores), puede utilizarlo para hacer acciones de diverso tipo redirigiendo y enrutando la comunicación. Un ordenador que realiza acciones de forma remota se conoce como “dron”, igual que los avioncillos, o también “zombi”. Un tipo de ataque típico es el de tipo DOS (Denial Of Service), denegación de servicio. Y ese tipo de ataque consiste en que el servidor se queda sin socket al que conectar nuevas peticiones de cliente.

Generalmente las conexiones en web se asignan en una ‘pool’. Un ‘pool’ tiene capacidad para… digamos veinte conexiones que se van reutilizando y reasignando a las distintas peticiones hechas por vuestros navegadores (Internet Explorer, Firefox, Thunderbird, Chrome…). Si el pool se llena completamente no puede responder a esas peticiones y entonces el servidor se cae.

Si los desarrolladores y administradores de la infraestructura informática en una página calculan que con 500 sockets de conexión (por ejemplo) tienen suficiente para atender las peticiones del tráfico de red, son 500 sockets los que se implementan, y mantienen (porque aunque lo llamen “nube” estos trastos pesan lo suyo, y cuesta dinero mantenerlos a punto, y energía para que estén constantemente disponibles).

Pero en realidad, y esto es algo que la mayoría de la gente no sabe o no entiende, un servidor se puede implementar desde cualquier dispositivo que tenga conectividad con internet, y ni siquiera con internet, porque basta con que tenga conexión de telefonía del tipo que sea, fija, o móvil (y aunque no lo sabéis vuestro PC tiene aplicaciones incluídas y operativas en el sistema operativo, para actuar como servidor salvo que las eliminéis o controléis específicamente, cosa que en general no sabéis, pero es así, AS-IS, y aunque vosotros no lo sabéis los que sí lo saben son los hackers y los representantes de (¿) la ley (?)).

La distinción cliente-servidor, sólo es una distinción de dirección y demanda y entrega de servicio requerido. Por eso hay otro tipo de conectividad que se conoce como P2P, (peer to peer), en que uno y otro equipo actúan alternativamente como servidor y como cliente.

Otra cosa que la gente no entiende es que si dejas el ordenador sin contraseña porque vives solo y nadie tiene acceso a él desde dentro de tu casa, lo estás dejando abierto también al mundo exterior al que te conectas cuando lo enciendes (salvo que no tenga conectividad de red, con o sin cable, ni puerto al que conectar un lápiz inalámbrico, por ejemplo, o abriendo inadvertidamente tu casa con tus llaves o la ayuda de algún cerrajero, y quitando la carcasa, poniendo algún componente electrónico extra del que sólo te darás cuenta si te falla el trasto y tienes la noción en la cabeza (quita los tornillos,  retira la carcasa e inspecciona visualmente los circuitos, con suerte encontrarás algún rastro de la manipulación: un emisor wi-fi es un componente electrónico de dos patitas cilíndrico generalmente, de unos dos milímetros de diámetro y un centímetro de longitud, muy parecido a un condensador, pero generalmente más pequeño).

De momento os pongo este que igual os suena más. Si no encuentro imagen haré una foto de la placa madre de mi ordenador y la editaré para enseñaros el componente electrónico wi-fi que viene incluído en mi ordenador de serie, pero en los vuestros si están retocados lo han añadido y eso sí que se puede demostrar.

Entonces de momento tenemos:

Un ordenador ajeno, hackeado hasta los ojos, perdón, quería decir hasta la tarjeta de memoria dedicada de la unidad de proceso gráfica, más conocida como GPU, o tarjeta de video (por cierto… la conexión Ethernet RJ45, es la que tenemos todos, aunque pocos sabemos que se llama RJ45… 🙂 ).

Y no sólo un ordenador, unos cuantos ordenadores, porque las bases de datos pueden ser distribuídas, es decir repartidas en diferentes soportes magnéticos, sea dentro del mismo computador, o en discos duros repartidos en diferentes “drones” (el servicio DTC, entre otros, se encarga de mantener este tipo de archivos).

Y aquí es donde viene el lenguaje de ensamblador.

Muy básicamente hay ocho tipos de registro en la memoria que ejecuta las instrucciones del procesador (que pueden ser CISC, Complex Instruction Set o RISC ).

AX

BX

CX

DX

BP

IP

CS

CE

(en 64 bits ponéis una R delante y es lo mismo pero con “palabra” más larga).

AX, BX, CX, y DX son lugares para mover variables entre uno y otro.

Cuando la aplicación que está manejando el usuario (vosotros) llama al fragmento de código que ejecuta una parte del proceso que la aplicación necesita en ese momento, lo primero que hace es almacenar el valor que está recogido en la celdilla de memoria por la que entra (en c, que es un lenguaje de programación de alto nivel de los que trabajan de forma estructurada y estática, y no un lenguaje de objetos, las llaves de apertura y cierre de función, representan la entrada y salida de la aplicación en ese fragmento de código de todo el programa).

(A little joke, a little jest! As you can see I have no idea of computer science…).

Después la función se empuja hacia la pila, cuya base es BP de Base Pointer, después se busca la dirección o direcciones donde las variables que necesita la aplicación están almacenadas, y esas direcciones están en CS de Code Store.

Todos estos pasos se van haciendo utilizando las rutinas de interrupción (IRQs). En realidad aunque se llaman así: Interruption Routine Query, se abrevian como INT XXh.

Interrupción 10h, INT 10h (INT en este caso no es de integer, es de ‘interruption’, y la h es para indicar que generalmente el código máquina va en hexadecimal, aunque los hackers pueden tenerlo cifrado y almacenado de cualquier otra forma para llamar a esos fragmentos de código máquina, cambiando el hexadecimal por, binario, octal, decimal… y hacerlo menos reconocible para ojos expertos en leer código escrito para lenguaje ensamblador).

INT 10h puede llamar todas estas cosas, y de momento aquí dejo el post, que seguiré actualizando en otro momento y pondré arriba la fecha en que siga y también en la linea siguiente.

Update agosto 19 2016

He estado leyendo un poco del tutorial de ensamblador y he encontrado algunos errores, así que antes de seguir con mi explicación de todo lo que nunca quisiste saber sobre los ordenadores comentaré algunas cosas para que las entendáis mejor (por cierto, en la página vienen unos cuantos ejemplos ‘try it’ que se ejecutan online en NASM sin falta de descargar ni instalar las librerías).

Un byte son OCHO bits, no nueve, no está bien explicado, lo que ocurre es que además del byte en sí, se añade una bandera (flag) de control que se llama paridad, ‘parity’, y lo que hace es indicar si el byte al que va asignado es un número par o impar, y lo indica con la posición en una columna en la que cada bit indica la paridad de la fila de bytes que lleva al lado. Si el byte es par el bit de paridad es un cero, y si es impar es un uno.

Otro error en la explicación es el de llamar medio byte a ocho bits de los dos que forman la ‘word’ en código hexadecimal (16 dígitos del uno al quince y el cero). Es decir, en hexadecimal la ‘palabra’ (word) está formada por dos bytes, siendo cada uno de ellos media ‘palabra’ y no medio byte como dice en la explicación (medio byte es un ‘nibble‘, cuatro bits).

Explicaré también lo que es el acarreo (carry). Cuando sumamos pa hacer la compra y hacemos la suma 9+1 nos da 10, el uno del diez en esa suma es el acarreo. Si además tenemos que sumar 20 (de un bote gigante de aceitunas rellenas… 🙂 ), al 10 que resultó de sumar 9+1, le sumamos 20, y como llevábamos el acarreo de haberle sumado uno a nueve, tenemos que pagar 30 euros (y si somos generosos unos centimillos pa los quebrantos de caja… pero esos sobran ¿eh? 🙂 ).

Eso lo hacemos todos (o casi todos… hay quien va a hacer la compra y calcula por estimación, fiándose de la caja registradora, y tirando el ticket directamente y sin mirar en el cubo del reciclaje…) de forma habitual, es la numeración en base decimal.

En base binaria (ON/OFF) 1/0, sólo hay uno, o cero, así que es fácil: 1111 es un nibble de cuatro unos, cuatro unos suman cuatro en base decimal, cuatro es un número par, así que la paridad en ese nibble es par, cero.

Y el acarreo en binario os lo pongo así: 1+0+0+1=2, como 2 no forma parte del alfabeto en binario, el dos pasa a ser un cero, 0. y en este caso cabe en el lugar a la izquierda  del uno de la derecha, 1010. En otros casos al sumar uno no queda dígito al que añadir y se produce un desbordamiento, 1111 +1 sería 10000 pero como sólo hay cuatro bits se pierde hacia la izquierda y queda 0000.

Y ahora sigo con mi explicación. Si miráis la tabla de rutinas de interrupción que os puse en el post anterior y veis las diferentes llamadas a

INT 10h

(en el navegador metí la palabra MEMORY y salieron estos seis resultados, int 10h puede llamar muchas otras instrucciones).

Int 10/AH=12h/BL=85h – Cirrus Logic BIOS – GET INSTALLED MEMORY

Mirando en los enlaces vais viendo lo que de puede hacer con esas interrupciones en ensamblador.

Int 10/AX=4F05h – VESA SuperVGA BIOS – CPU VIDEO MEMORY CONTROL

Int 10/AX=5F02h – VIDEO – Realtek RTVGA – RETURN RTVGA ON-BOARD MEMORY SIZE

Int 10/AX=5F08h – Chips & Technologies ‘64300’ BIOS – SET LINEAR MEMORY START ADDRESS

Int 10/AX=5F10h – Chips & Technologies ‘64300’/’65530′ BIOS – GET LINEAR MEMORY INFO

Int 10/AX=6F07h – VIDEO – Video7 VGA,VEGA VGA – GET VIDEO MEMORY CONFIGURATION

CE es de Code Execution, y ahí está la dirección al código ejecutable.

Ese código se ejecuta fuera, en la memoria RAM, o el la memoria virtual (y puede que ni siquiera esté en vuestros ordenadores porque esté llamando a una dirección en internet).

Si esa llamada llama a una sección de almacenamiento en memoria (o soporte magnético del tipo que sea) que esté protegida de accesos no autorizados, la reacción del ordenador es proteger esa parte según esté dispuesto en las GPOs, o en cualquier otra restricción de las directivas de seguridad.

Si observáis que al hacer un análisis exhaustivo de vuestros sistemas el ordenador se cuelga, se apaga, da pantallazo azul, o muestra cualquier otro tipo de comportamiento extraño, puede ser un síntoma de que os está ocurriendo esto, porque si no tenéis la clave de acceso restringido el ordenador interrumpe la ejecución.

Si observáis que al ejecutar diferentes aplicaciones en el log de error os va dando las mismas direcciones de memoria, también es un síntoma.

Yo ya tuve que particionar, formatear, reinstalar, y borrar a mano (“ver archivos y carpetas ocultas” es una opción de carpetas, si los veis veréis AppData en los usuarios, y Program Data, por ejemplo) cambiando los valores de “Seguridad” en el cuadro de diálogo modal de “Propiedades” para poder acceder al objeto cambiando los permisos,”Avanzado”, “Buscar”, “Propietario” y “Permisos efectivos”, os dejará borrar, pero cuidado con lo que borráis porque os podéis cargar el sistema operativo… o al menos tres cuartos… 🙂 ) con el editor de registro algunas claves y clases.

Y si no hay comentarios ni preguntas aquí se acaba este post.

Acerca de María Cristina Alonso Cuervo

I am a teacher of English who started to write this blog in May 2014. In the column on the right I included some useful links and widgets Italian is another section of my blog which I called 'Cornice Italiana'. There are various tags and categories you can pick from. I also paint, compose, and play music, I always liked science, nature, arts, language... and other subjects which you can come across while reading my posts. Best regards.
Esta entrada fue publicada en Computer Science, Uncategorized y etiquetada , , , , , . Guarda el enlace permanente.

Click below (you can make a comment also through Google +)

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s