-
-
[原创]利用root权限盗用AndroidKeystore中其他APP的密钥
-
发表于:
2017-11-22 13:02
8399
-
[原创]利用root权限盗用AndroidKeystore中其他APP的密钥
弄这个主要是为了篡改QQ的计步数据文件files/step.info
,之前这个文件是加密的,但是密钥是写在代码里,后来QQ改变了方法,使用签名files/stepSign.info
对step.info
进行校验。盗用QQ的step_info
密钥可以篡改step.info
并生成相应的签名文件stepSign.info
。步数修改器
把结论写在前面。
在AndroidKeystore中,每个APP有自己的密钥命名空间,APP1中的TestKey
和APP2中的TestKey
是不同的。在/data/misc/keystore/user_x/
目录下有各个APP的密钥条目,如10174_USRPKEY_step_info
,其中前面的10174
是APP的UID,step_info
是密钥的别名(alias)。在root的手机上,通过文件的复制,更改密钥条目文件的UID,就可以盗用其他APP的密钥条目。
首先介绍一下什么是AndroidKeystore
。
详情请参考Android密钥库系统
列出条目
签署数据
验证数据
AndroidKeystore的数据存储在/data/misc/keystore/user_x/
目录下。
.masterkey
是AndroidKeystore的主密钥。10174_USRCERT_step_info
和10174_USRPKEY_step_info
是APP(QQ)生成的密钥和证书,其中10174
是APP的UID,step_info
是密钥的别名(alias)。
AndroidKeystore和其他Android服务一样,分为Java层和native层,其native层主要在/platform/system/security/keystore/keystore.cpp
中实现。
首先AndroidKeystore利用/dev/urandom
获取随机性。
AndroidKeystore的初始化函数如下:
初始化的整个过程是:1. generateMasterKey
函数利用/dev/urandom
随机生成mMasterKey
和mSalt
;2. writeMasterKey
函数根据pw
(解锁密码?)和mSalt
生成一个AES加密密钥,对mMasterKey
和mSalt
进行加密;3. setupMasterKeys
函数根据mMasterKey
设置mMasterKeyEncryption
和mMasterKeyDecryption
。也就是这个mMasterKey
是用来加密或解密APP生成或者导入的密钥。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课