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

程序员IT工场:cxyITgc 程序员IT工场:cxyITgc     2023-01-14     461

关键词:

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

这个项目是「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,发大财,行大运。

字节前端终于开源!吹爆!(代码片段)

...,前端同学的福音大家好,我是鱼皮。最近,字节跳动的抖音前端技术团队开源了一款企业级应用设计系统SemiDesign 。这也是他们团队在GitHub上首次公开的项目,短短几天,就收获了3.6k个star。GitHub开源仓库老... 查看详情

一款无惧“魔改”的设计系统开源了,已支持字节跳动4000多个项目

...开发要对设计系统的组件库进行各种魔改和封装,对程序员来说,不仅开发成本高,后期维护也比较困难。现在,一款名为ArcoDesign的全新开源设计系统或将打破上述困局。ArcoDesign的开发者、字节跳动GIPUED和前端... 查看详情

字节跳动开源的,运行在macos上,专注于移动端研发的工具链应用

...,精彩不断。码农周刊是什么?码农周刊是一份专为广大程序员、编程爱好者们打造的IT技术周刊。每周发送。2013年9月12日创刊至今,已发送300多期,订阅用户超20万。专业、简单、有用,是我们一直坚持的办刊宗旨。一路走来... 查看详情

字节跳动开源数据集成引擎bitsail的演进历程与能力解析

导读BitSail是字节跳动开源数据集成引擎,支持多种异构数据源间的数据同步,并提供离线、实时、全量、增量场景下全域数据集成解决方案,目前支撑了字节内部和火山引擎多个客户的数据集成需求。经过字节跳动各大业务线... 查看详情

又一ai大牛离职返校!前字节跳动ailab总监李磊加入ucsb执教

...木木出品| AI科技大本营(ID:rgznai100)近日,字节跳动AI实验室总监李磊离职,入职加州大学圣巴巴拉分校(UCSB)担任助理教授,重返学术界。去年,该实验室的AI掌门人马维英从字节离开后,... 查看详情

又一ai大牛离职返校!前字节跳动ailab总监李磊加入ucsb执教

...木木出品| AI科技大本营(ID:rgznai100)近日,字节跳动AI实验室总监李磊离职,入职加州大学圣巴巴拉分校(UCSB)担任副教授,重返学术界。去年,该实验室的AI掌门人马维英从字节离开后,加... 查看详情

一经开源就火了,字节跳动开源微服务中间件cloudwego(代码片段)

👇👇关注后回复 “进群” ,拉你进程序员交流群👇👇开源最前线(ID:OpenSourceTop)猿妹整编综合自:https://github.com/cloudwego/kitex9月8日,字节跳动正式宣布开源CloudWeGo。这是一套以Go语言... 查看详情

字节跳动开源最新gan压缩算法,算力消耗可减少至1/46(代码片段)

字节跳动近期开源了一项代号为OMGD的压缩技术。这是字节自研的GAN(生成对抗网络)压缩算法,在保证生成效果不变的前提下,算力消耗最低可以减少到原来的1/46,相比之前业界的最佳压缩效果提升一倍多。... 查看详情

字节跳动开源隐私合规检测工具appshark

一、背景随着移动互联网的高速发展,人们的生产生活也逐渐从PC电脑端转移到手机等移动端,各类移动App也如雨后春笋般产生。受限于代码的开发质量等原因,App中或多或少的会存在安全漏洞或因开发设计不谨慎引入的违规收... 查看详情

速度超快!字节跳动开源序列推理引擎lightseq(代码片段)

这应该是业界第一款完整支持Transformer、GPT等多种模型高速推理的开源引擎。2017年Google提出了Transformer[1]模型,之后在它基础上诞生了许多优秀的预训练语言模型和机器翻译模型,如BERT[2]、GPT系列[13]等,不断刷新着众多自然语... 查看详情

字节跳动开源序列推理引擎lightseq(代码片段)

背景介绍2017年Google提出了Transformer[1]模型,之后在它基础上诞生了许多优秀的预训练语言模型和机器翻译模型,如BERT[2]、GPT系列[13]等,不断刷新着众多自然语言处理任务的能力水平。与此同时,这些模型的参数... 查看详情

字节跳动开源序列推理引擎lightseq(代码片段)

背景介绍2017年Google提出了Transformer[1]模型,之后在它基础上诞生了许多优秀的预训练语言模型和机器翻译模型,如BERT[2]、GPT系列[13]等,不断刷新着众多自然语言处理任务的能力水平。与此同时,这些模型的参数... 查看详情

字节跳动开源bitsail,助力企业走好数字化“第一步”

10月26日,字节跳动宣布开源BitSail数据集成引擎。BitSail意为“数据航行”,可支持二十余种异构数据源间的数据同步,提供离线、实时、全量、增量场景下的全域数据集成解决方案,从而打通困扰企业数字化转型... 查看详情

字节跳动开源的一个golang微服务http框架

【公众号回复“1024”,免费领取程序员赚钱实操经验】大家好,我是章鱼猫。今天推荐的这个项目是「Hertz」,是一个Golang微服务HTTP框架,在设计之初参考了其他开源框架fasthttp、gin、echo的优势,并结合字节... 查看详情

字节跳动最新开源!昆明java工程师招聘

Java基础JDK和JRE有什么区别?==和equals的区别是什么?两个对象的hashCode()相同,则equals()也一定为true,对吗?final在java中有什么作用?java中的Math.round(-1.5)等于多少?String属于基础的数据类型吗ÿ... 查看详情

揭秘字节跳动云原生sparkhistory服务uiservice

本文是字节跳动数据平台数据引擎SparkSQL团队针对SparkHistoryServer(SHS)的优化实践分享。*文|字节跳动数据平台—数据引擎—SparkSQL团队*在字节跳动内部,我们实现了一套全新的云原生SparkHistory服务——UIService,相比开源的SHS,UIServ... 查看详情

内含福利|csdn携手字节跳动:云原生meetup北京站报名热烈启动,1月8日见!

...抽奖中奖者,皆可获得相应礼品:价值98元的《新程序员》杂志、CSDN定制t恤、多啦A梦马克以及字节跳动提供的CloudWeGo周边等.....CSDNMeetup社区此次与字节跳动携手举办的Meetup为CSDN系列技术沙龙的第四站,未来CSDN将在... 查看详情

内含福利|csdn携手字节跳动:云原生meetup北京站报名热烈启动,1月8日见!

...抽奖中奖者,皆可获得相应礼品:价值98元的《新程序员》杂志、CSDN定制t恤、多啦A梦马克以及字节跳动提供的CloudWeGo周边等.....CSDNMeetup社区此次与字节跳动携手举办的Meetup为CSDN系列技术沙龙的第四站,未来CSDN将在... 查看详情