Novedades

LittleXrefS | Analizador de referencias cruzadas de offsets en IL2CPP Arm



Extasis

Moderador
Desde
4 May 2021
Mensajes
44
¿Hackeas juegos de Unity? ¿y no tiene un dispositivo real para configurar vigilantes en algunas direcciones de compensaciones de clase libil2cpp?, esta herramienta podría ayudarte, actualmente está disponible solo para arm por ahora, pronto se implementarán abis más nuevos como x86 y arm-64v.

Que Informacion te brinda esta herrameinta:​

  • Nombre y clase de la funcion que usa el offset
  • Offset exacto de las instructiones que usan el offset
  • Previsualizacion de instrucciones que accede a el offset

Cómo usar:​

para el uso necesitarás:
  • Volcado de archivo JSON desde cualquier dumper de il2cpp por ahí
  • binario il2cpp utilizado en el volcado
  • Nombre de clase donde reside el desplazamiento con nombres de sub_namespaces si es necesario (si el dumper genera un encabezado, solo busque el nombre de su clase de destino allí e ingréselo en la herramienta)
  • compensación que desea buscar
en el tiempo de ejecución, solo proporcione una ruta al binario il2cpp y el volcado JSON, luego ingrese el nombre de la clase y el desplazamiento, y espere hasta que lo analice.

Cómo funciona:​

esta herramienta analiza estáticamente el flujo de código de todas las funciones que hacen referencia a la clase como puntero de parámetro, luego el análisis consiste en buscar acceso a la memoria o escribir en un registro relacionado que contiene el puntero de instancia de clase de destino y el desplazamiento de destino para buscar, también utiliza recursividad , ejemplo, digamos que tenemos una clase llamada foo (del volcado) y un desplazamiento 0x8, y una función del volcado JSON que toma un puntero de instancia de foo como primer parámetro:
Por favor, Acceder o Regístrate ¡para ver el contenido de la cita!
entonces en arm se registrará el primer parámetro
Por favor, Acceder o Regístrate ¡para ver el contenido de la cita!
por lo tanto, debemos comenzar a analizar allí, solo necesitamos recorrer y buscar LDR`S o STR`S (leer, escribir en el brazo), relacionar R0 y el desplazamiento objetivo, y esto terminará cuando se sobrescriba R0 (Foo_o *) , entonces, ¿dónde está la recursividad? Bueno, cuando el registro que contiene Foo_o*(R0 pero podría ser cualquiera) se copia en otro registro, también debe aplicar lo mismo a este nuevo registro, debe verificar qué instrucción usa LDR` S o STR`S en este nuevo registro copiado y el desplazamiento de destino, y esta es la lógica de recurrencia.

Además, no es necesario cargar Foo_o* en el primer parámetro, ya que alguna función podría apuntar a él en cualquier posición de parámetro, por ejemplo.
Por favor, Acceder o Regístrate ¡para ver el contenido de la cita!
Tomé esto en consideración, por lo que se maneja adecuadamente.

1641590909437.png

Ejemplo Creado con Among Us 9.9 Android y clase GameData, y 0x24 All Player Offset.

json dump utilizado en dumper generado por ==> il2cppdumper
desensamblador usado ==>CapStone
analizador json usado ==> JsonCPP

Virus Total
 

Archivos adjuntos

  • LittleXrefS.zip
    2,7 MB · Visitas: 10
Última edición por un moderador:
Atrás
Arriba