Inhaltsverzeichnis
1. Konzentrieren Sie sich auf die Analyse der Fallstricke.
1.okhttp-Aufrufprozess
2. Die Fallstricke, auf die Frida während des Analyseprozesses gestoßen ist (die wichtigsten Punkte finden Sie in den Kommentaren)
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:
Heim Betrieb und Instandhaltung Sicherheit So holen Sie sich das APK-Netzwerkpaket in Frida

So holen Sie sich das APK-Netzwerkpaket in Frida

May 16, 2023 pm 07:16 PM
apk 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();
}
}
Nach dem Login kopieren

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
Nach dem Login kopieren

Tatsächlich erhält client.newCall schließlich eine Verbindung über die URL

HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
Nach dem Login kopieren

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)
Nach dem Login kopieren

2. Die Fallstricke, auf die Frida während des Analyseprozesses gestoßen ist (die wichtigsten Punkte finden Sie in den Kommentaren)

  1. 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
  2. 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
  3. 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.

  1. 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
  2. Fängt den Ort ab, an dem JSON verwendet wird, bevor die App eine HTTP-Anfrage aufruft. Dies ist nur eine davon $Builder Interception

  3. property_get interception

  4. 2. Umgang mit Benutzerablauf aufgrund der Android_ID
  5. 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 kopieren

    3. 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

  6. 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:
  7. 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 kopieren

    Selbst 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
  8. , 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;
}
Nach dem Login kopieren
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);
}
});
Nach dem Login kopieren

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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Der APK-Teardown der Google-App-Beta enthüllt neue Erweiterungen für den Gemini AI-Assistenten Der APK-Teardown der Google-App-Beta enthüllt neue Erweiterungen für den Gemini AI-Assistenten Jul 30, 2024 pm 01:06 PM

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

So führen Sie autorisierte APK-Penetrationstests durch So führen Sie autorisierte APK-Penetrationstests durch May 20, 2023 pm 12:29 PM

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.

So öffnen Sie APK-Dateien unter Windows 11 So öffnen Sie APK-Dateien unter Windows 11 Apr 14, 2023 am 11:19 AM

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

So benennen Sie APK-Software um So benennen Sie APK-Software um Dec 08, 2023 am 10:23 AM

Ä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.

So holen Sie sich das APK-Netzwerkpaket in Frida So holen Sie sich das APK-Netzwerkpaket in Frida May 16, 2023 pm 07:16 PM

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

So verschlüsseln Sie die von Unity veröffentlichte Android-Apk So verschlüsseln Sie die von Unity veröffentlichte Android-Apk May 13, 2023 am 11:10 AM

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.

Win11 APK-Installationsanleitung Win11 APK-Installationsanleitung Jan 03, 2024 pm 10:24 PM

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

So führen Sie eine einfache APK-Codeinjektion durch So führen Sie eine einfache APK-Codeinjektion durch May 14, 2023 am 11:43 AM

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{

See all articles