APK修改神器:插桩工具 DexInjector

Android修改实战教程(乐影软件) 一、 准备工作: 这次我们来学习一个简单的修改练习 1.MT管理器 2.未修改的安装包:链接:https://pan.baidu.com/s/1zXaF_w9_4SVqAM9_5buw-Q 提取码:p69v 未修改前: 二、下面教程开始 1.打开mt找到安装包然后点击查看,然后点击dex结尾的文件这些文件是安卓开发应用的java文件,选择Dex 编辑器++。 2.进行搜索:搜索内容isvip类型为代码 这都是常规操作了,通过搜索代码来寻找要修改的类。 3.点击UserInfo下那行代码,然后查看 阅读详情

本文介绍了一个针对Dex进行插桩的工具,讲解了一下直接修改Dalvik字节码和Dex文件时遇到的问题和解决方法

作者:字节跳动终端技术—— 李言

背景

线下场景中,我们经常需要在APK中插入一些检测代码,来实现一些记录方法调用耗时,或者增加一些打印日志的功能。目前的常规做法都是在编译期修改class字节码达到,例如byteX提供了方便的修改class框架。

但是,编译期修改灵活性不足,对于已经编译好的apk则无能为力,无法插桩或修改。导致很多业务方都要配置独立的jenkins打包后,才能触发进步一步的测试。一次自动化测试任务有将近一半的时间都消耗在打包过程中。

为了解决这个痛点,我们开发了一套直接针对APK(dex)插桩的工具,DexInjector。主要用来做一些日志、性能方面的数据采集和注入一些第三方工具,避免业务方二次打包,节省测试时间。

该方案已经用在日志旁路、网络数据抓取、第三方库注入,用户信息注入、日常调试等。

工具目前可以实现:

  • 方法前插桩

  • 方法后插桩

  • 初始化插桩

技术方案调研

调研了一下市面上现有的字节码修改方案。

smali

可以通过smali 和baksmali 工具将dex文件转换成可方便阅读的smali语法文件,但是smali的工具对smali字节码的解析是通过语法解析,如果要插入一个新的代码进去对寄存器等操作没有办法实现结构化操作。

redex

redex 支持通过配置在方法前进行插桩,可以通过实现pass来完成自己的插桩功能。但是功能实现有限,使用起来比较复杂,而且在执行之后插入了一些fb自定义的代码,但Redex 提供了一套强大的字节码修改能力,后续的版本会基于redex的字节码修改能力进行完善。

dexter

dexter 工具是google开发的一个类似dexdump的工具,但其内部实现了对dex文件结构和字节码指令的一套完整的操作api,轻量简洁,对字节码的操作可以达到ASM的体验。

综合,选用dexter对dex进行操作。

方案设计

需求

根据性能防劣化和流量统计的需求,都是在一个方法的方法体内部前后插入对其他方法的调用。以网络流量统计为例,需要在 okhttp3.RealCall.getResponseWithInterceptorChain 的方法内部开头插入一个方法来获取request请求的详细数据。

Response getResponseWithInterceptorChain() throws IOException {

    com.netflow.inject.hookRealCall(this);//插入的方法

    List<Interceptor> interceptors = new ArrayList<>();

    interceptors.addAll(client.interceptors());

          //.....省略部分代码

    return chain.proceed(originalRequest);

  }

Dex 插桩

基本流程

1. Dex文件分析

先要分析Dex文件格式,将其序列化成各种数据结构,Dex文件的结构可以参照官方文档(见参考文献)

2. 字节码解析

在code 段将二进制的字节码解析成可处理的数据结构

3. 字节码构造

按照字节码规范构造字节码指令,并插入到现有字节码的序列中即可完成字节码的插入。

4. 字节码序列化

将修改后的Dex结构重新计算Index,然后将各个数据Section序列化为Dex的文件格式。

功能需求

插桩支持两种能力,在一个方法的方法体前面和后面插入一个静态方法调用。

1. 方法体前面插桩

如果被插入的方法为实例方法,则方法的第一参数为 this,随后的参数和被插入的方法一致 ,如果方法是静态方法则插入的方法定义需要和被插入的方法参数类型和个数一致,举例:

public class Tracer{

        //被插入的方法,为实例方法

        private void MethodA(int a,int b){

        }


        //被插入的方法,为静态方法

        private static void MethodB(int a,int b){

        }

}


public class Hooker{

        //插入的方法

        private static void TestHookA(Tracer this_,int a,int b){

        }


        private static void TestHookB(int a,int b){

        }
3.【Windows】安卓反编译工具(apktool、dex-tools、jd-gui 安卓反编译三件套(apktool、dex-tools、jd-gui)1.apktool.jar2.dex-tools-2.03.jd-gui 1.apktool.jar https://bitbucket.org/iBotPeaches/apktool/downloads/ 2.dex-tools-2.0 https://github.com/pxb1988/dex2jar/releases 3.jd-gui http://java-decompiler.github.io/ 网盘下载路径: 链接:http 阅读详情

相关推荐

D3Edit-CN2.0.zip

暗黑3修改器 D3Edit-CN2.0 汉化版。暗黑3修改器 D3Edit-CN2.0 汉化版

dex-tool工具:高效文件管理与编辑助手

资源下载链接为: https://pan.quark.cn/s/1bfadf00ae14 在Android应用开发中,Dex文件是一种特殊的二进制格式,它包含了应用程序的字节码,是Dalvik虚拟机或者ART运行时执行程序的基础。dex-tools是一个强大的命令行工具集,用于处理和分析Dex文件,它在Android SDK的build-tools目录下可以找到。这个工具的版本为2.1,提供了多种功能,帮助开发者进行调试、优化和理解APK的结构。 dx:这是最核心的工具,用于将Java字节码转换成Dex格式。在编译Android应用时,开发者通常会用到dx来将.jar或.dex文件打包成单一的.dex文件,以满足Dalvik或ART运行时的要求。dx支持多种输入格式,并且可以通过命令行参数进行各种配置,如优化级别、是否生成多DEX文件等。 dexdump:此工具用于打印出 Dex 文件的详细信息,包括类、方法、字段的定义以及常量池等。这对于理解Dex文件的内部结构和分析代码非常有帮助。通过输出的信息,开发者可以查看类和方法的元数据,检查是否存在混淆问题,或者进行性能优化。 dex2jar(非官方,但经常与dex-tools一起使用):虽然不是官方提供的工具,但dex2jar是将.dex文件转换为Java字节码的.jar文件的常用工具。这在逆向工程或代码分析场景中非常有用,因为它可以让开发者在Java环境中查看和操作原始的类文件。 dexopt:此工具用于对.dex文件进行优化,使其更适合Dalvik或ART运行时。优化可能包括预编译、常量合并等,以提升应用的启动速度和运行效率。在发布应用之前,通常会用到dexopt对APK进行优化。 apksigner:虽然不是直接处理.dex文件的工具,但它是签名APK的重要工具。在Android系统中,每个安装的APK都需要正确的签名才

Cadence ADE实战:1GHz VCO相位噪声仿真全流程(附PSS/Pnoise避坑指南)

本文详细介绍了在Cadence ADE环境中对1GHz VCO进行相位噪声仿真的完整流程。重点剖析了PSS(周期性稳态分析)和Pnoise(周期性噪声分析)两大核心引擎的关键参数设置与避坑指南,帮助射频与模拟IC设计者准确评估VCO性能,解决仿真不收敛、结果异常等常见问题。

rock5的博客 670

TwinCAT3 实时核异步通信:基于ADS的C++ Server/Client数据交换实战解析

本文深入解析了在TwinCAT3实时核中,如何利用ADS协议实现C++ Server与Client之间的异步数据交换。文章从核心概念入手,详细阐述了实时核、ADS通信及异步机制,并通过实战步骤指导环境搭建、路由配置、Server端服务创建与Client端请求发起,重点剖析了Req/Ind/Res/Con异步回调模型,旨在帮助开发者构建高效、非阻塞的实时工业控制应用。

purple的博客 469

ADC INL&DNL测试方法和实例

本文介绍了一种可操作的ADC INL和DNL的测试方法--直方图法(也称码密度法)。并实际使用该方法测试了两款芯片的ADC INL和DNL

APTCHIP的博客 1万+

电力市场小白必看:手把手教你用Matlab实现市场出清电价计算(附完整代码)

本文为电力市场初学者提供了使用Matlab计算市场出清电价的完整指南。通过Yalmip和Matpower工具包,详细讲解了从环境配置到模型构建、求解及结果分析的整个过程,帮助读者快速掌握节点电价计算的核心技术。

weixin_30379531的博客 73

从底层结构开始学习FPGA(7)----进位链CARRY4

进位链CARRY4在FPGA实现加减法运算时扮演了什么角色?

孤独的单刀 1万+

pt100和max31865测室温跳变比较大,会从23.04跳到23.47,23.75反复跳变超过了0.5的误差范围,在VDD和GND之间加上0.1和10的滤波电容也不行,如何解决?

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 2087

《用 R 探索医药数据科学》目录(持续更新,已超 250 万字)|订阅前说明

我们重磅推出《用 R 探索医药数据科学》专栏!本文作为专栏【订阅后首读】的核心内容,堪称开启学习之旅的 “入门钥匙”,也是整个专栏最关键的一篇指引文。文中不仅完整呈现了专栏 9 大核心篇章 + 问答板块的详细目录,更囊括了订阅后必知的核心要点 —— 从阅读设备、实操工具的使用建议,到学习路径、更新规则的清晰说明,再到问题反馈、感悟记录的实用方法,一站式帮你摸清专栏框架、找准学习方向。建议各位订阅者务必认真阅读、吃透内容,这能让你后续的学习更高效、少走弯!

MD Code 1万+

全新YOLOv11有效涨点改进专栏目录 | 本专栏持续更新500+篇内容 | 包含各种卷积、主干网络、各种注意力机制、检测头、损失函数、小目标检测改进、二次创新模块、独家创新等几百种创新点改进

YOLOv11专栏持续更新500+种创新改进方案,涵盖卷积优化、注意力机制、主干网络、Neck特征融合、检测头、小目标检测等核心模块。提供独家创新点组合方案、模型轻量化改进及最新Mamba架构融合技术,配套完整实验代码和训练参数解析。订阅用户可加入专属答疑群,获取一键运行项目支持。专栏包含YOLOv11网络结构详解、配置文件解读等入门必读内容,助力科研论文发表与模型性能提升。限时开放订阅通道,提供多种涨点改进方案组合,满足不同研究需求。

Ai缝合怪、助力小伙伴高效发论文 3998

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

上一篇: 让工程师拥有一台“超级”计算机——字节跳动客户端编译加速方案
下一篇: Python3 cpython优化 实现解释器并行
字节跳动终端技术
博客等级 码龄7年 206粉丝 52原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值