Praktischer Kampf: Erzwungene Upgrade-Erinnerung für nicht verstärkte Android-App entfernen

Um das Popup-Fenster mit der Upgrade-Eingabeaufforderung einer nicht verstärkten APP zu entfernen, haben wir zunächst überprüft, ob die App gepackt war, und festgestellt, dass sie den kostenlosen Bang Bang-Packer verwendet.

Wir haben diesen installiert In der Testmaschinen-APP lautet der Installationsbefehl wie folgt:

adb  installl C:\Users\Avenue\Desktop\AndroidFridaBeginnersBook-main\Chap05\com.hello.qqc.apk

Wir können feststellen, dass, nachdem die APP die Begrüßungsoberfläche manuell übersprungen hat, ein Popup-Fenster mit einer Upgrade-Eingabeaufforderung angezeigt wird. Unabhängig davon, wo Sie klicken, kann das Popup-Fenster nicht entfernt werden:

Häufig verwendete Implementierungs-Popup-Fenster in Android. Es gibt drei Typen: Android.App.Dialog, Android.App.AlertDialog und Android.widget.PopupWindows.
#Einspruch gegen schnelle automatisierte Positionierung

Wir verwenden Einspruch, um die App zu injizieren und nach der entsprechenden Popup-Fensterklasse zu suchen. Diese App scheint ein Multiprozess zu sein, daher müssen Sie den Parameter -d verwenden und die Roothide-Versteckfunktion von deaktivieren magisk, sonst schlägt es fehl.

Sie müssen die App schließen, bevor Sie sie injizieren

Der Injektionsbefehl lautet wie folgt:

objection -d  -g com.hello.qqc explore


Laden Sie nach dem Erscheinen des Popup-Fensters das entsprechende Plug-In und suchen Sie im Speicher nach der entsprechenden Instanz.

plugin load  ./.objection/plugins/Wallbreaker

 plugin wallbreaker objectsearch  android.app.AlertDialog
 plugin wallbreaker objectsearch  android.app.Dialog
 plugin wallbreaker objectsearch  android.widget.PopupWindow

Sie können feststellen, dass die angezeigte Popup-Klasse android.app.Dialog ist.

Wir verknüpfen diese Klasse und prüfen, ob ein entsprechender Funktionsaufrufdatensatz vorhanden ist, um festzustellen, ob der entsprechende Klasse wird verwendet. .
Ich fand die obige Klasse verdächtig

Wir verwenden den folgenden Befehl, um die Funktion android.app.Dialog.setCancelable einzubinden

android  hooking watch class_method android.app.Dialog.setCancelable --dump-args --dump-backtrace --dump-return

Nachdem ich den Aufrufstapel durchgesehen hatte, stellte ich fest, dass die Funktion, die das Popup-Fenster in der APP initiiert, wie folgt aussieht:

Verwenden Sie ein Objekt, um Wallbreaker zu laden und nach Verdächtigen zu suchen Orte

plugin wallbreaker objectsearch cn.net.tokyo.ccg.ui.fragment.dialog.UpdateDialogFragment


Nachdem Sie es gefunden haben, drucken Sie die Eigenschaften des Objekts aus

plugin wallbreaker objectdump --fullname 0x2702


Siehe [0x2aca]: cn. net. tokyo.ccg.bean.VersionBean$Version@2e81a62
Dann drucken Sie es aus

plugin wallbreaker objectdump --fullname 0x2aca

Sie können den gedruckten Inhalt sehen, der mit dem übereinstimmt, was auf der Benutzeroberfläche angezeigt wird, wodurch das WYSIWYG-Prinzip bestätigt wird.

Zum Entpacken verwenden wir das Entpacktool Dexdunp.

Die entpackten Dateien lauten wie folgt:

Verwenden Sie jadx-gui, um das Ziel zu öffnen dex Und finden Sie die entsprechende UpdateDialogFragment-Klasse. Wir haben festgestellt, dass UpdateDialogFragment die DialogFragment-Klasse erbt

Um weiter zu bestimmen, welche externe Funktion diese Klasse aufgerufen wird, verwenden Sie den folgenden Befehl zum Einhängen

android hooking watch class   cn.net.tokyo.ccg.ui.fragment.dialog.UpdateDialogFragment


Aufrufliste drucken

android hooking watch class_method xxx.ui.fragment.d
ialog.UpdateDialogFragment.b --dump-args --dump-backtrace --dump-return


xxx.ui.fragment.dialog.UpdateDialogFragment.b stammt aus der Klasse xxx.ui.activity.MainActivity.a

Verwenden Sie jadx-gui, um diese Funktion zu finden. Der Code lautet wie folgt:

public void a(VersionBean.Version version, boolean z) {
        this.f1696a = version.url;
        if (version != null) {
            UpdateDialogFragment.b(version, z).show(getSupportFragmentManager(), UpdateDialogFragment.class.getSimpleName());
        }
    }

#Ändern Sie den Quellcode und packen Sie ihn neu, um ein Upgrade zu erzwingen.
Da die App verstärkt wird, müssen wir beim Neupacken auf einige Dinge achten:
Erstens sollten Sie beim Neupacken den Dex der ursprünglichen APP nach dem Entpacken verwenden, um den ursprünglichen Dex zu ersetzen
Zweitens wird die Eingabefunktion der App nach der Verstärkung zum Eintrittspunkt der Shell , also nach dem Neupacken Die Eintragsklasse von AndroidMainifest.xml muss geändert werden.
Wenn wir apktool zum Dekompilieren des APK verwenden, entscheiden wir uns dafür, die Dex-Datei nicht zu dekompilieren und das Dex der Shell zu löschen. Der Parameter -s von apktool bietet die Funktion, die Dex-Datei nicht zu kompilieren die APK.

apktool -s d xxx.apk


Löschen Sie die ursprüngliche Datei „classes.dex“ der APK und legen Sie die entpackte Datei „classes.dex“ darin ab. Benennen Sie sie entsprechend der Größe der Dateien „classes.dex“, „classes2.dex“ und „classes3.dex“.

rm classes.dex


Die zweite Frage besteht darin, die Eintragsklasse der App zu ändern, mit jadx-gui die Dex-Datei mit der Schlüsselklasse zu öffnen, nach „extends Application“ zu suchen

und dann erneut zu kompilieren. Für die erste Verwendung müssen Sie keytool. , Signatur generieren

apktool b xxx  生成的目录在 dist 目录下

Dann unterschreiben Sie: # Keytool generieren

keytool -genkey -alias android.key -keyalg RSA -validity 20000 -keystore /<MY_PATH>/android.key


Kopieren Sie die APK im Verzeichnis dist in das Verzeichnis d:\apktool und führen Sie den folgenden Befehl aus

Sie müssen die APK- und Signaturdateien im bin-Verzeichnis von jdk ablegen

Beachten Sie, dass Sie ein Verzeichnis angeben müssen, um eine signierte APK zu generieren. Sie haben keine Berechtigung, eine signierte APK im aktuellen Verzeichnis zu generieren.

 jarsigner -verbose -keystore abc.keystore -signedjar 目录/xxxsigned.apk xxx.apk abc.keystore

Nachdem der Test erfolgreich ausgeführt werden konnte, dekompilieren wir, suchen nach der zuvor gefundenen Smali-Datei, deren Klassenname MainActivity enthält, bearbeiten und suchen nach UpdateDialogFragment und ändern die Urteilsaussage, nachdem wir sie gefunden haben.

apktool d xxxsigned.apk


Finden Sie die entsprechende Codedatei
smali/cn/net/tokyo/ccg/ui/activity/MainActivity.smali

Ändern Sie sie wie folgt:

Nach der Änderung kompilieren, signieren und ausführen

apktool b xxx  生成的目录在 dist 目录下


Unterzeichnung

jarsigner.exe -verbose -keystore lala.keystore -signedjar D:\APP-test\apktool/com_singn_tets.hello.qqc.apk  com_singn.hello.qqc.apk lala


Dann haben wir es ausprobiert und festgestellt, dass es kein Popup-Fenster für ein erzwungenes Upgrade gab.

Von: https://www.yuque.com/avenue-le/ybne4d/gex5gg

zu guter Letzt

Wenn Sie Architekt werden oder die Gehaltsspanne von 20.000 bis 30.000 durchbrechen möchten, beschränken Sie sich nicht auf Programmieren und Wirtschaft, sondern müssen in der Lage sein, Ihr Programmierdenken auszuwählen, zu erweitern und zu verbessern. Darüber hinaus ist auch eine gute Karriereplanung sehr wichtig und Lerngewohnheiten sind wichtig, aber das Wichtigste ist, durchhalten zu können. Jeder Plan, der nicht konsequent umgesetzt werden kann, ist leeres Gerede.

Wenn Sie keine Anleitung haben, finden Sie hier eine Reihe von „Erweiterten Hinweisen zu den acht Modulen von Android“, die von einem leitenden Architekten bei Alibaba geschrieben wurden, um Ihnen dabei zu helfen, das chaotische, verstreute und fragmentierte Wissen systematisch zu organisieren. Jeder Beherrscht systematisch und effizient verschiedene Wissenspunkte der Android-Entwicklung.

Im Vergleich zu den fragmentierten Inhalten, die wir normalerweise lesen, sind die Wissenspunkte in dieser Notiz systematischer, leichter zu verstehen und zu merken und streng nach dem Wissenssystem angeordnet.

Vollständiger Satz an Videomaterialien:
1. Interview-Sammlung

2. Quellcode-Analyse-Sammlung

3. Open-Source-Framework-Sammlung

Begrüßen Sie alle mit einem Klick und dreimal hintereinander zur Unterstützung. Wenn Sie Informationen im Artikel benötigen, klicken Sie einfach auf die offizielle WeChat-Zertifizierungskarte von CSDN am Ende des Artikels, um sie zu erhalten es kostenlos

Supongo que te gusta

Origin blog.csdn.net/Misdirection_XG/article/details/127986819
Recomendado
Clasificación