0%

尼古拉斯赵四-learning-1


  • Android中的Apk的加固(加壳)原理解析和实现
    - [1. Apk是什么?](#1-apk是什么)
    - [2. Android分层中native是哪一层?其他层是什么?](#2-android分层中native是哪一层其他层是什么)
    - [3. 加壳程序项目:DexShellTools](#3-加壳程序项目dexshelltools)
    - [4. 脱壳程序项目:ReforceApk](#4-脱壳程序项目reforceapk)
    

Android中的Apk的加固(加壳)原理解析和实现

本文学习自-尼古拉斯赵四

1. Apk是什么?

Apk是什么?

Apk是AndroidPackage的缩写,即Android安装包。Apk是类似Symbian sis或者sisx的文件格式。通过将apk文件直接传到Android模拟器或Android手机中执行即可安装。apk文件和sis一样,把Android sdk编译的工程打包成一个安装程序文件,格式为apk。Apk文件其实是zip格式,但后缀名被修改为apk,可以通过WinRAR等压缩工具进行解压缩。
APK文件的结构如下图:

  • META-INF : 签名信息

  • res : 资源文件

    • anim
    • color
    • drawable
    • drawable-hdpi
    • drawable-land
    • drawable-land-hdpi
    • drawable-mdpi
    • drawable-port
    • drawable-port-hdpi
    • layout
    • layout-land
    • layout-port
    • xml
  • AndroidManifest.xml :应用的名称,版本,权限,引用的库文件等

  • classes.dex :针对嵌入式优化

  • resources.arsc : 本地化,汉化资源存储

2. Android分层中native是哪一层?其他层是什么?

Android分层中native是哪一层?其他层是什么?

看到Android的分4层:java应用程序,java框架,本地框架和java运行环境,Linux内核空间。那么native层又是指什么?

在这个分层方式当中,Native层就是本地框架。

这些层大致如此区分:

Java应用程序无需过多解释,基本可以理解为各个App,由Java语言实现。

Java框架层就是常说的Framework,这层里东西很多也很复杂,比如说主要的一些系统服务如ActivityManagerService、PackageManagerService等,我们编写的Android代码之所以能够正常识别和动作,都要依赖这一层的支持。这一层也是由Java语言实现。

Native层这部分常见一些本地服务和一些链接库等。这一层的一个特点就是通过C和C++语言实现。比如我们现在要执行一个复杂运算,如果通过java代码去实现,那么效率会非常低,此时可以选择通过C或C++代码去实现,然后和我们上层的Java代码通信(这部分在android中称为jni机制)。又比如我们的设备需要运行,那么必然要和底层的硬件驱动交互,也要通过Native层。

Linux内核空间这部分顾名思义,就是Kernel部分哈~

3. 加壳程序项目:DexShellTools

通过对作者尼古拉斯赵四讲解的通读,加壳程序项目就是对源APK上进行加壳的操作,简单来说就是在源APK结束的末尾连接上给定的脱壳Dex,然后修改新Dex文件的文件的头信息。

在进行连接之前,为了源码的安全,需要用比较复杂的加密算法对其进行加密。


这里我们还需要两个输入文件:

1>、源Apk文件:ForceApkObj.apk 源程序编译之后的apk文件

2>、脱壳程序的Dex文件:ForceApkObj.dex 脱壳程序项目,在编译之后得到的classes.dex文件改个名字


4. 脱壳程序项目:ReforceApk