Cómo utilizar Capstone Engine para escribir una herramienta de desmontaje de Android
A continuación, realice una compilación cruzada del motor Capstone para Android
# git clone /aquynh/capstone.git
Clonación en 'capstone'. .
remoto: Contando objetos: 16805, hecho.
remoto: Objetos comprimidos: 100% (12/12), hecho: total 16805 (delta 4), reutilizado 0 ( delta 0), empaquetado para reutilización 16789
Objetos recibidos: 100% (16805/16805), 26,10 MiB | 3,01 MiB/s, completado.
Resolución delta:
Retraso en resolución: 100% (12089/12089), completado.
# cd capstone
# NDK=~/Library/Android/sdk/ndk-bundle/ ./make.sh cross-android arm
Directorio actual , deberíamos tener un archivo llamado libcapstone.so, cópielo en el directorio jniLibs que creamos anteriormente.
A continuación, descargue una copia de los enlaces de Capstone Java y colóquela en el directorio app/libs/ de su proyecto de Android Studio, que proporciona métodos y clases que nos ayudan a interactuar con el motor Capstone.
Compilación de JNA
Los enlaces de Capstone Java utilizan la biblioteca JNA para cargar y comunicarse con las bibliotecas prediseñadas de Capstone, por lo que necesitamos compilar el JAR JNA de Android y extraer las bibliotecas binarias que Soporta la plataforma JNA.
En este paso, necesitas instalar ant:
# git clone /twall/jna.git
Clonando en 'jna'... p>
remoto: Contando objetos: 41416, listo.
remoto: total 41416 (delta 0), reutilizar 0 (delta 0), empaquetar y reutilizar 41416
Recibir objetos . 100% (41416/41416), 213,06 MiB | 4,51 MiB/s, listo.
Delta resuelta: 100% (26780/26780), listo. Comprobando conectividad... hecho.
# cd jna
# PATH=$PATH :~/Library/Android/sdk/ NDK_PLATFORM=~/Library/Android/sdk/ndk-bundle/platforms/android-21/ ant - Dos.prefix=android-arm dist
Después de que JNA complete la compilación , todavía necesitamos copiar algunos archivos al proyecto de Android Studio. Primero copie dist/jna.jar al directorio app/libs/ en el proyecto, luego descomprima el archivo dist/ android-arm.jar y luego copie el archivo libjnidispatch.so en app/src/main/ en el directorio jniLibs del proyecto. .
¡Juntos, juntos!
Ahora que hemos compilado todas las bibliotecas y copiado estos archivos en los directorios apropiados del proyecto, podemos comenzar a usar el motor Capstone.
Antes de comenzar, debemos asegurarnos de que las dos bibliotecas Java copiadas en el proyecto estén incluidas. Para hacer esto, agréguelos como dependencias del archivo en Android Studio (haga clic derecho en el módulo, abra la configuración del módulo, luego abra la pestaña de dependencias y finalmente haga clic en el botón "+" para agregarlos)
Después agregando, podemos usar Capstone en el proyecto de Android:
import capstone.Capstone; public class MainActivity extends Activity {
byte privado [] CODE = { 0x55, 0x48, (byte) 0x8b, 0x05, (byte) 0xb8, 0x13, 0x00, 0x00 };
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState
setContentView(R.layout.activity_main);
Capstone cs = nuevo Capstone(Capstone.CS_ARCH_X86, Capstone.CS_MODE_64);
Capstone.CS_ARCH_X86 = nuevo Capstone(Capstone .CS_MODE_64);