notes apple app ios objective-c assembly sqlite3 ida

apple - notes app ios



ParĂ¡metros de guarded_open_np (1)

Descubrí que guarded_open_np función guarded_open_np para abrir el archivo de la base de datos. Eché un vistazo al código abierto de sqlite3, no existía tal cosa. Definitivamente, Apple lo ha modificado para usar guarded_open_np lugar de open de Unix.

Sé que guarded_open_np es una API privada y no encontré ni encabezado ni documentación al respecto. Quiero hacer una intercepción (Cydia''s MSFunctionHook) en guarded_open_np , así que también necesito saber cuáles son los parámetros, no solo el nombre de la función.

Invertí ingeniería en libsqlite3.dylib usando IDA Pro, así es como llamaba guarded_open_np :

sub_79c1c: push {r7, lr} mov r7, sp sub sp, #0x4 mov r3, r1 movw r1, #0xc57e movt r1, #0x0 str r2, [sp, #0x4 + var_0] add r1, pc movs r2, #0xf blx imp___picsymbolstub4__guarded_open_np add sp, #0x4 pop {r7, pc}

Sin embargo, todavía no está claro qué parámetros podría tomar. Aprecio mucho si hay algún sitio oficial que mencione guarded_open_np con todos sus parámetros.


De la información que está aquí, no creo que podamos dar una respuesta sólida, aunque la de CodaFi es una buena sugerencia.

Dicho esto, aquí hay algunas referencias que pueden ser útiles para darle las herramientas para descubrirlo usted mismo:

Primero, probablemente ya lo sepas, pero aprende sobre los registros y la pila.

En el ensamblaje, para llamar a una función normalmente se sigue algo llamado Interfaz Binaria de Aplicación (ABI) que simplemente configura convenciones como donde las funciones esperan que sus argumentos sean (registros, pila, etc.), lo que registra una llamada a la función, puede cambiar etcétera. .

Dado que se trata de iOS, debe consultar el Procedimiento estándar de llamadas para ARM Architecture y la Guía de llamadas a funciones de iOS ABI .

Mirando la sección "Basic Procedure Call Standard" en el primer enlace de arriba, puede ver que las llamadas de función esperan que sus primeros cuatro argumentos estén en los registros r0 ~ r4, respectivamente.

Por lo tanto, para su investigación, probablemente quiera averiguar qué hay en estos registros justo antes de ramificarse en el resguardo guarded_open_np. XCode puede escupir el conjunto de un archivo, y usted debería poder establecer puntos de interrupción en él; luego use el comando de register read en llvm para mostrarle todo el contenido de su registro (tenga en cuenta que algunos de los registros pueden contener ubicaciones de memoria que usted querrá examinar con los comandos lldb de memory read ).

Para profundizar un poco más en el ensamblaje de iOS, recomiendo la publicación de blog de 3 partes de Mike Ash "Desmontando la Asamblea", partes 1 , 2 y 3 . Entonces puede que le guste su publicación reciente en las actualizaciones de 64 bits de ARM . Estos son recursos informales, pero te ayudan a familiarizarte rápidamente con el ensamblaje de escaneo y, en general, sabiendo qué está pasando.