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