Android 反编译处理Dex

前言

       当我们将Android项目打包上架的时候,为了提高被人反编译代码的可能性可以提取 dex 文件对代码进一步做混淆处理。  本文不对相关工具做过多的解释,不了解的可以先熟悉相关工具的使用。 

相关工具(点击直接下载)

  • jadx-gui(反编译Android应用程序的图形用户界面工具)icon-default.png?t=N7T8https://java-decompiler.github.io/
  • apktool(用于反编译和重新打包Android应用的工具)icon-default.png?t=N7T8https://apktool.org/docs/install/

  • baksmali(将Android应用程序的.dex文件反汇编Smali代码的工具)icon-default.png?t=N7T8https://bitbucket.org/JesusFreke/smali/downloads/?tab=downloads

  • BlackObfuscator (一个dex控制流混淆库)icon-default.png?t=N7T8https://github.com/CodingGay/BlackObfuscator-GUI/releases/tag/1.0.0

  • Beyond Compare(文件对比工具)icon-default.png?t=N7T8https://www.scootersoftware.com/

处理dex

增加垃圾代码

        先用 AndroidStudio 生成一堆垃圾文件,这些垃圾文件都是java文件。我们需要的是 dex 格式的文件,编译打包后可以在AndroidStudio 下方目录下获取dex文件。

 app\build\intermediates\dex\release\mergeDexRelease 

生成垃圾文件代码

拿到包含垃圾文件的 dex 文件后,再使用 baksmali 工具执行下方命令对 dex 文件进行处理得到 smali 文件。

java -jar baksmali-2.5.2.jar disassemble junkcode.dex -o junkcode

然后打开smali代码可以看见之前生成的垃圾文件。

接下来使用 apktool 工具对 需要处理的 apk 进行解包操作,可以得到解包的apk文件夹。

java -jar apktool_2.9.1.jar d app.apk -f

找到解包的smali目录,将前面的垃圾文件的smali 文件直接拷贝到 apk解包得到的相应目录下。

dex文件混淆处理

添加完垃圾文件的apk目录使用 apktool 工具进行重新打包操作。(rvv51_1705-5-6_v0.5101.0.57_vc1_crazy-teenpatti_20231215T170031_096da99efa8ac8d3280f2eb75edcf668就是上一步解包apk的目录名称)

java -jar apktool_2.9.1.jar b rvv51_1705-5-6_v0.5101.0.57_vc1_crazy-teenpatti_20231215T170031_096da99efa8ac8d3280f2eb75edcf668 -o app-new.apk

重新打包成功后可以得到一个我们名命为"app-new"名称的apk文件。

使用 jadx-gui 查看下刚刚打包出来的apk文件会发现增加进去的垃圾文件已经可以在反编译后看见了,重新打包出来的 apk 签名是有问题的,需要注意的是如果直接拿去在手机上安装会提示”安装包异常“安装失败。

到这里证明垃圾代码已经成功添加到重新打包的 apk 后,将apk修改后缀为zip格式解压出来后能够直接拿到 dex 文件。

接下来使用 BlackObfuscator-GUI 工具对 dex 进行混淆操作,BlackObfuscator-GUI 环境需要 JDK11以上才能够正常运行!

Input 要混淆的apk或者dex的路径,可点击右侧图标跳转选择
Output 输出保存的apk或者dex的路径,可点击右侧图标跳转选择
Depth 混淆深度
Rules 要混淆的包名,可换行输入多行

等待运行完成后,利用混淆库工具直接将 dex 进一步混淆,新的dex文件已经生成了。

混淆处理完成后可以得到一个我们命名为 classes.dex 的文件,按以下流程操作

  1. 将 classes.dex 文件转成 smali 文件

  2. 将 smali 文件覆盖掉 rvv51_1705-5-6_v0.5101.0.57_vc1_crazy-teenpatti_20231215T170031_096da99efa8ac8d3280f2eb75edcf668 目录下的 smali 文件

  3. 重新对 rvv51_1705-5-6_v0.5101.0.57_vc1_crazy-teenpatti_20231215T170031_096da99efa8ac8d3280f2eb75edcf668 打包操作。

Apk 重新签名

        使用 apksigner 工具对 dex混淆处理后的apk文件进行重签名处理,不能使用 jarsigner 进行签名操作,虽然也能签名成功但仅仅只有v1签名,这样重签后的操作也是无法安装成功运行的。

        apksigner 路径在 C:\Users\lmf\AppData\Local\Android\Sdk\build-tools\xx.x.x (xx.x.x 表示版本),这里使用的my.keystore 签名是我测试生成的签名,正常应该是使用原本 apk 的签名进行重签操作。

apksigner sign --ks my.keystore --out app-new-signed.apk --v2-signing-enabled true --v3-signing-enabled true app-new-2.apk

运行命令后成功得到了一个新的apk文件,这个文件就是重签后的apk。将重签后的apk和未签名的apk进行对比可以发现,签名验证成功了。

查看一下混淆签名后的代码

到这一步Apk就可以正常在手机上安装了!

总结

        本文简单介绍了如何对apk文件进行混淆处理,处理dex也是借助第三方混淆库工具。这种方式是在编译打包后去处理的dex,你也可以用插桩的方式在项目打包编译的时候对dex做一些处理操作。如果你需要修改dex内的代码逻辑或者是原本代码内增加逻辑则需要修改 smali 代码。

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

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

相关文章

池化层解析:新手也能理解 PyTorch 中的核心组件

目录 torch.nn详解 nn.MaxPool1d nn.MaxPool2d nn.MaxPool3d nn.MaxUnpool1d nn.MaxUnpool2d nn.MaxUnpool3d nn.AvgPool1d nn.AvgPool2d nn.AvgPool3d nn.FractionalMaxPool2d nn.FractionalMaxPool3d nn.LPPool1d nn.LPPool2d nn.AdaptiveMaxPool1d nn.Adapt…

计算机基础面试题 |05.精选计算机基础面试题

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

基本类型和包装类、基本类型和字符串之间的转换

基本类型和包装类之间的转换 基本类型和包装类之间经常需要互相转换,以 Integer 为例(其他几个包装类的操作雷同哦): 在 JDK1.5 引入自动装箱和拆箱的机制后,包装类和基本类型之间的转换就更加轻松便利了。 那什么是…

CMake入门教程【基础篇】CMake+Visual Studio2022构建C++项目

文章目录 1.概述2.Visual Studio 2022简介3.安装Visual Studio 20224.安装CMake5.创建CMake项目6. 构建项目 1.概述 CMake和Visual Studio 2022结合 在现代软件开发中,CMake和Visual Studio 2022的结合提供了一个强大的环境,用于构建和管理各种规模的C项…

外汇天眼:不懂、不熟悉的交易,避而远之!

在市场中很多人都想表达一句:真的是感觉自己学得越多,就越迷茫。 不管是做交易还是做别的行业好像都是在刚入行的时候兴致勃勃,兴趣满满,什么都不懂但却很容易就能尝到一些甜头,这样就就很大程度上激励了自己&#xf…

Maven 整理(含面试题)

Maven是Java 项目必备,Maven 主要服务于基于Java平台的项目构建、依赖管理和项目信息管理。项目构建工具 、更好的管理依赖 目录 Maven安装与运行maven 重要知识点面试题 Maven安装与运行 Maven 是一个项目管理工具,可以对 Java 项目进行构建、依赖管理…

Axure医疗-住院板块,住院患者原型预览,新增医护人员原型预览,新增病房原型预览,选择床位原型预览,主治医生原型预览,主治医生医嘱原型预览

目录 一.医疗项目原型图-----住院板块 1.1 住院板块原型预览 1.2 新增住院患者原型预览 1.3 新增医护人员原型预览 1.4 新增病房原型预览 1.5 选择床位原型预览 1.6 主治医生原型预览 1.7 主治医生医嘱原型预览 1.8 主治医生查看患者报告原型预览 1.9 护士原型预…

【项目问题解决】参数过滤器实现代码及相关问题

目录 【项目问题解决】参数过滤器实现代码及相关问题 1.前言2.代码实现2.1常量类2.2过滤器方法2.3 注意 3.总结4.参考 文章所属专区 项目问题解决 1.前言 参数过滤器实现代码及相关问题 2.代码实现 2.1常量类 Component public class ProjectConstants {public static St…

山海鲸可视化软件的优势:数据整合、可视化与个性化定制

随着科技的快速发展,企业数字化转型已成为必然趋势。而对于一些本身没有开发优势或非技术型企业,数字化产品的选择就成为重中之重。作为山海鲸可视化软件的开发者,我们深知这一点,对于企业来说,能选择一个产品一定要有…

C# Onnx yolov8 竹签计数、一次性筷子计数

目录 效果 模型信息 项目 代码 数据集 下载 C# Onnx yolov8 竹签计数、一次性筷子计数 效果 模型信息 Model Properties ------------------------- date:2024-01-03T08:55:22.768617 author:Ultralytics task:detect license&#x…

并发编程下的集合:数组寻址、LinkedList、HashMap、ConcurrentHashMap

数组如何寻址 a[n]起始地址(n*字节数) 译&#xff1a;a[2]100(2*4) 2为下标、4为int类型字段占四个字节 LinkedList LinkedList为双向链表结构&#xff0c;链表结构又分为单向、双向、以及循环。 // 双向链表 private static class Node<E> {E item;Node<E> nex…

vscode中增加参数的一个方法

1 在settings.json 文件中增加参数 2. 在参数中配置 这里也是ok的

【Mybatis】深度解析MyBatis中#和$的差异

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a; Mybatis ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 #&#xff08;预编译&#xff09;&#xff1a; $&#xff08;直接拼接&#xff09;&#xff1a; 结语 我的其他博客 前言…

【unity插件】推荐一款开源的Unity网格破碎插件,实现在Unity中展示可破坏的墙壁的——unity-fracture

最终效果 地址 https://github.com/ElasticSea/unity-fracture 介绍 FractureThis.cs 脚本获取其游戏对象中的所有网格并合并它们。这个全局网格被发送到这里 nvblast &#xff0c;以分解成块。块的内部部分为要应用的材料生成了新的 UV。原始游戏对象被隐藏&#xff0c;每个…

提升三维模型数据的几何坐标纠正速度效率具体技术方法

提升三维模型数据的几何坐标纠正速度效率具体技术方法 根据搜索结果&#xff0c;以下是提升倾斜摄影三维模型数据的几何坐标纠正和三维重建速度的具体技术方法&#xff1a; 1、增加控制点&#xff1a;通过增加控制点数量可以提高几何坐标精度。控制点是已知地面坐标的点&#…

微信公众号内网穿透本地调试微信授权

微信公众号内网穿透本地调试一直以来都比较麻烦 怕自己忘记&#xff0c; 记录一下 准备 natapp获取一个域名隧道下载nginx配置微信公众号web网页授权域名 1.natapp获取一个域名隧道 在natapp官网&#xff08;https://natapp.cn/&#xff09;进行注册登录后&#xff0c;进入…

ES6 class详解

✨ 专栏介绍 在现代Web开发中&#xff0c;JavaScript已经成为了不可或缺的一部分。它不仅可以为网页增加交互性和动态性&#xff0c;还可以在后端开发中使用Node.js构建高效的服务器端应用程序。作为一种灵活且易学的脚本语言&#xff0c;JavaScript具有广泛的应用场景&#x…

关于“Python”的核心知识点整理大全58

目录 19.2.3 注销 1. 注销URL urls.py 2. 视图函数logout_view() views.py 3. 链接到注销视图 base.html 19.2.4 注册页面 1. 注册页面的URL模式 urls.py 2. 视图函数register() views.py 3. 注册模板 register.html 4. 链接到注册页面 base.html 注意 19.3 …

1.2作业

温湿度数据通过中断处理显示到数码管中 main.c #include "spi.h"#include"si7006.h"int main(){int i0,j0,m0,n0;int num[10] {0xFC,0x60,0xDA,0xF2,0x66,0xB6,0x3E,0xE0,0xFE,0xF6};SPI_init();unsigned short hum;short tem;//进行si7006的初始化si700…

计算机网络 VLAN

路由器将多个局域网连接起来&#xff0c;而交换机将一个局域网里的设备连接起来。 路由器的端口分配局域网的网段&#xff08;子网网段&#xff09;&#xff0c;局域网的内部设备的ip都在这个网段里&#xff0c;再由交换机将数据派发到目的设备&#xff0c;交换机是按照MAC地址…