MISC



* Last update: 

  01/04/2019


* Comments:


* Send private 

  message


* Donation
	


VICTIMS


Main



PC

Ps3

Teensy2++

Ps4

RaspberryPi

Engel4800Y

RaspberryPi2


	



 * JaiCraB Web Site	                          * Contact: jaicrab@gmail.com  


	

-PC/Article/BiosMod
============ Introducción ============ Me encontrado con un caso bastante común entre los fabricantes. ¿Porque al adquirir una maquina no eres libre de hacer lo que quieras con ella? Ha llegado a mis manos un portátil lenovo x230 con problemas con las redes WIFI. Según las pruebas le falla la tarjeta WiFi. Así que vamos a cambiarla. Localizo una tarjeta pci-e y se la instalo. Mi sorpresa: Por lo visto el fabricante tiene una lista blanca sobre tarjetas específicas y no deja continuar con la carga del sistema operativo, obligando a apagar el equipo. ¿Solución? Comprar un modelo que este incluido en la lista… ¡STOP! Esto no se debería de permitir. Así que a buscar una solución. Busco información por la red. En una página web hay una persona que te la modifica por una “donación” obligatoria. ¿¡Qué!? “La donación es un gesto altruista, considerado como el mayor acto de bondad entre los seres humanos.” Le proporcionas el DUMP de la BIOS, haces el PAGO, y te modifica la BIOS. Lista para flashear. Si él es capaz, ¿porque no yo?, ¿Porque no publica el método? Yo aprendo de personas desinteresadas que publican métodos y explicaciones. ¡Manos a la obra! =============== Dump de la BIOS ===============
Este modelo contiene dos memorias. Pruebo con la primera a ver si contiene la BIOS y acierto. Desconozco que información tiene la segunda. Podéis utilizar cualquier programador SPI, en mi caso tengo una raspberry de anteriores entradas, instalo flashrom y procedemos a la lectura. Resumiendo: #flashrom -r BIOS.ROM -p linux_spi:dev=/dev/spidev0.0 #Reading flash... done. ¡LISTO! =================== Analizando BIOS.ROM =================== ¿Qué hacemos ahora? No tengo experiencia sobre BIOS. Lo primero que se me ocurre es buscar la cadena “Unauthorized network card” dentro del fichero. No hay resultado. Analizo la BIOS y no encuentro ninguna cadena de texto. ¡Ya está! Debe de tener algún tipo de compresión o cifrado. Otra vez mas, busco información. Por lo visto las BIOS van comprimidas. Por suerte hay varias utilidades que nos pueden valer para descifrar la BIOS. Encuentro “PhoenixTool”, se puede descargar de aquí. Ejecutamos el programa y seleccionamos el fichero leído BIOS.ROM
Esta aplicación descomprime y secciona nuestra BIOS. Es el momento de localizar la parte a modificar. Como antes, busco la cadena “Unauthorized network card” dentro de la carpeta DUMP que genera PhoenixTool. Esta vez obtenemos resultados: 79E0EDD7-9D1D-4F41-AE1A-F896169E5216.MOD ¿Qué pasaría si directamente borrara el modulo de la BIOS?, puede que alcance el objetivo. O puede que no... mejor voy a desensamblarlo con IDA. A ver si puedo localizar la parte de la comprobación e ignorarlo. Lo cargo en IDA64:
Vuelvo a localizar la famosa cadena “Unauthorized…” y a ver quién la llama:
Encontrando la función que usa esa cadena:
En modo grafico se ve claro que usa esa cadena cuando surge alguna comparación. La solución más rápida sin calentarme la cabeza es saltar la comprobación y así evitar que apague el sistema. Si evito que el sistema se apague es posible que me deje cargar el sistema operativo y así poder usar mi tarjeta WiFi nueva. Según el código:
El resultado de la comparación del retorno de la llamada “call qword ptr [rax+140h]”, “jl loc_B0F”, parece ser el que decide si da el error o continuar la carga del sistema. La instrucción ASM JL equivale a 0x0F8C. Según esta referencia podemos ver :
La solución es cambiar la instrucción JL por JMP. Con este cambio forzaremos el salto y evitaremos que muestre el texto por pantalla y que proceda a apagarse. La instrucción JMP equivale a E9 . Tendremos que indicar cuanto saltar. En este caso tenemos que ir al offset 0xB0F. Restamos 0xB0F desde la posición anterior a la instrucción E9, quedaría 0xB0F – 0xA42 = 0xCD. Ya tenemos el remplazo adecuado: 0xE9CD000000 Abro mi editor HEX, en mi caso WINHEX y procedo a editar el módulo extraído. Me situo en el offset 0xA3D donde se encuentra la instruccion a remplazar. Ahora modifico 0F 8C por E9 CD.
Guardamos los cambios y es el momento de añadirlo al BIOS.ROM. ========================= Compilando nueva BIOS.ROM ========================= En PhoenixTool abrimos el fichero BIOS.ROM. Seleccionamos fabricante LENOVO. En SLIC File,dentro de la carpeta de “PhoenixTool\SLIC21”, el fichero “LENOVO.BIN” Y Vamos al botón inferior “Structure”. Aquí debemos localizar el módulo 79E0EDD7-9D1D-4F41-AE1A-F896169E5216 y remplazarlo por el modificado:
Exit, y Save. Volviendo a la ventana principal le damos a “GO”. Esto generara la nueva BIOS_SLIC.ROM. Escribir nueva BIOS Una vez más uso mi programador: # flashrom -w BIOS_SLIC.ROM -p linux_spi:dev=/dev/spidev0.0 Una vez escrita, cruzo los dedos y enciendo. ¡Sorpresa!, ya no me da el error y me deja cargar el sistema operativo. Hemos conseguido que una tarjeta WiFi ajena que no estaba en la lista blanca funcione. ========== Conclusión ========== Una manera de saltar la protección de la Bios al poner un componente no autorizado. Esto es un resumen del procedimiento que he llevado a acabo. Algunos pasos lo he saltado o no he profundizado. Pero la idea está aquí. A sido divertido, nunca dejo de aprender. Recordar que la palabra donación según “Google” : Cosa que se da a una persona de forma voluntaria y sin esperar premio ni recompensa alguna, especialmente cuando se trata de algo de valor.