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 代码。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

IIS服务器发布PHP网站

IIS服务器,相信开发者都不会陌生,它的英文全称是Internet Information Services,是由微软公司提供的基于运行Microsoft Windows的互联网基本服务,常用于Windows系统的Web项目部署,本篇以PHP项目为例,讲解如…

使用 extract + TextMapAdapter 实现了自定义 traceId

前言 某些特定的场景,需要我们通过代码的方式实现自定义 traceId。 实现思路:通过 tracer.extract 能够构造出 SpanContext ,将构造出来的 SpanContext 作为上层节点信息,通过 asChildOf(SpanContext) 能够构造出当前的 span。 …

SpringBoot + Vue 抖音全平台项目

简介 本项目是一个短视频平台,拥有热度排行榜,热门视频,兴趣推送,关注推送,内容审核等功能。 源码下载 网盘 (访问密码: 8418) 登录/注册 首页 创作中心 架构设计 上传视频业务流程 视频推送流程 1.用户订阅分类后…

Java实现树结构(为前端实现级联菜单或者是下拉菜单接口)

Java实现树结构(为前端实现级联菜单或者是下拉菜单接口) 我们常常会遇到这样一个问题,就是前端要实现的样式是一个级联菜单或者是下拉树,如图 这样的数据接口是怎么实现的呢,是什么样子的呢? 我们可以看看 …

NodeJs - Chrome内存分析工具使用

NodeJs - Chrome内存分析工具使用 一. 前期准备二. Chrome 内存分析工具使用2.1 查看快照2.2 使用案例 一. 前期准备 我们下载好相关依赖: npm i v8-profiler-next测试代码: const v8Profiler require(v8-profiler-next) const fs require(fs)funct…

Intellij建议用String替换StringBuilder

文章目录 前言String 和 StringBuilder 性能对比String 和 StringBuilder 使用的字节码对比总结 本文收发地址 https://blog.csdn.net/CSqingchen/article/details/135324313 最新更新地址 https://gitee.com/chenjim/chenjimblog 前言 最近编码时看到 Intellij 建议使用 Stri…

2023-12-15 LeetCode每日一题(反转二叉树的奇数层)

2023-12-15每日一题 一、题目编号 2415. 反转二叉树的奇数层二、题目链接 点击跳转到题目位置 三、题目描述 给你一棵 完美 二叉树的根节点 root ,请你反转这棵树中每个 奇数 层的节点值。 例如,假设第 3 层的节点值是 [2,1,3,4,7,11,29,18] &…

认识数据挖掘

随着数据库技术的迅速发展及数据库管理系统的广泛应用,人们积累的数据越来越多。激增的数据背后隐藏着许多重要的信息,人们希望能够对其进行更高层次的分析,以便更好地利用这些数据。目前的数据库系统可以高效地实现数据的录入、查询、统计等…

操作系统(Operator System)

这里写目录标题 1. 什么是操作系统2. 主要功能3. 计算机的层状结构4. 什么叫做管理5. 总结6. 为什么要有操作系统7. 最后 1. 什么是操作系统 操作系统(英语:Operating System,缩写:OS)是一组主管并控制计算机操作、运…

Debezium日常分享系列之:向 Debezium 连接器发送信号

Debezium日常分享系列之:向 Debezium 连接器发送信号 一、概述二、激活源信号通道三、信令数据集合的结构四、创建信令数据集合五、激活kafka信号通道六、数据格式七、激活JMX信号通道八、自定义信令通道九、Debezium 核心模块依赖项十、部署自定义信令通道十一、信…

【理论】STM32定时器时间计算公式 +【实践】TIM中断1s计时一次

前言:定时器TIM的详细知识点见我的博文:11.TIM定时中断-CSDN博客 STM32定时器时间计算公式 公式解释: ARR(TIM_Period):自动重装载值,是定时器溢出前的计数值 PSC(TIM_Prescaler&…

初始SpringBoot:详解特性和结构

🏡浩泽学编程:个人主页 🔥 推荐专栏:《深入浅出SpringBoot》《java项目分享》 《RabbitMQ》《Spring》《SpringMVC》 🛸学无止境,不骄不躁,知行合一 文章目录 前言一、SpringBoot…

骑砍MOD天芒传奇-前言

基于少年包青天3-天芒传奇开发的MOD,故事发生在北宋仁宗年间,玩家需要代替包拯寻找天芒,最终完成统一大业.开局可尝试使用暴雨梨花针神器. MOD下载地址:霸王•吕布 / pellets of legend GitCodehttps://gitcode.net/qq_35829452/1-mod 效果演示:骑砍1战团mod天芒传奇-重出江湖…

车载电子电器架构 —— 电子电气系统功能开发

车载电子电器架构 —— 电子电气系统功能开发 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何…

js遍历后端返回的集合将条件相同的放入同一个数组内

项目场景: echarts折线图需要根据条件动态展示多条不同曲线 解决方案: 后端直接将使用sql将数据查询出来返回即可,因为我这里不是Java使用的C#不是很熟练后台不好写逻辑,所以在前端js完成的 代码如下: function createline(villagename, buildingname…

微服务篇之Nacos快速入门

Nacos 简介 Nacos 起源 Nacos 起源于阿里巴巴 2008 年的五彩石项目(完成微服务拆分和业务中台建设),经历了阿里十年双十⼀的洪峰流量的考验,沉淀了简单易用、稳定可靠、性能卓越等核心特性。随着云计算的兴起和受到开源软件行业…

ThinkPad产品如何升级BIOS程序

操作步骤: 重要提示: 更新BIOS存在风险!如果您的电脑在此过程中出现死机,系统崩溃或断电,则BIOS或UEFI固件程序可能会损坏,这将使您的电脑无法启动。 由于BIOS的版本或者在升级过程中出错,可能会造成不可…

009、引用

1. 引用与借用 下面的示例重新定义了一个新的 calculate_length 函数。与之前不同的是,新的函数签名使用了 String 的引用作为参数而没有直接转移值的所有权: fn main() { let s1 String::from("hello"); let len calculate_length(&s1…

气象预报与计算机技术:深度融合与未来展望

气象预报与计算机技术:深度融合与未来展望 一、引言 气象预报,作为人类对自然界气象变化的探索与预测,随着时间的推移和技术的进步,已经逐渐从单纯的经验模式转变为依赖于精密的仪器与强大的计算机技术的科学预测。在本文中,我们将深入探讨气象预报与计算机技术之间的密…

[2024区块链开发入门指引] - 比特币与区块链诞生

一份为小白用户准备的免费区块链基础教程 工欲善其事,必先利其器 Web3开发中,各种工具、教程、社区、语言框架.。。。 种类繁多,是否有一个包罗万象的工具专注与Web3开发和相关资讯能毕其功于一役? 参见另一篇博文👉 2024最全面…