packages.xml与packages.list

文件路径:/data/system/packages.xml
PKMS 扫描完目标文件后会创建该文件,当系统进行程序安装、卸载和更新等操作时,均会更新该文件。该文件保存了系统中与 Package 相关的一些信息。
这个文件非常大,大概框架

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<packages>
  <version sdkVersion="xx" databaseVersion="xx" fingerprint="xxx" />
  <version volumeUuid="xxx" sdkVersion="xx" databaseVersion="xx" fingerprint="xxx"/>
  <permission-trees>
    ...
  </permission-trees>
  <permissions>
     ...
  </permissions>
  <package ...>
    ...
  </package>
  <updated-package ...>
    ...
  </updated-package>
  <shared-user ...>
    ...
  </shared-user>
  <keyset-settings ...>
    ...
  </keyset-settings>

<permission>:包含系统所有定义的权限信息
<package>:包含系统所有安装的 app 的详细信息
<shared-user>:包含所有系统定义的 shareuser的信息
<keyset-setting>:包含已安装app 签名的 public key 信息

  • <permission>
    • name:包名
    • package:申明权限的 package
    • protection:表示权限的级别
<permissions>
  <item name="android.permission.REAL_GET_TASKS" package="android" protection="18"/>
  <item name="android.permission.SEND_RECEIVE_STK_INTENT" package="com.android.stk" protection="2"/>
  ...
</permission>
  • <keyset-setting>
    • <keysets>:包含很多<keyset>,每个<keyset>都有一个identifier标号,这个编号对应<keys>中<public-key>中的 identifier
    • <keys>:<public-key>中的 value 就是从 apk 包中签名文件提取出来的公钥的值
    • <lastIssuedKeyId>和<lastIssuedKeySetId>表示最近一次取出来的公钥所属的 set
<keyset-setting version="1">
  <keys>
    <public-key identifier="1" value="MIIBIDANBgkq..."
    ...
  </keys>
  <keysets>
    <keyset identifier="1">
      <key-id identifier="1"/>
    </keyset/>
    ...
  </keysets>
  <lastIssuedKeyId value="58"/>
  <lastIssuedKeySetId value="58"/>
 </keyset-settings>
  • <package>
    • name:app 的包名
    • codePath:表示这个 apk 文件存放的位置,如果是系统 app,存在 system 分区,第三方 app 存在 data 分区
    • nativeLibraryPath:表示 app 使用的.so库存放的位置
    • primatyCpuAbi表示app 以哪种 abi 架构运行
    • publicFlags 和 privateFlags 根据AndroidManifest.xml中设置生成。android:multiarch
    • ft:表示 apk 文件上次被更改时间,it 表示第一次安装时间,ut 表示上次被更新时间。oat 或者 app 重装后,ft 和 ut 可能会改变
    • version 是 app 的版本好信息,即 AndroidManifest.xml配置的 android:versioncode
    • userId 是为 app 分配的 user id,如使用 shareUserId,则出现 ShareUserId
    • <sigs>块中的 count 表示 app 有多少个签名信息,有些 app 可能被多个证书签名。<cert>中的 inde 表示正式序号,若发现新的证书则序号加1,key 表示 app 使用的证书内容的 ascii 码值。PKMS 在扫描 apk 文件过程中,若发现其余之前扫描的 apk 使用相同的签名证书,则会有 inde 而无 key。拥有相同 index 的 package 表示使用相同的前面
      <perms>块中是 app 拥有的权限。granted 表示这个权限是否被允许
      <proper-signing-keyset>里的 identifier 即<keysets>中 identifier 的值,标明 app 使用哪个公钥
<package name="com.android.provider.telephony codePath="/system/priv-app/TelephonyProvider" nativeLibraryPath="/system/priv-app/TelephonyProvider/lib"  primaryCpuAbi="armeabi" publicFlags="805846533" privateFlags="8" ft="11e8dc5d800" it="11e8dc5d800" ut="11e8dc5d800" version="23" sharedUserId="1001">
  <sigs count="1">
    <cert index="0" key="3082..."
  </sigs>
  <perms>
    <item name="android.permission.SEND_RECEIVE_STK_INTENT" granted="true" flags="0"/>
    ...
  </perms>
  <proper-signing-keyset identifier="1" />
 </package>
  • <shared-user>
    • name:包名
    • <sigs>同<package>中
    • <perms>表示 user 所具有的权限。在开机扫描 apk 文件时,会将所有使用相同 uid 的 app 的权限手机在一起,放到这里。最后将这些权限下发给使用相同 uid 的 app。因此系统中使用相同 uid 的 app 具有一样的权限
<shared-user name="android.uid.system" userId="1000">
  <sigs count="1">
    <cert index="0"/>
  <sigs>
  <perm>
    <item name="android.permission.REAL_GET_TASK" granted="true" flags="0"/>
    ...
  </perm>
</shared-user>

文件路径:/data/system/packages.list
描述系统中存在的所有非系统自带的 APK 信息,当这些程序有变动时,PKMS 就会更新该文件
打开这个文件,可以发现每一行都是相同排列的内容:

com.android.providers.telephony 1001 0 /data/data/com.android.providers.telephony platform 3002,3004,3009,3003,3001,1021,3005,1000,2002,1015,1023,1010,1007,3006
...
com.tencent.mm 10113 0 /data/data/com.tencent.mm default 3002,3003,3001

用空格区分:

{column0} {column1} {column2} {column3} {column4} {column5}

一共有6列:

column value desc
column0 com.android.providers.telephony|com.tencent.mm 是 app 的包名,即 AndroidManifest.xml文件中定义的package内容。
column1 1001|10113 是 app 使用的 userid,如果没在AndroidManifest.xml中使用 android:sharedUserId,则app 安装时,系统自动给 app 分配 uid,以后此 app 运行便以这 UID 运行。
column2 0|0 指 app 是否处于调式模式,AndroidManifest.xml中android:debuggable指定。一般不特地指定,像比如 android studio 直接 debug 运行 app,这里就是1了。
column3 /data/data/com.android.providers.telephony|/data/data/com.tencent.mm 指 app 的数据存放路径,一般是"/data/data${package_name}"
column4 platform| default
column5 3002,3004,3009,3003,3001,1021,3005,1000,2002,1015,1023,1010,1007,3006|3002,3003,3001 app 所属于的user group,如果不属于任何 group 则为 none
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,723评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,080评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,604评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,440评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,431评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,499评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,893评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,541评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,751评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,547评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,619评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,320评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,890评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,896评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,137评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,796评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,335评论 2 342

推荐阅读更多精彩内容