首页
社区
课程
招聘
[求助]binder 利用 TokenManger疑惑
发表于: 2天前 539

[求助]binder 利用 TokenManger疑惑

2天前
539

在非特权情况下,无法直接注册服务,所以一些poc 使用tokenmanager 来获取用户自定义服务handle, 建立通信,但是我分析了一下tokenmanger 代码,主要是有createTokenget 来完成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 了呢


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//