Einladung "Empfangen" für Hound Voice Assistant



Viele haben das Demo-Video des persönlichen Assistenten von Hound gesehen, der so leistungsfähig wie möglich ist und sogar so bekannten Anwendungen wie Google Now und Siri voraus ist. Hound kann auch kostenlos bei Google Play (in den USA) heruntergeladen werden, befindet sich jedoch leider in der Entwicklung und erfordert beim Start eine Einladung.

Sofort wurden meine Hände dringend gekämmt , um dieses Wunder zu testen, und da ich es leid war, auf eine Einladung per Post zu warten (ungefähr eine Minute später), nahm ich den Debugger in die Hand ... den ich nie brauchte, weil sich herausstellte, dass alles einfacher war, aber dies in der richtigen Reihenfolge.

Hinweis: Ich bin kein professioneller Android-Entwickler, Hacker usw., alles wird getan, um meine eigene Neugier und auf eigenes Risiko zu befriedigen. Melden Sie Ungenauigkeiten in den Kommentaren oder in privaten Nachrichten.

Zunächst müssen Sie die APK-Datei mit der Anwendung erhalten. Sie können im Internet suchen, aber wir suchen nicht nach einfachen Wegen. Ich habe die neueste Version von Google Play heruntergeladen und die Anwendung aus dem Ordner /data/app/com.hound.android.app-1 abgerufen (erfordert Administratorrechte, d. H. Root).

Jede Anwendung für Andoid ist eine APK-Datei, die eigentlich ein umbenanntes Zip-Archiv ist. Wenn Sie es mit einem Archivierungsprogramm öffnen, wird das folgende Bild



angezeigt : Betrachten Sie den Inhalt genauer:
  • assets — , , ,
  • lib — .so .
  • META-INF — apk , SHA1 . , , . , , Android , .
  • res — , xml , .
  • AndroidManifest.xml — , , .
  • classes.dex — , (), Java.
  • resources.arsc — , , , res, .

Wir haben das Glück, dass fast die gesamte Anwendung, mit Ausnahme von Bibliotheken von Drittanbietern, in Java geschrieben ist, was bedeutet, dass wir nicht im Debugger sitzen und den Code auf niedriger Ebene zerlegen müssen.

Jetzt müssen Sie classes.dex entpacken und versuchen, den Code herauszuholen. Dafür verwenden wir Apktool . Laden Sie auf der Seite „Installieren“ die ausführbare JAR-Datei sowie einen Wrapper für die Verwendung über die Befehlszeile herunter. Es reicht aus, beide Dateien in den Anwendungsordner zu kopieren (oder zur Umgebungsvariablen hinzuzufügen) und den folgenden Befehl auszuführen:

apktool -r decode _.apk

Die Option -r ist erforderlich, um keine Zeit mit dem Entpacken von Ressourcen zu verschwenden, die wir nicht bearbeiten werden.

Jetzt sehen wir im gleichnamigen Ordner mit dem Anwendungsnamen schon etwas mehr als im Archiv. Die Datei classes.dex fehlt jetzt, und stattdessen wird der Ordner smali angezeigt, in dem die Klassen als Textdateien gespeichert sind. Aber hey, wo ist Java? Es gibt einige Dateien mit der Erweiterung .smali, in denen etwas gespeichert ist, das dem Assembler aus der Ferne ähnlich ist.

Dies ist die Dalvik-Opcode-Sprache, in die Java-Code kompiliert wird. Es gibt Anwendungen, die versuchen können, den Quellcode aus diesen Dateien wiederherzustellen, aber dann müssen Sie diesen Code später ändern, und das Wiederherstellen aus Java-Code ist eine undankbare Aufgabe. Daher werden wir den Smali-Code verstehen, da er ziemlich verständlich ist und auch die Funktionsnamen darin intakt geblieben sind. Was wir verwenden werden.

Suchen Sie den Code, der für den Zugriff auf die Anwendung verantwortlich ist. Wenn Sie den Namen der Anwendung und die englische Sprache kennen, wird deutlich, dass sich die Hauptklassen der Anwendung im Ordner smali / com / hound / android / appcommon befinden . Das Problem besteht darin, den Ort zu finden, an dem die Einladung überprüft wird. Die Dateisuche hilft uns beispielsweise in Windows. Sie können den folgenden Befehl verwenden:

findstr /s /i /m _ *.*

Der Code kann entweder "einladen" oder "einladen" sein, daher entfernen wir den letzten Buchstaben aus dem Wort und suchen nach "einladen". Bingo, hier ist es, die isInvitationComplete () -Methode in der Datei smali / com / hound / android / appcommon / app / Config.smali :

.method public isInvitationComplete()Z
    .locals 2

    .prologue
    .line 578
    const v0, 0x7f080174

    const v1, 0x7f0b001f

    invoke-direct {p0, v0, v1}, Lcom/hound/android/appcommon/app/Config;->getBoolean(II)Z

    move-result v0

    return v0
.end method

Es fordert eine boolesche Variable von den Anwendungsparametern an und gibt ihren Wert zurück. Aber warum brauchen wir solche Schwierigkeiten! Lassen Sie uns immer true zurückgeben . Ersetzen Sie "move-result v0" durch "const / 4 v0, 0x1" und speichern Sie die Datei. Hoffen wir, dass die gesamte Anwendung auf dieser kleinen Funktion basiert, die uns von nun an als vollständige Betatester betrachtet.

Es bleibt nur die Anwendung wieder zusammenzubauen. Wir verwenden wieder das wunderbare Apktool-Dienstprogramm:

apktool -r build _

Vergessen Sie nicht, dass wir vorher den gesamten Ordner entpackt haben müssen und nicht nur smali . Nachdem apktool die Arbeit beendet hat, gehen Sie zu diesem Ordner und dann zu dist , wo sich die zusammengestellte apk-Datei befindet.

Und es wird nicht funktionieren, oder besser gesagt, es wird nicht installiert. Wir haben den Inhalt der Anwendung geändert, was bedeutet, dass die Signatur jetzt ungültig ist. Sie müssen die Anwendung erneut unterschreiben. Wenn Sie ein Android-Entwickler sind, können Sie Ihre eigene Signatur und Ihr Android SDK verwenden. Viele haben jedoch keine, sie können eine Testsignatur verwenden und werden separat vom SDK-Dienstprogramm signapk.jar übernommen. Es gibt auch ein Dienstprogramm sign.jar , in das bereits eine Signatur integriert ist. Es reicht aus, den folgenden Befehl auszuführen:

java -jar sign.jar _.apk

Als nächstes erscheint die Datei file_name.s.apk , die die signierte Anwendung sein wird. Wir laden es auf das Gerät hoch, installieren es und genießen die voll funktionsfähige Anwendung!



Und Sie können einfach im Internet eine gepatchte Version finden, die jemand kürzlich gepostet hat.

All Articles