iofomo 最近的时间轴更新
iofomo

iofomo

开源,分享,探索,赋能
🏢  数字锋芒 / 创始人
V2EX 第 665664 号会员,加入于 2023-12-04 23:39:21 +08:00
专注移动端和桌面端虚拟化,自动化群控方向;同时关注开发工具效率提升。
iofomo 最近回复了
5 天前
回复了 iofomo 创建的主题 Android [Android] 深入 Binder 拦截
@xingda920813 稳定性还可以,特定场景使用的,用户量巨大的 ToC 应用自然不会作为主功能,通常为辅助的安全检测,数据采集的独立功能,就算异常也不会影响业务
5 天前
回复了 iofomo 创建的主题 Android [Android] 深入 Binder 拦截
@beriru 如果只是想要获得调用方法是可以使用这个全局的,如果需要拿到 Binder 通信来回的数据,并且进行修改,则做不到
5 天前
回复了 iofomo 创建的主题 Android [Android] 深入 Binder 拦截
@beriru
10 天前
回复了 iofomo 创建的主题 Android [Android] 深入 Binder 拦截
@beasonshu 一般容器,沙箱,虚拟化,隐私保护,安全防护等产品会用到,以及研究某些应用使用了那些系统接口的特性功能等
10 天前
回复了 iofomo 创建的主题 Android [Android] 深入 Binder 拦截
@nnegier 是的,你的问题很赞。
一次 Binder 通信数据有最大的 1M 限制( Android 源码默认),如果超过这个大小了,在 Binder 通信中会有多次的数据交互,比如常见的 IPackageManager 的 getInstalledPackages 就会碰到。
这时底层通信拦截的处理办法是:
我们在首次调用的时候 cache 住 binder_object 的 handle ( binder_txn_st* txn 中的 handle ),当本次 binder 通信为结束,但是 Code 为 1 ( FIRST_CALL_TRANSACTION ),接口方法 Code 均大于 1 ( binder_txn_st* txn 中的 Code ),此时匹配 handle 值于之前 cache 的 handle 值是否一致,一致则解析。
如 cache:
unsigned int handle = target_get_binder_obj_ptr(txn);
if (0 < handle) {
TlsCache* poolItem = TlsUtils::getPool();
if (poolItem) {
poolItem->setInt(handle);// TODO save cache
} else {
// TODO cleat
}
}
如:解析
if (token.unequal(__PACKAGE_LENGTH__, __PACKAGE_HASH__)) {
if (FIRST_CALL_TRANSACTION == txn->code) {
TlsCache *tlsPool = TlsUtils::getPool();
if (tlsPool->getInt() == txn->target.handle) {
// TODO
}
}
}
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   930 人在线   最高记录 6543   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 14ms · UTC 23:16 · PVG 07:16 · LAX 16:16 · JFK 19:16
Developed with CodeLauncher
♥ Do have faith in what you're doing.