Ich habe einen Sicherheitsschlüssel in einer Anwendung. Ich möchte es sicher aufbewahren. Ich speichere es gerne in einer nativen Shared Library (vielleicht aus einem Code). Danach möchte ich, dass es von einer Methode zurückgegeben wird, die die Signatur des ursprünglichen APK überprüft. Daher kann niemand diese Datei außer vertrauenswürdigen Anwendungen verwenden. Ich weiß, dass diese ndk-Bibliothek auch dekompiliert werden könnte, aber das ist noch schwieriger, Reverse Engineering von nativem Code zu machen als java .class-Dateien.
Frage:
Ich werde versuchen, Ihre erste Frage hier zu beantworten:
Die Signatur Ihrer Anwendung wird in der DEX-Datei (Dalvik Executable) Ihres APK gespeichert. DEX-Dateien haben folgende Struktur:
Also, das ist der Anfang des Headers der DEX-Datei:
Um also eine Signatur Ihrer apk zu berechnen, sollten Sie die SHA-1-Signatur Ihrer DEX-Datei ausgehend von dem Offset 32 berechnen.
Um Zugriff auf die DEX-Datei Ihrer apk aus systemeigenem Code zu erhalten, können Sie den Prozessspeicher lesen, der in / proc / self / maps:
gespeichert ist %Vor%Jede Zeile in der Datei proc / $ ID / maps hat folgende Struktur:
Hier finden Sie eine bessere Beschreibung der Struktur der proc / $ ID / maps-Datei: Linux verstehen / proc / id / maps
Um den Speicherort der DEX-Datei im Prozessspeicher zu ermitteln, sollten Sie in jeder Zeile Ihrer proc / self / maps-Datei die Spalte "Pfadname" auschecken. Wenn die der DEX-Datei entsprechende Zeile gefunden wird, sollten Sie die Anfangs- und Endadresse des DEX-Dateibereichs eingeben:
%Vor%Wenn Sie also Start- und Endadressen des Bytecodes Ihrer Apk haben, können Sie die Signatur Ihrer Apk berechnen.
Tags und Links java android security android-ndk digital-signature