So holen Sie sich das APK-Netzwerkpaket in Frida
1. Konzentrieren Sie sich auf die Analyse der Fallstricke.
Suchen Sie aus Systemsicht nach Hook-Punkten, anstatt Pakete zu erfassen, um sie zu erfassen.
1.okhttp-Aufrufprozess
public static final MediaType JSON = MediaType.get("application/json; charset=utf-8"); OkHttpClient client = new OkHttpClient(); String post(String url, String json) throws IOException { RequestBody body = RequestBody.create(json, JSON); Request request = new Request.Builder() .url(url) .post(body) .build(); try (Response response = client.newCall(request).execute()) { return response.body().string(); } }
Der wichtige Code des Clients befindet sich auf client.newCall(). Das Obige ist ein Beispiel von der offiziellen Website von okhttp. Ausgehend vom Schnittstellenaufruf wird schließlich das okhttp-Framework aufgerufen. Okhttp ist ursprünglich ein SDK. Später wurde AOSP in das System integriert, sodass es in die Framework-Ebene eingeordnet werden kann.
Die Framework-Ebene ist nicht detailliert, hauptsächlich diese Java-Klassen:
com.android.okhttp.internal.huc.HttpURLConnectionImpl com.android.okhttp.internal.http.HttpEngine com.android.okhttp.internal.http.RetryableSink com.android.okhttp.internal.http.CacheStrategy$Factory
Tatsächlich erhält client.newCall schließlich eine Verbindung über die URL
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
Die URLConnection hier ist tatsächlich eine Instanz von HttpURLConnectionImpl. Diese Klasse hat den getInputStream getOutputStream Methode werden intern getBufferedRequestBody und getResponse von HttpEngine aufgerufen. Zuerst habe ich versucht, diese beiden Schnittstellen zu verknüpfen. Nach dem Verknüpfen von getResponse kann die Antwort beispielsweise ausgedruckt werden.
Später habe ich festgestellt, dass Request nur Header, aber keinen Text ausgeben kann. Also habe ich mich in die Analyse vertieft und festgestellt, dass die Funktion getBufferedRequestBody verwendet werden kann, um eine Senke zu erhalten. Schließlich kann RetryableSink als Durchbruchspunkt verwendet werden, um beispielsweise den Text auszudrucken. Die Schreibfunktion entspricht urlConnection.getOutputStream().write auf App-Ebene.
Später entdeckte ich, dass die Funktion getBufferedReuqestBody für eine Anfrage möglicherweise mehr als einmal aufgerufen wurde, sodass es zu einem Problem der Datenduplizierung kam. Später fand ich den CacheStrategy$Factory.get-Punkt zum Hooken und stellte fest, dass dies immer noch der Fall war Datenvervielfältigung. Es wurde festgestellt, dass alle oben genannten Hooks Nachteile haben
Datenduplizierung
Nicht-OKhttp-Anrufe können nicht erfasst werden
Dann beginnt der Aufrufstapel mit Senden, Senden, Schreiben, Empfangen und Lesen der nativen Ebene wurde auch gedruckt. Nachdem ich drei Tage lang gekämpft hatte, beschloss ich schließlich, die Behandlung aufzugeben und stattdessen Werkzeuge zu verwenden.
okhttp流程:sdk接口->okhttp框架->native(libc)
2. Die Fallstricke, auf die Frida während des Analyseprozesses gestoßen ist (die wichtigsten Punkte finden Sie in den Kommentaren)
-
android.util.Log wird nicht gedruckt
var Logd = function Logd(tag, msg) { Java.use("android.util.Log").d(tag, msg); }; Logd('http-body-', '11111111111111');//该log不打印 Logd('http-body', '11111111111111');//该log打印
Nach dem Login kopieren -
Anonyme innere Klassen erfordern Reflexion, um Mitglieder zu erhalten
var printRequest = function(request) { var Buffer = Java.use("com.android.okhttp.okio.Buffer"); var bodyField = request.getClass().getDeclaredField('body'); bodyField.setAccessible(true); if (request == null) return; Logd('http', 'printRequest: request' + request); //var requestBody = request.body();//gadget直接报错 var requestBody = bodyField.get(request); var requestBodyClass = requestBody.getClass(); var ClassInstanceArray = Java.array('java.lang.Class', []); //var contentLengthMethod = requestBodyClass.getMethod("contentLength");//gadget直接报错 var contentLengthMethod = requestBodyClass.getMethod("contentLength", ClassInstanceArray); contentLengthMethod.setAccessible(true); var ObjectInstanceArray = Java.array('java.lang.Object', []); var contentLength = requestBody ? contentLengthMethod.invoke(requestBody, ObjectInstanceArray) : 0; //if (contentLength == 0) contentLength = contentLen; Logd('http', 'printRequest contentLength: ' + contentLength); if (contentLength > 0) { var BufferObj = Buffer.$new(); requestBody.writeTo(BufferObj); Logd(TAG, "\nrequest body :\n" + BufferObj.readString() + "\n"); } };
Nach dem Login kopieren -
Beim Drucken von os.Bundle müssen Sie das Bundle entpacken
var printIntentAndExtras = function printIntentAndExtras(intentObj) { if (intentObj == null) return; var Intent = Java.use("android.content.Intent"); var Bundle = Java.use("android.os.Bundle"); var bundleObj = Intent.getExtras.call(intentObj); if (bundleObj != null) { Bundle.getSize.call(bundleObj, null);//调用getSize即可反序列化 } Logd(TAG, ‘printIntentAndExtras ’ + bundleObj); };
Nach dem Login kopieren
Tatsächlich sind die oben genannten Fallstricke nicht die einzigen Fallstricke, die ich ausprobiert habe Ich habe auch die Interceptor-Lösung von okhttp sorgfältig untersucht und schließlich festgestellt, dass die App auch verwendet. Der Interceptor ist deaktiviert, sodass ein Konflikt auftritt und die Lösung nicht verwendet werden kann.
Ich habe auch nur die Smali der App analysiert und nach dem Call-Stack und den Netzwerkanfragen gesucht. Am Ende gab es nur ein paar relativ kleine Gewinne, die für die Leser vielleicht nicht nützlich sind, aber ich habe sie aufgezeichnet, damit ich sie nutzen kann erinnern Sie sich später daran.
-
java.net.URL-Abfangen
var URLHook = function() { var URL = Java.use('java.net.URL'); URL.openConnection.overload().implementation = function() { var retval = this.openConnection(); Logd('URL', openConnection' + retval); return retval; }; };//URL.openConnection调用概率比较大,但是不一定对网络进行请求
Nach dem Login kopieren Fängt den Ort ab, an dem JSON verwendet wird, bevor die App eine HTTP-Anfrage aufruft. Dies ist nur eine davon $Builder Interception
- property_get interception 2. Umgang mit Benutzerablauf aufgrund der Android_ID
-
var jsonHook = function() { var xx = Java.use('e.h.a.a');//app smali var xxa_method = xx.a.overload('org.json.JSONObject', 'java.lang.String', 'java.lang.String'); xxa_method.implementation = function(jsonObj, str1, str2) { Logd("json", jsonObj + " str1: " + str1 + " str2" + str2); xxa_method.call(this, jsonObj, str1, str2); } }
Nach dem Login kopieren3. Verwenden Sie das Paketerfassungstool, um Pakete zu erfassen und aus der Grube herauszukommen Die Fiddle-Proxy-Einstellung ist in Ordnung, aber die App kann sich nicht anmelden
Analyse des ADB-Protokolls, der Prozess hat java.security.cert.CertPathValidatorException gedruckt, und ich habe bereits einige Beiträge über das Abfangen von Paketen und das Umgehen von Zertifikaten durch Frida gesehen. Versuchen Sie zunächst eine Brute-Force-Suche: -
var traceAllHttpClass = function() { Java.perform(function() { Java.enumerateLoadedClasses({ onMatch: function(name, handle) { /*"e.h.a.a$a",起初也拦截过app的该混淆类*/ if (name.indexOf("com.android.okhttp.Http") != -1 || name.indexOf("com.android.okhttp.Request") != -1 || name.indexOf("com.android.okhttp.internal") != -1) { traceClass(name);//对这三个class进行trace } }, onComplete: function() { } }); }); };
Nach dem Login kopierenSelbst wenn Sie die Überprüfung direkt erzwingen, um „true“ zurückzugeben, können Sie sich immer noch nicht anmelden, da der gleiche SSL-Problemfehler auftritt. Ich habe die Antwort gefunden, nachdem ich auf Baidu gesucht habe. Entpacken Sie apktool, ändern Sie dann
rrree , um die Signatur neu zu packen und auszuführen, und die App kann sich diesmal normal anmelden. Die SSL-Überprüfung der App erfolgt nur in eine Richtung Der Server funktioniert nicht. Es wird keine Überprüfung durchgeführt.
4. Ende
Ich habe von Dienstagnachmittag bis Freitag gekämpft. Schließlich ist es keine gute Methode, Hook-Punkte von HttpEngine auf Systemebene zu finden, und die Nachteile sind bereits klar. Daher habe ich am Sonntag Paketerfassungstools und verschiedene Methoden von Baidu verwendet, um die aufgetretenen Probleme schrittweise zu lösen.
Hier sind die beiden gefangenen Tüten:
var BuilderClass = Java.use('com.android.okhttp.Request$Builder') BuilderClass.build.implementation = function () { //LOG('com.android.okhttp.HttpUrl$Builder.build overload', { c: Color.Light.Cyan }); //printBacktrace(); var retval = this.build(); Logd(TAG, "retval:" + retval); printRequest(retval); return retval; }
var nativePropertyGetAddr = Module.findExportByName(null, '__system_property_get'); Interceptor.attach(nativePropertyGetAddr, { onEnter: function onEnter(args) { this._name = args[0].readCString(); this._value = args[1]; }, onLeave: function onLeave(retval) { if (this._name.indexOf("ro.build.id") != -1) { var virtualDevice = getVirtualDevice(); if (DEBUG_PROP) Logd(TAG, "__system_property_get fake " + this._name + "=>to " + virtualDevice.build_id); this._value.writeUtf8String(virtualDevice.build_id); } var strFilter = /^ro\./g; if (DEBUG_PROP && this._name.match(strFilter) != null) Logd(TAG, "__system_property_get " + this._name); } });
Das obige ist der detaillierte Inhalt vonSo holen Sie sich das APK-Netzwerkpaket in Frida. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Googles KI-Assistent Gemini dürfte noch leistungsfähiger werden, wenn man den APK-Teardown des neuesten Updates (v15.29.34.29 Beta) in Betracht zieht. Berichten zufolge könnte der neue KI-Assistent des Tech-Giganten mehrere neue Erweiterungen erhalten. Diese Erweiterungen wi

Der Zweck dieses Artikels als Penetrationstest-Neuling besteht darin, Anfängern wie mir einige Testideen zu liefern. Der Inhalt kann relativ einfach sein, Cousins, bitte verzeihen Sie mir. Nachdem Sie die APK entpackt und die APK erhalten haben, entpacken Sie sie direkt mit 7-Zip, um mehrere Ordner, eine AndroidManifest.xml-Datei und eine Dex-Datei zu erhalten. Verwenden Sie dex2jar https://sourceforge.net/projects/dex2jar/, um diese Dex-Datei zu dekomprimieren, um eine JAR-Datei zu generieren, und verwenden Sie dann jd-gui, um den Java-Quellcode anzuzeigen. Natürlich kann man im Quellcode Lücken im Code finden, aber meist kommt es zu Verwirrung, sodass wir hier nicht näher darauf eingehen.

Haben Sie schon einmal eine Datei heruntergeladen, die mit den Buchstaben APK endet? Dies geschieht normalerweise bei Apps, die auf Ihrem Telefon funktionieren und auf Ihren Computer geladen werden. Die meisten dieser Dateien enden mit den Buchstaben APK. Möglicherweise haben Sie versucht, diese Dateien zu öffnen, können aber aufgrund ihrer ungewöhnlichen Erweiterungen nicht herausfinden, wo sie gespeichert sind oder wie Sie sie öffnen können. Machen Sie sich keine Sorgen, wenn Sie nach einer Möglichkeit suchen, solche Dateien unter Windows 11 zu öffnen, und sich dabei schon die Haare rausgegoogelt haben! Eigentlich ist es viel einfacher. Tatsächlich ist dies kostenlos und Sie müssen nicht einmal etwas installieren. Nun, Sie müssen einen APK-Dateiöffner für Ihr Betriebssystem herunterladen – aber nur, wenn Sie dies noch nicht getan haben

Änderungsschritte: 1. Stellen Sie sicher, dass die APK-Datei, deren Namen Sie ändern möchten, auf Ihrem Computer gespeichert wurde. 2. Klicken Sie mit der rechten Maustaste auf die APK-Datei und wählen Sie die Option „Umbenennen“. 3. Ersetzen Sie den ursprünglichen Dateinamen durch den neuen Name, den Sie wollen. Stellen Sie sicher, dass Sie nur den Dateinamen und nicht die Dateierweiterung „.apk“ ändern. 4. Drücken Sie die Eingabetaste oder klicken Sie im Fenster auf die Schaltfläche „Umbenennen“, um die Änderungen zu speichern.

1. Analysieren Sie die Fallstricke und finden Sie Hook-Points aus Systemsicht, anstatt Pakete nur zu erfassen, um sie zu erfassen. 1.okhttp-Aufrufprozess publicstaticfinalMediaTypeJSON=MediaType.get("application/json;charset=utf-8");OkHttpClientclient=newOkHttpClient();Stringpost(Stringurl,Stringjson)throwsIOException{RequestBodybody=RequestBody

Sicherheitsprobleme des Unity3D-Programmcodes Sicherheitsprobleme Die Kernassemblydatei Assembly-CSharp.dll des Unity3D-Programms ist ein Standard-.NET-Dateiformat und enthält umfangreiche Metadateninformationen wie Methodennamen, Klassennamen, Typdefinitionen usw. Sie können Verwenden Sie Tools wie DnSpy, um es leicht zu dekompilieren und zu manipulieren, und die Codelogik, Klassennamen, Methodennamen usw. sind auf einen Blick sichtbar. Sobald die Codelogik dekompiliert ist, ist es leicht, verschiedene Arten von Plug-Ins zu züchten und das Gleichgewicht des Spiels zu zerstören. Wenn es Lücken in der Codelogik gibt, können diese leicht entdeckt und ausgenutzt werden, was zu unvorhersehbaren Verlusten führen kann Entwickler. Probleme mit der Ressourcensicherheit: Während der Kompilierungs- und Verpackungsphase packt das Unity3D-Programm Ressourcen über den Unity-Editor in AssetBun.

Wie wir alle wissen, hat Microsoft angekündigt, dass Win11 Android-Anwendungen ausführen und lokale APK installieren kann. Nach dem Update von Win11 stellten Benutzer jedoch fest, dass sie nicht wussten, wie sie die lokale APK installieren sollten Diese Funktion wurde jedoch für Win11 implementiert. Warten Sie, bis die Funktion installiert ist, bevor Sie sie verwenden können. So installieren Sie eine lokale APK in Win11: 1. Laut Microsoft können Sie nach der Implementierung dieser Funktion durch Win11 direkt auf die heruntergeladene APK-Datei doppelklicken, um sie direkt zu installieren. 2. Nach Abschluss der Installation können Benutzer sie auch direkt im System ausführen. 3. Obwohl es sich mittlerweile um die offizielle Version von Win11 handelt, hat Microsoft diese Funktion für Win11 noch nicht implementiert. 4. Wenn der Benutzer also Win11 verwenden möchte

1. Vorwort Wenn die APK nicht verschlüsselt ist, wird die Smail-Datei durch Dekompilieren erhalten. Fügen Sie einfach den Code ein, der eingefügt werden muss. Dann versiegeln und unterschreiben Sie es! 2. APK erstellen Verwenden Sie Androidstudio, um eine einfache APK zu erstellen. Verwenden Sie einfach den Standardcode. packagecom.example.myapplication1;importandroidx.appcompat.app.AppCompatActivity;importandroid.os.Bundle;publicclassMainActivityextendsAppCompatActivity{
