Extracción de la clave XOR (Scrambler)

La mayoría de los controladores de dispositivos basados en flash modernos utilizan un patrón de aleatorizador para los datos que escriben en su memoria flash. Este codificador es a menudo exclusivo para el fabricante del controlador y ocasionalmente para el modelo de controlador individual.La recuperación de datos de dispositivos que están codificados de esta manera solo es posible si el patrón de aleatorización es conocido (o puede determinarse), ya que los datos codificados no serán utilizables sin que primero se elimine el patrón de cifrado.La implementación del codificador es similar al cifrado básico, donde el controlador realiza una operación XOR exclusiva o en el presente documento. Esto sucede antes de que se escriba en la memoria flash usando el registro de desplazamiento de realimentación lineal del controlador.A diferencia del verdadero cifrado, los patrones de aleatorización no están diseñados por razones de seguridad y, por lo tanto, son fáciles de identificar, extraer y luego utilizar para la recuperación de datos.

Usando Visual Nand Reconstructor, somos capaces de identificar y extraer patrones de aleatorización Xor nuevos o no identificados de una manera (relativamente) relativamente directa. Hacemos esto usando un poco de conocimiento de la arquitectura del chip de memoria flash que luego combinamos con el componente visor de mapa de bits de VNR.Antes de comenzar a extraer la clave, es útil anotar algunos de los parámetros de los chips que hemos utilizado para crear los volcados de nuestra memoria flash.



Para empezar necesitaremos:
- el tamaño de página para el chip NAND

- el tamaño del bloque para el chip

¿Por qué? Las claves de aleatorizador Xor tienden a ser múltiplos del tamaño del bloque. Utilizan un patrón repetitivo que es fácilmente visible cuando configuramos el visor de mapas de bits con el tamaño de exactamente una página. Cuando se trata de la importancia del tamaño del Bloque, la clave completa tiende a ser la longitud exacta de 1 bloque, 1/2 de bloque, 1/6 de bloque del chip de memoria flash. Usaremos este hecho más adelante para simplificar el proceso de extracción.


1. Identificación y configuración de la estructura de la memoria flash

Deberíamos comenzar por determinar la estructura de nuestro chip NAND con el que podemos determinar fácilmente el área de datos (que probablemente será XORed), los marcadores de área adicional y el código ECC. Más adelante, ciertamente tendremos que quitar los marcadores de área de repuesto del fabricante y el ECC también, ya que estas áreas no están sometidas a XOR y no será necesario que nuestro proceso las elimine. Algunas veces, los marcadores del área de reserva también están codificados en XOR, esto no es común, pero puede ocurrir.

En el artículo se puede encontrar una explicación del propósito, la identificación y la generación de estructura de los chips NAND usando VNR.


3. Determinando el inicio y el final de la clave

Hay otra forma de navegar a través del volcado que puede demostrar que ahorra tiempo y evita la configuración manual complicada de los desplazamientos iniciales y finales de la tecla. Podemos hacer esto estableciendo el tamaño de página en exactamente un bloque de la memoria flash (este es uno de los valores que grabamos anteriormente). VNR nos permite establecer el editor hexadecimal en la Vista de página y avanzar a través del volcado en incrementos de exactamente un bloque de tamaño. Esto nos ayudará más tarde también, ya que el editor hexadecimal también mostrará exactamente un bloque, podemos extraer la clave XOR completa de manera muy simple y luego guardarla también. Abra la 'Imagen de Phy' en la que desea trabajar seleccionándola dentro de la interfaz VNR principal y luego haciendo clic en el elemento Visor de volcado de la Barra de herramientas. Esto nos permitirá abrir la visualización del visor de volcado de VNR. En el menú de la barra de herramientas del Visor de volcado, debe asegurarse de que se seleccionen tanto la Vista hexadecimal como la Vista de mapa de bits. Además, haga clic en la vista hexadecimal y asegúrese de que esté seleccionada la 'Vista de página'.






Las cosas pueden volverse más complejas con ciertos controladores. Phison, por ejemplo, no siempre usa claves que tienen exactamente 1 bloque de tamaño. Cuando se encuentra este escenario, se hace necesario utilizar el visor de mapas de bits para identificar el período de repetición de la clave. Este proceso es un poco menos preciso que el que usamos para determinar una clave XOR de bloque completo.

Esto no debería ser un problema ya que el tamaño del bloque es totalmente divisible por el tamaño de la clave XOR, por lo que aún podemos usar un bloque completo como nuestra clave, es solo que la clave será más grande de lo que necesita ser .



5. Verificador de bits

Ahora que tenemos nuestras muestras de la clave XOR, podemos limpiarlas. A menudo, particularmente si hemos habilitado ECC a través de VNR, nuestra clave ya estará bastante limpia; sin embargo, no podemos descartar que existan datos reales en el área clave que corrompan la clave extraída. Si la clave es completamente nueva para nosotros, no podemos descartar que haya datos de un patrón específico oculto debajo del patrón; lo que podemos hacer es minimizar la probabilidad de que existan errores de bit o caracteres ocasionales dentro de la clave, lo que corrompe la extracción versión.

Para esto, usamos la función 'Bit Verification' de VNR. El verificador de bits toma entradas y las compara. Donde dos de las tres entradas contienen datos idénticos y una tercera no es consistente, el verificador de bit ignora el elemento inconsistente y funciona con los otros dos. Este proceso no es infalible, sin embargo, es muy confiable en la práctica, particularmente cuando se combina con ECC.

Ahora abra las claves extraídas del espacio de trabajo VNR. Use la opción de menú 'Abrir imágenes físicas', puede seleccionar las tres al mismo tiempo, se agregarán al espacio de trabajo VNR. Ahora podemos verificarlos.

Para usar Bit Verificator, haga lo siguiente: A. Agregue el elemento Bit Verificator 'V' al espacio de trabajo de VNR B. Verifique que el número de elementos esté establecido en la cantidad de versiones de la clave que ha extraído C. Unir cada clave extraída al verificador Deberías quedarte con lo siguiente:






s7. Guardar la clave 'Clean' Xor

En los pasos anteriores hemos eliminado las estructuras SA y ECC de nuestra clave. Ahora tenemos que guardar la clave, con el elemento de área de datos seleccionado, elegir la opción del menú del visor de volcado y luego seleccionar Guardar todo. Las convenciones de nomenclatura para claves Xor se presentan en Visual NAND Reconstructor Book Part 2. Software

Ahora puede aplicar la clave Xor configurándola como el archivo fuente del elemento Xor en el espacio de trabajo VNR.