So verhindern Sie, dass andere Anwendungen denselben Berechtigungsnamen definieren

9

Meine Anwendung definiert eine Berechtigung mit android: protectionLevel="signature".

%Vor%

Meine Absicht ist es, Anwendungsmodule zu erstellen, die nur von meiner signierten App gestartet werden können. Diese Anwendungsmodule haben Android: Erlaubnis in ihren Aktivitäten. Das funktioniert gut. aber... Eine Drittanbieter-App kann den gleichen Berechtigungsnamen verwenden und die Schutzstufe auf "Normal" wie diese setzen

%Vor%

Wenn meine App zuerst installiert wird, kann ich verhindern, dass andere Apps die Berechtigung außer Kraft setzen. Wenn man jedoch meine App deinstalliert und dann seine App installiert, wird die Berechtigung neu definiert.

Ist es möglich, zu verhindern, dass andere Anwendungen denselben Berechtigungsnamen verwenden, indem Sie beispielsweise der Berechtigung ein eindeutiges ID-ähnliches Anwendungspaket geben?

Obwohl das Manifest verschlüsselt ist, kann jeder den Berechtigungsnamen in log cat lesen, wenn er versucht, die Aktivität zu starten, für die diese Berechtigung erforderlich ist (eine Ausnahme wird mit dem erforderlichen Berechtigungsnamen ausgelöst).

    
Dennix 12.07.2012, 18:39
quelle

2 Antworten

5

Es gibt keine Durchsetzung, nur Konvention. Wie der Rest der Java-Welt, verlässt es sich lose auf Domain-Namen-Registrierungs-Infrastruktur. Die Idee ist, dass Sie Ihren Berechtigungsnamen mit Ihrem öffentlichen Internet-Domänennamen (z. B. com.myawesomecompany.myapp.MYPERMISSION ) voranstellen, den Sie besitzen.

Die Eindeutigkeit von Domain-Namen wird natürlich von der Registrar-Community erzwungen.

Ja, das System ist offen für Missbrauch.

BEARBEITEN: Wenn Sie einen Broadcast-basierten Kanal sichern, können Sie eine Zwei-Wege-Signaturprüfung hinzufügen, wenn Ihnen danach ist. Rufen Sie Context.sendBroadcast () mit dem Berechtigungsnamen als zweitem Parameter auf.

EDIT2: Ich habe das Gefühl, dass Sie dies überdenken, während Sie Ihre Augen vor dem größeren Android-App-Sicherheitsbild schließen. Was nicht beeindruckend ist. Missbrauch der Privilege-Infrastruktur ist nicht wie man in eine Android-App einhackt. Wenn ich Ihre Absichten abfangen möchte, werde ich keinen gefälschten Intent-Empfänger (Aktivität, Dienst) zusammenstellen. Stattdessen verbinde ich mich mit einem Debugger mit dem echten Empfänger in Ihrer App, Signatur und allem.

Mit öffentlich verfügbaren Tools dauert es ein paar Minuten, um ein Eclipse-Projekt für ein bestimmtes APK zu erstellen. Laden Sie es in Eclipse, stellen Sie eine Verbindung zu einem laufenden Prozess her, setzen Sie Haltepunkte in relevanten System-APIs (Android ist Open Source, denken Sie daran), voila. Mit ein wenig zusätzlichem Aufwand können Sie dekompilierte Java-Quellen für ein APK erhalten und im Hinblick auf Ihre Methoden debuggen, im Gegensatz zu Systemmethoden.

    
Seva Alekseyev 12.07.2012 18:49
quelle
0

Wenn Sie verhindern möchten, dass andere Anwendungen Ihre Berechtigungsstufe ändern, können Sie System-vordefinierte Berechtigungen mit der Stufe "Signatur" verwenden. Keine andere reguläre App kann Berechtigungen vor dem System definieren.

Die Systemberechtigung zum Schutz Ihrer Ressource bedeutet nicht, dass Ihre App mit dem Plattformschlüssel signieren muss.

Beispiel:

%Vor%

Das einzige Problem ist, dass AppStore zeigt, welche Berechtigung Sie verwenden, wenn der Code in der Datei manifest.xml in der App angezeigt wird.

%Vor%

In diesem Beispiel können Sie auf Ihre Ressource mit demselben Vorzeichenschlüssel zugreifen, aber Sie können das Paket remove definitiv nicht senden.

    
Kislingk 06.10.2014 20:01
quelle

Tags und Links