-
-
[求助]binder 利用 TokenManger疑惑
-
发表于: 2天前 539
-
在非特权情况下,无法直接注册服务,所以一些poc 使用tokenmanager 来获取用户自定义服务handle, 建立通信,但是我分析了一下tokenmanger 代码,主要是有createToken
和get
来完成pushlish 和grab handle 的
createToken
主要代码直接从参数store 转为Interface
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | TokenInterface interface = generateToken(store); - > TokenManager::TokenInterface TokenManager::generateToken(const sp<IBase> &interface) { uint64_t id = + + mTokenIndex; std::array<uint8_t, EVP_MAX_MD_SIZE> hmac; uint32_t hmacSize; uint8_t * hmacOut = HMAC(EVP_sha256(), mKey.data(), mKey.size(), (uint8_t * ) & id , sizeof( id ), hmac.data(), &hmacSize); if (hmacOut = = nullptr || hmacOut ! = hmac.data()) { ALOGE( "Generating token failed, got %p." , hmacOut); return { nullptr, TOKEN_ID_NONE, {} }; } / / only care about the first HMAC_SIZE bytes of the HMAC const hidl_vec<uint8_t> &token = makeToken( id , hmac.data(), hmacSize); return { interface, id , token }; } 其中 struct TokenInterface { sp<IBase> interface; uint64_t id ; hidl_vec<uint8_t> token; / / First eight bytes are tokenId. Remaining bytes are hmac. }; 接着 uint64_t id = getTokenId(interface.token); ... mMap[ id ] = interface; |
而get
是直接从mMap 中找到token 对应interface
所以这边怎么就获取fake service 的handle 了呢
赞赏
他的文章
- [求助]binder 利用 TokenManger疑惑 540
- [求助]调试安卓内核 1660
- [求助] pixel 8pro 救砖 4221
看原图
赞赏
雪币:
留言: