牛逼,字节跳动又一开源大作!程序员的福音!

在这里插入图片描述

最近有位读者私信,说能不能推荐一些大厂使用的安卓类开源项目,想了下,读者中也有不少搞安卓开发的,所以今天给大家推荐一个大厂出品的安卓开源项目。

这个项目是「ByteHook」,目前在 GitHub 收获了 670 Star,是一个针对 Android App 的 PLT hook 框架。

这个框架也是最近才开源,字节跳动团队大多数 Android App 开发在线上使用了这个项目作为方案,对于创业公司或者安卓开发者是一个学习参考,它提供了一个 Android 应用程序使用 PLT 钩子的整体方案,而可选择替换地址。

我们平常玩的抖音、今日头条、西瓜视频 APP ,字节跳动在在线上环境中使用了ByteHook作为PLT钩子方案。

这个框架主要有以下特征:

支持 Android 4.1 - 12 (API 级别 16 - 31)。
支持 armeabi-v7a、arm64-v8a、x86 和 x86_64。
对同一个函数的多个hook和unhook相互不冲突。
可以勾上进程中的个别、部分或全部的动态库。
自动钩子新加载的动态库。
自动避免代理函数之间的循环调用和循环调用。
代理功能中支持回溯调用栈。
使用 MIT 许可授权。
如何上手使用?

  1. 在build.gradle中增加依赖
    所有项目{
    存储库{
    MavenCentral()
    }
    }
    安卓{
    构建功能{
    预制真
    }
    }

依赖{
实现’ com.bytedance:bytehook:1.0.2 ’
}
2.在 CMakeLists.txt 中增加依赖
find_package(bytehook REQUIRED CONFIG)

add_library(mylib SHARED mylib.c)
target_link_libraries(mylib bytehook::bytehook)

  1. 指定一个或多个你需要的 ABI
    android {
    defaultConfig {
    ndk {
    abiFilters ‘armeabi-v7a’, ‘arm64-v8a’, ‘x86’, ‘x86_64’
    }
    }
    }

  2. 增加打包选项

  3. 初始化
    import com.bytedance.android.bytehook.ByteHook;

public class MySdk {
public static synchronized void init() {
ByteHook.init();
}
}

  1. 钩和解钩
    bytehook_stub_t bytehook_hook_single(
    const char *caller_path_name,
    const char *callee_path_name,
    const char *sym_name,
    void *new_func,
    bytehook_hooked_t hooked,
    void *hooked_arg);

bytehook_stub_t bytehook_hook_partial(
bytehook_caller_allow_filter_t caller_allow_filter,
void *caller_allow_filter_arg,
const char *callee_path_name,
const char *sym_name,
void *new_func,
bytehook_hooked_t hooked,
void *hooked_arg);

bytehook_stub_t bytehook_hook_all(
const char *callee_path_name,
const char *sym_name,
void *new_func,
bytehook_hooked_t hooked,
void *hooked_arg);

int bytehook_unhook(bytehook_stub_t stub);

那么这个框架的原理是什么样的?

ELF 文件的起始处,有一个固定格式的定长的文件头。ELF 文件头中包含了 SHT和 PHT在当前 ELF 文件中的起始位置和长度,SHT 和 PHT 分别描述了 ELF 的“连接视图”和“执行视图”的基本信息。

图片

linker(动态链接器)

图片

00
relocation 完成之后的函数调用关系如下

图片

ByteHook 中另外几个关键模块

图片

最后,为了鼓励鼓励,不点赞来一下吗,祝各位程序员开发无 Bug,发大财,行大运。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/34922.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

字节跳动开源又一力作

【公众号回复 “1024”&#xff0c;免费领取程序员赚钱实操经验】 大家好&#xff0c;我是章鱼猫。 今天给大家推荐的这个项目是「BoostMultiDex」&#xff0c;一个用于 Android 低版本设备&#xff08;4.X 及以下&#xff0c;SDK < 21&#xff09;快速加载多 DEX 的解决方案…

炸裂!万字长文拿下HTTP 我在字节跳动等你!

本文将从以下几个方面进行分享。其中包括HTTP发展史&#xff0c;HTTP缓存代理机制&#xff0c;常用的web攻击&#xff0c;HTTP和HTTPS的流量识别&#xff0c;网络协议学习的工具推荐以及高频HTTP与HTTPS的高频面试题题解等&#xff0c;开工。ps(如果需要带目录pdf&#xff0c;私…

字节跳动青训营--前端day2

文章目录 前言一、css1. css的组成2. css三种使用方式3.css的工作方式 二、 css选择器Selector1. 选择元素的方式2. 伪类&#xff08;pseudo-classes&#xff09;2.1 状态伪类2.1 结构伪类 3.通过组合选择元素3.1 直接组合3.2 元素组合的拓展 4. 选择器的特异度&#xff08;Spe…

字节跳动第七期技术训练营——“抓到你了”项目

github地址 一. 项目要求&#xff1a; 作业名称 《抓到你了——具备安全防护能力的账号系统》 产品形态 具有安全风控防护能力的账号注册登录系统 产品功能介绍 设计并开发一个登录注册系统&#xff0c;可以支持注册、登录和登出或注销的基本功能&#xff0c;另外也需要…

字节跳动青训营--前端day8

文章目录 前言一、CSR&#xff0c;SSR&#xff0c;SSG1. CSR2. SSR3. SSG4. SSR&#xff0c;SSG的优势利于SEO更短的首屏时间 二、什么是Next.js三、Next.js客户端开发1. Api2. CSS Modules3. Layout4. 文件式路由 四、Next.js服务端开发 前言 仅以此文章记录学习历程。 一、C…

孙叫兽CSDN社区云----WebIT已创建,欢迎大家前端全栈小伙伴踊跃加入

目录 社区云是什么&#xff1f; 创建CSDN社区云WebIT的目的 推荐分享的技术点&#xff08;如下图所示&#xff09; 社区成员权益 版主权益 管理员权益 WebIT社区云积分规则 WebIT优质版主及管理员可以申请直播分享前端技术 WebIT社区云将为社区运营者提供&#xff1a; …

字节跳动在Rust高性能编程探索和实践

本文整理自字节跳动火山引擎基础架构服务框架工程师吴迪于Qcon大会上的分享内容。 嘉宾及内容介绍 本次分享内容主要分为以下三个部分&#xff1a; 我们为什么选择了 Rust 语言&#xff1b;我们做了什么&#xff1b;展望未来&#xff1a;机遇与挑战。 我们为什么选择了 Rust 语…

字节跳动自研 OpenBMC 方案成功上线,STE 团队工程师都做了哪些事?

OpenBMC 是 Linux Foundation 组织里的一个项目&#xff0c;也是目前开源 BMC 里方案最成熟、社区最活跃的项目。日前&#xff0c;我们得知字节跳动系统部 STE 团队自研的 OpenBMC&#xff0c;已在内部成功上线&#xff0c;并稳定运行了两个多月。这也是字节跳动首次正式上线并…

月薪11K!95后房产经纪人转行当程序员:工资过万不难,精神压力也不大

时代在不断的发展&#xff0c;人们对“衣食住行”的要求越来越高&#xff0c;而这其中人们对于“住”是格外的关注。 买房的人希望自己能买到合适的房子&#xff0c;而卖房的人也担心自己的房子卖便宜了&#xff0c;所以越来越多的人在买房卖房这一块儿很难抉择&#xff0c;因…

chatgpt赋能python:Python怎么装Pip

Python怎么装Pip Python是一种非常流行的编程语言&#xff0c;可以用于各种用途&#xff0c;包括网页开发、数据分析、科学计算等。如果你是一个Python编程新手&#xff0c;你可能不知道如何安装和使用Python包。Pip是Python包管理系统&#xff0c;可以帮助你安装和管理Python…

赛事报名启动丨百度Apollo星火自动驾驶大赛开始报名啦!

作为汽车智能化、网联化的关键环节&#xff0c;自动驾驶成为全球科技界、产业界竞争的新赛道。随着人工智能、5G通信、激光雷达、高精地图等多项技术不断完善&#xff0c;自动驾驶的判断力和理解力得到了显著提升。为了推动自动驾驶技术的发展、加快人工智能技术的迭代&#xf…

RocketMQ 在同程旅行的落地实践

本文作者&#xff1a;刘树东 - 同程艺龙技术专家 01/使用概况 同程旅行选择RocketMQ主要基于以下几个方面的考虑&#xff1a; 技术栈&#xff1a;公司主要以 Java 开发为主&#xff0c;因此我们倾向于选择一款用 Java 实现的MQ&#xff0c;且没有任何第三方依赖为最佳&#…

火爆全网的个人行程卡纪念版!3秒教你快速生成!

大家好 咱们直接开门见山&#xff01; 3 秒生成你的专属行程卡纪念版 用下面这款小工具&#xff0c;只需要 3 秒&#xff0c;就能帮大家生成【行程卡纪念版】。 用一张图片记录你三年去过的地方。 回顾过去三年&#xff0c;我们发现许多美好的回忆已经深深地留在了我们的心中。…

CAN网络管理唤醒功能

采用1043的can 芯片:工作模式 – 正常模式 – 具有 INH 输出以及本地和远程唤醒请求功能的待机模式 – 具有 INH 输出以及本地和远程唤醒请求的低功耗睡眠模式 状态切换流程图: CAN唤醒的需求: 唤醒请求(Wake Up Request) 唤醒请求可分为两种: ● 主动唤醒请求:来自模…

(智能车比赛)基于 ADS 逐飞库 英飞凌 TC264 377系列 的多核使用经验

多核并行主要有两个方面 一&#xff0c;程序&#xff0c;变量储存地址设置 二&#xff0c;运行核选择 一、内存分配 概念及过程描述 尽量将不同的功能划分为各个模块&#xff0c;然后交给不同的cpu运行。 或者说不同的cpu负责运行不同的功能&#xff0c;cpu之间以少量的参…

CK-UR05-US桌面式超高频RFID发卡器开发手册之USB控制命令格式

CK-UR05-US桌面式超高频RFID发卡器支持USB控制命令格式&#xff0c;本文重点就此格式展开说明&#xff01; CK-UR05-US桌面式超高频RFID发卡器 1、取版本号(GetReaderVersion) 功能:取读写器的硬件、软件版本 命令码: 02H 命令参数:无 命令包: 『40H 02H 02H BCH』 举例: 如…

RFID课程设计-图书管理系统用户端设计

RFID课程设计-图书管理系统用户端设计课程设计题目课程设计任务内容题目设计基本原理NFC开发概述标签调度系统如何将 NFC 标签映射到 MIME 类型和 URI如何将 NFC 标签分发到应用在 Android 清单中请求 NFC 访问权限过滤 NFC IntentACTION_NDEF_DISCOVEREDACTION_TAG_DISCOVERED…

Linux炫酷终端仪表盘

最近发现了一个适合装逼的终端命令&#xff0c;会在终端显示一个炫酷的仪表盘&#xff08;提示&#xff1a;终端全屏显示效果才好&#xff09; 先上图 首先安装三个软件 sudo apt-get install node nodejs-bin sudo apt install nodejs-legacy sudo apt install git 待会会下…

【袋鼠云】标签系统

文章目录 客户画像标签建设的演进1. 业务单元独立作战2. 离线数仓统一建设3. 实时数据多维补充4. 标签产品化管理5. 数据智能化管理 标签体系设计与加工一、标签体系设计1. 数据梳理2. 基于OLP模型体系化梳理标签3. 定义标签与加工口径 二、标签模型设计三、标签配置1. 根据业务…

AI最新开源:LMSYS Org开源LongChat、法律大语言模型ChatLaw、中文医疗对话模型扁鹊

一周SOTA&#xff1a;LMSYS Org开源LongChat、法律大语言模型ChatLaw、中文医疗对话模型扁鹊 文章目录 1. LMSYS Org发布LongChat&#xff0c;上下文碾压64K开源模型2. 北大团队发布法律大模型 ChatLaw3. 扁鹊&#xff1a;指令与多轮问询对话联合微调的医疗对话大模型 1. LMSY…