介绍APP加壳原理及常见的脱壳方法

访客 193 0

app安卓加壳原理及常用脱壳方法介绍

文章目录

  • app安卓加壳原理及常用脱壳方法介绍
    • 前言
    • 1 加壳
      • 1.1 什么是加壳
      • 1.2 加壳作用
      • main >> >> >>>>> main >> >> - 标题级别应统一使用标签,其中X为数字,表示标题的级别。 - 列表项之间应使用
        • 标签进行包裹,以实现有序或无序列表的效果。

          1 加壳

          1.1 什么是加壳

          加壳是一种在二进制程序中嵌入代码的技术,其目的是在运行时优先获取程序的控制权,并执行一系列额外操作。这种技术被广泛应用于病毒开发中,它通过对原始二进制文件进行加密、隐藏和混淆等手段来实现应用加固。

          1.2 加壳作用

          加壳程序的存在可以有效地阻止对程序进行反汇编分析,从而实现其隐秘目的。这种技术也经常被用于保护软件版权,以防止软件被破解。

          1.3 加壳原理

          介绍APP加壳原理及常见的脱壳方法-第1张图片-谷歌商店上架

          市面上主要的加壳原理是将原Dex文件进行加密,然后将加密后的Dex文件与壳Dex文件重新打包,生成新的Dex文件。在安卓虚拟机加载时,会从壳Dex文件中的ProxyApplication类开始执行attachBaseContext方法和onCreate方法。而在这两个方法中,壳Dex文件会实现对原Dex文件的还原和加载操作,以确保虚拟机能够成功启动APP。

          在这个过程中,涉及到三个角色:

          1、加壳程序:将源程序加密为解壳数据,并组装解壳程序和解壳数据。
          2、解壳程序:对解壳数据进行解密,并通过DexClassLoader动态加载运行。
          3、源程序:包含需要进行加壳处理的被保护代码。
          
          

          1.4 加壳后的利与弊

          优势:

          ①、加强核心代码算法的保护,增加破解、盗版和二次打包的难度。

          2、同时,它还能有效地减轻代码注入、动态调试和内存注入攻击的风险。

          不足之处:

          ①、影响兼容性

          ②、影响程序运行效率

          1.5 如何辨别是否加壳

          目前分辨加壳主要有以下两种方法:

          一、使用加固检测软件进行检测,例如:ApkScan-PKID。
          二、使用代码查看工具查看apk的目录结构,例如:jadx。 

          使用ApkScan-PKID非常简单,只需将我们的Apk文件拖放到软件界面即可。以安居客-15.5.2为例。

          介绍APP加壳原理及常见的脱壳方法-第2张图片-谷歌商店上架

          2、对apk进行反编译,以查看其包结构。

          在这里,你可以直接将apk文件拖入jadx工具中。通过它,你可以轻松查看包目录结构的简洁性,并且还能找到一些与加载原始Dex相关的方法。

          介绍APP加壳原理及常见的脱壳方法-第3张图片-谷歌商店上架

          2 脱壳

          2.1 脱壳原理

          与Java类似,Android的class也是通过Classloader的loadClass方法加载的。不同之处在于,每个class对象都有一个对应的dex对象属性,并与相应的dex文件关联起来。通过使用xposed,我们可以劫持loadClass方法,在loadClass方法调用完成后执行后置方法。这样我们就能获取被加载的class对象,并调用getDex方法来获取对应的dex文件引用。最后,将dex文件序列化为byte数据并写入自定义保存文件中,从而获得脱壳后的dex文件。

          2.2 常用脱壳软件

          以下是三种常用的脱壳软件:

          以下是反射大师的使用方法及其相关环境要求:
          
          1. 反射大师:需要搭建Xposed环境。
          2. DumpDex:需要在真机下搭建Xposed环境并运行。
          3. FRIDA-DEXDump:需要搭建Frida环境。
          
          接下来将详细介绍反射大师的使用方法。 

          2.2.1 反射大师

          以下是对下面这段话的改写: 介绍 -> 简介 请看下面的简介:

          作为一位全能的文案编辑专家,我会对这段话进行改写。改写后的版本如下: 反射大师是一个强大的插件工具,专为在Xposed环境中使用而设计。它能够兼容市面上绝大多数加密壳,提供了出色的脱壳功能。

          使用指南

          一、手机或模拟器安装xposed环境二、安装反射大师,xposed内部勾选反射大师模块,重启模拟器三、打开反射大师选择目标app四、打开目标app进入到主界面五、选择当前ACTIVITY六、长按写出Dex约两秒后释放,然后点击确定七、dex文件可以直接拉到jadx查看源码
          介绍APP加壳原理及常见的脱壳方法-第4张图片-谷歌商店上架介绍APP加壳原理及常见的脱壳方法-第5张图片-谷歌商店上架介绍APP加壳原理及常见的脱壳方法-第6张图片-谷歌商店上架介绍APP加壳原理及常见的脱壳方法-第7张图片-谷歌商店上架介绍APP加壳原理及常见的脱壳方法-第8张图片-谷歌商店上架介绍APP加壳原理及常见的脱壳方法-第9张图片-谷歌商店上架介绍APP加壳原理及常见的脱壳方法-第10张图片-谷歌商店上架介绍APP加壳原理及常见的脱壳方法-第11张图片-谷歌商店上架

          2.3 脱壳后分析

          经过上一步的脱壳操作,我们获取到了多个dex文件,接下来这些dex文件我们可以直接一个一个拖入jadx进行分析,在jadx中可以直接看到其内部的java代码。但是这样对于我们而言太麻烦了,像上面安居客的例子,我们获得了 16个dex,假如我们一个一个拖进jadx中分析,将会耗费我们大量的精力,因此我们需要对这些dex文件进行二次加工,加工细分为以下两个方向:

          一、使用jadx将多个dex合并为单个sources文件,然后通过IDE软件进行查看(对java层代码进行静态分析)。
          二、使用baksmali.jar将多个dex转换为smali代码,并结合apktool获取项目文件。在替换相关的smali文件后,可用于动态调试。
          
          

          2.3.1 Dex2Java

          前期准备

          1、jadx文件

          jadx文件我们可以通过直接在github项目中下载,如图下载最新版本的jadx-x.x.x.zip,解压后的bin目录中即可看到
          介绍APP加壳原理及常见的脱壳方法-第12张图片-谷歌商店上架
          介绍APP加壳原理及常见的脱壳方法-第13张图片-谷歌商店上架

          2、Dex2Java转换脚本

          这个脚本的目的是将多个dex文件合并成一个sources文件。

          自编写如下:

          Dex2Java.py

          import os, sys
          
          if __name__ == __main__:
              if len(sys.argv)  

          详细应用

          1、通过2.2.1章节我们使用反射大师获取了多个dex文件,我们将Dex2Java.py放入这些dex文件的同一个文件夹中

          介绍APP加壳原理及常见的脱壳方法-第14张图片-谷歌商店上架

          2、该目录下执行Dex2Java.py并传入jadx的绝对路径,我这里为C:\Users\admin\Desktop\jadx\bin\jadx

          Dex2Java.py C:\Users\admin\Desktop\jadx\bin\jadx

          介绍APP加壳原理及常见的脱壳方法-第15张图片-谷歌商店上架

          3、执行完毕后,相同目录下将会得到一个sources文件夹,该文件夹能直接用IDE工具打开查看其java代码
          介绍APP加壳原理及常见的脱壳方法-第16张图片-谷歌商店上架
          介绍APP加壳原理及常见的脱壳方法-第17张图片-谷歌商店上架

          2.3.2 Dex2Smali

          前期准备

          1、apktool

          您可以使用apktool将apk文件反编译为项目文件。下载地址:https://www.pcsoft.com.cn/soft/57847.html

          2、baksmali.jar文件

          请下载basksmali.jar文件,该文件可用于将dex文件转换为smali代码。下载地址:https://bitbucket.org/JesusFreke/smali/downloads/

          三、Dex2Smali脚本

          这个脚本的功能是将dex文件转换为smali代码。

          自编写如下:

          Dex2Smali.py

          ```python
          import os, sys
          
          if __name__ == __main__:
              if len(sys.argv)  

          详细应用

          1、通过2.2.1章节我们使用反射大师获取了多个dex文件,我们将Dex2Smali.py放入这些dex文件的同一个文件夹中

          介绍APP加壳原理及常见的脱壳方法-第18张图片-谷歌商店上架

          2、该目录下执行Dex2Smali.py并传入baksmali.jar的绝对路径,我这里为E:\mobileAppCrawler\dump\安居客dump\dump\baksmali.jar

          Dex2Smali.py E:\mobileAppCrawler\dump\安居客dump\dump\baksmali.jar

          介绍APP加壳原理及常见的脱壳方法-第19张图片-谷歌商店上架

          3、执行完毕后得到多个classes文件
          介绍APP加壳原理及常见的脱壳方法-第20张图片-谷歌商店上架

          第四步,运用apktool对目标apk进行反编译,从而获得与apk同名的项目文件夹。

          在cmd中执行以下命令,将apk文件拖放到apktool脚本所在的文件夹中。

          apktool -r d anjuke.apk -only-main-classes

          介绍APP加壳原理及常见的脱壳方法-第21张图片-谷歌商店上架
          介绍APP加壳原理及常见的脱壳方法-第22张图片-谷歌商店上架介绍APP加壳原理及常见的脱壳方法-第23张图片-谷歌商店上架
          5、进入同名项目文件夹中可以看到存在多个classes文件,我们将其删除,然后将执行Dex2Smali.py脚本后得到多个classes文件复制到该文件夹中
          介绍APP加壳原理及常见的脱壳方法-第24张图片-谷歌商店上架
          介绍APP加壳原理及常见的脱壳方法-第25张图片-谷歌商店上架

          6、使用Android Studio打开该项目文件,可以查看smali以及动态调试
          介绍APP加壳原理及常见的脱壳方法-第26张图片-谷歌商店上架
          介绍APP加壳原理及常见的脱壳方法-第27张图片-谷歌商店上架

          最后,如果对于app的动态调试有任何疑问,可以参考这篇文章:https://blog.csdn.net/weixin_43900244/article/details/114007059。阅读本文后,建议从第2.2章节开始深入了解。

          3 总结

          最后总结一下,目前遇到的加壳技术仍停留在第一代壳阶段(即dex加密)。现如今,一些应用程序已经开始采用二、三代壳来增加代码解密和调试的难度。因此,常见的脱壳手段将逐渐被淘汰。如果遇到问题,建议多去吾爱破解和看雪上的帖子寻找答案~

标签: 文件 脱壳 方法 反射

发表评论 (已有0条评论)

还木有评论哦,快来抢沙发吧~