非小号appAPP加壳原理及常用脱壳方法介绍
目前针对移动应用市场上安卓APP被破解、反编译、盗版丛生的现象,很多APP开发人员已经意识到保护APP的重要性。而对于移动应用APP加密保护的问题,如何对DEX文件加密尤为重要。对APP进行加壳能有效地遏制APP被反编译破解的行为。
加壳是在二进制的程序中植入一段代码,在运行的时候优先取得程序的控制权,做一些额外的工作。大多数病毒就是基于此原理。是应用加固的一种手法对原始二进制原文进行加密/隐藏/混淆。
加壳的程序可以有效阻止对程序的反汇编分析,以达到它不可告人的目的。这种技术也常用来保护软件版权,防止被软件破解。
市面上主要的加壳原理:将原Dex文件加密,加密后的Dex文件和壳Dex文件一起重新打包,产生新的Dex文件。安卓虚拟机加载的时候,会从壳Dex文件的ProxyApplication类开始,执行attachBaseContext方法和onCreate方法。而壳Dex文件会在这两个方法里面实现原Dex文件的还原和加载,让虚拟机顺利启动APP。
2、解壳程序:解密解壳数据,并运行时通过DexClassLoader动态加载
ApkScan-PKID使用非常简单,直接把我们的Apk文件拉到软件界面内即可,这里用安居客-15.5.2为例
这里直接将apk文件拉入jadx中,查看包目录结构十分简洁,且有一些与加载原Dex相关的方法
跟java类似,安卓的class都是由Classloader的loadClass方法加载的。跟java不同的是,每一个class对象都会有对应的dex对象属性跟相应的dex文件关联起来。利用xposed,将loadClass方法劫持住,每当loadClass方法调用完成后,用xposed执行后置方法。获取方法加载的class对象,然后调用getDex方法。拿到对应的dex文件引用,最后将dex文件序列成byte数据,写到自定义保存文件里面去。就能拿到脱壳后的dex文件。
反射大师,一个 脱壳插件工具,需要在 Xposed 环境中使用,支持市面上大多数加密壳。
经过上一步的脱壳操作,我们获取到了多个dex文件,接下来这些dex文件我们可以直接一个一个拖入jadx进行分析,在jadx中可以直接看到其内部的java代码。但是这样对于我们而言太麻烦了,像上面安居客的例子,我们获得了 16个dex,假如我们一个一个拖进jadx中分析,将会耗费我们大量的精力,因此我们需要对这些dex文件进行二次加工,加工细分为以下两个方向:
一、将多个dex使用jadx合并为单个sources文件,然后使用IDE软件进行查看(java层代码静态分析)
二、将多个dex使用baksmali.jar转为smali代码,结合apktool得到项目文件,替换相关smali文件后可用于动态调试
jadx文件我们可以通过直接在github项目中下载,如图下载最新版本的jadx-x.x.x.zip,解压后的bin目录中即可看到
1、通过2.2.1章节我们使用反射大师获取了多个dex文件,我们将Dex2Java.py放入这些dex文件的同一个文件夹中
3、执行完毕后,相同目录下将会得到一个sources文件夹,该文件夹能直接用IDE工具打开查看其java代码
1、通过2.2.1章节我们使用反射大师获取了多个dex文件,我们将Dex2Smali.py放入这些dex文件的同一个文件夹中
猜你喜欢
- 05-13非小号宇树科技发布Unitree Dex5灵
- 05-25非小号DeFAI:区块链与AI融合的下
- 06-04非小号BYDFi携手Ledger推出限量版硬
- 04-06非小号2025年风潮:币圈投资者如
- 05-09非小号全国门店+全场景激励Mem
- 05-21非小号Coinbase战略总监:机构兴趣
- 05-29非小号42Force:基于BCH Layer2的RW
- 06-13非小号XBIT量子动态DEX用AI熔断改
- 06-08非小号权志龙调侃“电视上Dex是