Mstik
Moderador
- Registrado
- 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.
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.
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
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
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:entonces en arm se registrará el primer parámetroPlease, Acceder or Regístrate to view quote content!
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.Please, Acceder or Regístrate to view quote content!
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.
Tomé esto en consideración, por lo que se maneja adecuadamente.Please, Acceder or Regístrate to view quote content!

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
Please,
Acceder
or
Regístrate
to view URLs content!
Please,
Acceder
or
Regístrate
to view URLs content!