Ich habe festgestellt, dass guarded_open_np
function von libsqlite3.dylib verwendet wird, um die Datenbankdatei zu öffnen. Ich habe sqlite3 open source gesehen, so etwas gab es nicht. Also definitiv hat Apple es geändert, um guarded_open_np
anstelle von unix open
zu verwenden.
Ich weiß, dass guarded_open_np
eine private API ist und ich weder Header noch Dokumentation darüber gefunden habe. Ich möchte Interception (Cydias MSFunctionHook) auf guarded_open_np
durchführen, also muss ich wissen, was die Parameter sind, nicht nur den Funktionsnamen.
Ich habe libsqlite3.dylib mit IDA Pro reverse-engineered, so heißt es guarded_open_np
:
Es ist jedoch immer noch nicht klar, welche Parameter es könnte. Ich schätze es sehr, wenn es eine offizielle Seite gibt, die guarded_open_np
mit all ihren Parametern erwähnt.
Aus den Informationen, die hier sind, glaube ich nicht, dass wir eine solide Antwort geben können, obwohl CodaFi's ein guter Vorschlag ist.
Das heißt, hier sind einige Referenzen, die hilfreich sein können, um Ihnen die Werkzeuge zu geben, um sich selbst zu finden:
Zuerst wissen Sie wahrscheinlich schon, aber lernen Sie mehr über Register und den Stack.
Bei der Montage eine Funktion aufzurufen, Sie in der Regel etwas folgen ein Application Binary Interface (ABI) genannt, die nur Konventionen aufstellt wie, wo Funktionen erwarten, dass ihre Argumente sein (Register, Stack etc.), die ein Funktionsaufruf registriert darf Ändern Sie und so weiter .
Da dies iOS, sollten Sie bei der Procedure Call Standard for suchen werden ARM Architektur und die iOS ABI Function Call-Führer .
Wenn Sie den Abschnitt "Basic Procedure Call Standard" im ersten Link oben betrachten, können Sie feststellen, dass Funktionsaufrufe erwarten, dass ihre ersten vier Argumente in den Registern r0 ~ r4 stehen.
Für Ihre Untersuchung wollen Sie wahrscheinlich herausfinden, was sich in diesen Registern befindet, bevor Sie in den guarded_open_np-Stub verzweigen. XCode kann die Assembly einer Datei für Sie ausspeien, und Sie sollten in der Lage sein, Breakpoints darauf zu setzen; Verwenden Sie dann die register read
Befehl in llvm Sie alle Registerinhalte anzuzeigen (beachten Sie einige der Register nur Speicherstellen enthalten, die Sie mit den memory read
LLDB Befehle zu untersuchen).
Für ein bisschen mehr in iOS Montage Graben, empfehle ich Mike Ash 3-teiligen Blog-Eintrag "Auseinanderbauen der Assembly" Teile 1 , 2 und 3 . Dann magst du vielleicht seinen letzten Post auf den ARM 64 Bit Updates . Dies sind informelle Ressourcen, die Ihnen aber helfen, sich schnell mit der Scanning-Montage vertraut zu machen und im Allgemeinen zu wissen, was dort vor sich geht.
Tags und Links objective-c assembly ios sqlite3 ida