IT技术互动交流平台

Android系统下DEX加壳

作者:jiazhijun  发布日期:2013-03-19 20:25:58
一、什么是加壳?
       加壳是在二进制的程序中植入一段代码,在运行的时候优先取得程序的控制权,做一些额外的工作。大多数病毒就是基于此原理。PC EXE文件加壳的过程如下:

 
二、加壳作用
 
       加壳的程序可以有效阻止对程序的反汇编分析,以达到它不可告人的目的。这种技术也常用来保护软件版权,防止被软件破解。
 
 
 
三、Android Dex文件加壳原理
 
       PC平台现在已存在大量的标准的加壳和解壳工具,但是Android作为新兴平台还未出现Dex加壳工具。Android Dex文件大量使用引用给加壳带来了一定的难度,但是从理论上讲,Android Dex加壳也是可行的。
 
       在这个过程中,牵扯到三个角色:
 
           1、加壳程序:加密源程序为解壳数据、组装解壳程序和解壳数据DEX文件
 
           2、解壳程序:解密解壳数据,并运行时通过DexClassLoader动态加载
 
           3、源程序:需要加壳处理的被保护代码
 
  
       根据解壳程序和解壳数据在DEX文件中的不同分布,本文将提出两种Android Dex加壳的实现原理。
 
 
    (一)解壳数据位于解壳程序文件尾部
  
              该种方式简单实用,合并后的DEX文件结构如下。
 

 
          加壳程序工作流程:
 
                  1、加密源程序DEX文件为解壳数据
 
                  2、把解壳数据写入解壳程序Dex文件末尾,并在文件尾部添加解壳数据的大小。
 
                  3、修改解壳程序DEX头中checksum、signature 和file_size头信息。
 
                  4、修改源程序AndroidMainfest.xml文件,修改程序入口Activity为解壳程序入口Activity。
 
          解壳DEX程序工作流程:
 
                  1、读取DEX文件末尾数据获取借壳数据长度。
 
                  2、从DEX文件读取解壳数据,解密解壳数据。以文件形式保存解密数据到a.dex
 
                  3、通过DexClassLoader动态加载a.dex,并启动源程序入口Activity。
 
 
 
(二)解壳数据位于解壳程序文件头
 
 
 
          该种方式相对比较复杂, 合并后DEX文件结构如下:

 
          加壳程序工作流程:
 
                  1、加密源程序DEX文件为解壳数据
 
                  2、计算解壳数据长度,并添加该长度到解壳DEX文件头末尾,并继续解壳数据到文件头末尾。
 
                       (插入数据的位置为0x70处)
 
                  3、修改解壳程序DEX头中checksum、signature、file_size、header_size、string_ids_off、type_ids_off、proto_ids_off、field_ids_off、
 
              method_ids_off、class_defs_off和data_off相关项。  分析map_off 数据,修改相关的数据偏移量。 
 
                  4、修改源程序AndroidMainfest.xml文件,修改程序入口Activity为解壳程序入口Activity。
 
 
 
          解壳DEX程序工作流程:
 
                  1、从0x70处读取解壳数据长度。
 
                  2、从DEX文件读取解壳数据,解密解壳数据。以文件形式保存解密数据到a.dex
 
                  3、通过DexClassLoader动态加载a.dex,并启动源程序入口Activity。
 

延伸阅读:

Tag标签: Android   DEX加壳  
  • 专题推荐

About IT165 - 广告服务 - 隐私声明 - 版权申明 - 免责条款 - 网站地图 - 网友投稿 - 联系方式
本站内容来自于互联网,仅供用于网络技术学习,学习中请遵循相关法律法规