A digitális aláírás
...csak semmit sem értünk el a munkánkkal, mert az összes fájlunkból hiányzik a META-INF mappa. Ez nekünk így nem jó, mert a kernel meg fogja nézni a hitelesítést és bizony nem tölti be, amiből hiányzik!
Alá kell írnunk tehát a fájlokat, mielőtt használnánk őket!
Ehhez a következő csomagra lesz szükségünk: Signapk.
A rendszerfájlokat mindig platformkulcs védi, tehát azt kell használnunk a következő módon:
java -Xmx1024m -jar signapk.jar -w platform.x509.pem platform.pk8 nemszignált.apk szignált.apk
Ugyanezt megtehetjük az Android Kitchen megfelelő menüpontjával, ha a fájlokat az előkészített munkakönyvtárba másoltuk.
Egy apk fájl aláírását Linux alatt magunk is ellenőrizhetjük, ha kiadjuk a következő parancsokat:
$ unzip -p apkfájlunk.apk META-INF/CERT.RSA | keytool -printcert
Erre kapunk egy ilyen kiírást:
Owner: EMAILADDRESS=android.os@samsung.com, CN=Samsung Cert, OU=DMC, O=Samsung Corporation, L=Suwon City, ST=South Korea, C=KR
Issuer: EMAILADDRESS=android.os@samsung.com, CN=Samsung Cert, OU=DMC, O=Samsung Corporation, L=Suwon City, ST=South Korea, C=KR
Serial number: d20995a79c0daad6
Valid from: Wed Jun 22 14:25:12 CEST 2011 until: Sun Nov 07 13:25:12 CET 2038
Certificate fingerprints:
MD5: D0:87:E7:29:12:FB:A0:64:CA:FA:78:DC:34:AE:A8:39
SHA1: 9C:A5:17:0F:38:19:19:DF:E0:44:6F:CD:AB:18:B1:9A:14:3B:31:63
Signature algorithm name: SHA1withRSA
Version: 3
Extensions:
#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 93 2C 3A F7 0B 62 7A 0C 76 10 B5 A0 E7 42 7D 6C .,:..bz.v....B.l
0010: FA EA 3F 1E ..?.
]
]
#2: ObjectId: 2.5.29.19 Criticality=false
BasicConstraints:[
CA:true
PathLen:2147483647
]
#3: ObjectId: 2.5.29.35 Criticality=false
AuthorityKeyIdentifier [
KeyIdentifier [
0000: 93 2C 3A F7 0B 62 7A 0C 76 10 B5 A0 E7 42 7D 6C .,:..bz.v....B.l
0010: FA EA 3F 1E ..?.
]
[EMAILADDRESS=android.os@samsung.com, CN=Samsung Cert, OU=DMC, O=Samsung Corporation, L=Suwon City, ST=South Korea, C=KR]
SerialNumber: [ d20995a7 9c0daad6]
]
Láthatjuk, hogy ez pl. a Samsung eredeti kódja. Csakhogy nem tudjuk, hogy csak a kulcsot nem piszkálta senki, vagy tényleg hiteles a fájl...
Most lássuk, hogy mi is történik, ha valaki belepiszkált a fájlba:
Adjuk ki ezt a parancsot:
$ jarsigner -verbose -verify apktfájlunk.apk
...és jön a hidegzuhany:
$ jarsigner: java.lang.SecurityException: SHA1 digest error for res/anim-land/task_close_enter.xml
Sérül a fájl integritása. Nocsak, egy hamisítvány. Ezt a kernel kiszúrja többnyire és már jön is a bootloop...
Lássuk milyen, mikor átmegy:
sm 7648 Wed May 23 23:18:08 CEST 2012 AndroidManifest.xml
...
s = signature was verified
m = entry is listed in manifest
k = at least one certificate was found in keystore
i = at least one certificate was found in identity scope
jar verified.
Na, hát ez mindjárt jobban fest!
Dolgunk végeztével, a fent már tárgyalt módon csomagoljuk vissza a romunk vagy használhatjuk a Kitchent is, elvégre erre találták ki, majd nézzük meg fel tudjuk-e flashelni, majd be tudjuk-e bootolni a romunkat. Ha figyeltünk, akkor minden simán fog menni!
Ám, szerencsénkre vannak kényelmesebb emberek, akik nem törődtek bele, hogy ezzel ennyi gond van, így kitaláltak nekünk egy okosabb megoldást.
A cikk még nem ért véget, kérlek, lapozz!