热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

反编译+混淆的攻守战

准备一个APK用于反编译和混淆的APK来自于《即拿即用-横向滚动+转场动画+GridView和RecyclerView动态添加》的Demo,地址:https:github.com

准备一个APK

用于反编译和混淆的APK来自于《即拿即用-横向滚动+转场动画+GridView和RecyclerView动态添加》的Demo,地址:https://github.com/mocn26169/MultiViewpager

首先我我们将apk签名并打包:

这里写图片描述

密码都是123456789

这里写图片描述

反编译代码

1、下载工具

dex2jar 这个工具用于将dex文件转换成jar文件
下载地址:http://sourceforge.net/projects/dex2jar/files/

jd-gui 这个工具用于将jar文件转换成java代码
下载地址:http://jd.benow.ca/

2、取出classes.dex文件

将APK压缩,取出classes.dex这个文件,因为代码都在这个文件里面。

拷贝到dex2jar解压后的目录下。

这里写图片描述

这里写图片描述

3、在cmd中执行命令

cmd中进入到同样的目录,然后执行:

d2j-dex2jar classes.dex

这里写图片描述

发现dex2jar-2.0目录下多出来了一个classes-dex2jar.jar文件

这里写图片描述

4、使用jd-gui工具打开classes-dex2jar.jar文件

对比一下

这里写图片描述

这里写图片描述

可以看到,基本上还原了大部分的代码。

反编译资源

如果去打开所有的xml文件,包括AndroidManifest.xml文件发现都是不能直接看到的:

这里写图片描述

所以我们需要用其他的方法还原这些资源文件

1、下载apktool工具

apktool 这个工具用于最大幅度地还原APK文件中的9-patch图片、布局、字符串等等一系列的资源。
下载地址:http://ibotpeaches.github.io/Apktool/install/

需要的就是apktool.bat和apktool.jar这两个文件

将Demo.apk拷贝到和这两个文件同样的目录当中,然后cmd也进入到这个目录下

这里写图片描述

在cmd中执行如下命令:

apktool_2.2.2.jar d app-release.apk

这里写图片描述

至此就完成了资源和代码的反编译,如果要知道如何去修改代码,重新打包,请去看《Android安全攻防战,反编译与混淆技术完全解析(上)》

混淆代码

一个APK如果没有混淆,那么就会很容易被反编译代码、反编译资源、以及重新打包。

混淆代码并不是让代码无法被反编译,而是将代码中的类、方法、变量等信息进行重命名,把它们改成一些毫无意义的名字。

打出正式版的APK才会进行混淆,Debug版的APK是不会混淆的。

混淆步骤

借助SDK中自带的Proguard工具,只需要修改build.gradle中的一行配置即可。可以看到,现在build.gradle中minifyEnabled的值是false,这里我们只需要把值改成true,打出来的APK包就会是混淆过的了。如下所示:

release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}

重新签名打包,并用dex2jar工具再次打开

对比一下

这里写图片描述

这里写图片描述

可以看到,大部分代码都被混淆了,那么我们想让这个类不被混淆呢应该怎么做?

任何一个Android Studio项目在app模块目录下都有一个proguard-rules.pro文件,这个文件就是用于让我们编写只适用于当前项目的混淆规则的,那么接下来我们就利用刚才学到的所有知识来对混淆规则做修改吧。

不对DetailActivity这个类进行混淆

-keep class com.bourne.multiviewpager.DetailActivity {
*;
}

重新打包编译

这里写图片描述

可以看到这个类很神奇地被完整地保留下来

混淆的规则也有很多,对某个类,某个方法,某个包混淆等等,可以自行查看《 Android安全攻防战,反编译与混淆技术完全解析(下)》

参考

  • 《Android安全攻防战,反编译与混淆技术完全解析(上)》

  • 《 Android安全攻防战,反编译与混淆技术完全解析(下)》


推荐阅读
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 本文详细介绍了将android工作项目打包为jar文件的方法及步骤。通过选择jar file和src文件夹,可以将项目打包为jar文件,并导入到其他项目的libs中作为库文件使用。对于涉及到资源文件的情况,仍在研究中。 ... [详细]
author-avatar
Vee-健健健
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有