Dex加壳解壳原理要点解析.docVIP

  • 16
  • 0
  • 约 8页
  • 2016-04-27 发布于湖北
  • 举报
Android Dex文件加壳原理 : 1、加壳程序:加密源程序为解壳数据、组装解壳程序和解壳数据 2、解壳程序:解密解壳数据,并运行时通过DexClassLoader动态加载 3、源程序:需要加壳处理的被保护代码 根据解壳数据在解壳程序DEX文件中的不同分布,本文将提出两种Android Dex加壳的实现方案。 加壳程序工作流程: 1、加密源程序APK文件为解壳数据 2、把解壳数据写入解壳程序Dex文件末尾,并在文件尾部添加解壳数据的大小。 3、修改解壳程序DEX头中checksum、signature 和file_size头信息。 4、修改源程序AndroidMainfest.xml文件并覆盖解壳程序AndroidMainfest.xml文件。 解壳DEX程序工作流程: 1、读取DEX文件末尾数据获取借壳数据长度。 2、从DEX文件读取解壳数据,解密解壳数据。以文件形式保存解密数据到a.APK文件 3、通过DexClassLoader动态加载a.apk。 加壳程序工作流程: 1、加密源程序APK文件为解壳数据 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文件并覆盖解壳程序AndroidMainfest.xml文件。 解壳DEX程序工作流程: 1、从0x70处读取解壳数据长度。 2、从DEX文件读取解壳数据,解密解壳数据。以文件形式保存解密数据到a.APK 3、通过DexClassLoader动态加载a.APK。 软件的壳一般运行在原始程序的外面,用来保护程序,在对原始程序加壳的过程中,原始程序的入口地址等信息被保存,在外壳运行的过程中,外壳程序会动态的修改任务的入口地址等信息,外壳程序结束后,原始层序开始执行,一般对原始程序加壳时,原始程序首先被加密,在运行外壳程序的时候,外壳程序会对原始程序进行动态的内存解密,使得原始程序恢复其来了的面貌。 只有经过解密后的原始程序才能正常执行。在解密的过程中,外壳程序会对原始程序解密密码或者解密密钥进行验证,只有在密码或者密钥正确的时候才对原始程序解密,后则外壳程序退出这样的安全性和机密性等信息将会的到保护。由于加壳程序在运行过程中,是以整体的形式被加载到内存中,在内存中进行解密的,这种内存解密机制确保无临时文件生成,无原始程序还原等特性,因此可以实现对原始程序更好的保护。 软件加壳实际上是对原始程序及外壳程序进行合并的一个过程,加壳过程实现对原始程序的压缩加密等处理,同时将外壳程序添加到原始程序的开始或末尾,在合并过程中,原始程序的入口被保存,整个程序的入口被改成了外壳程序的入口。这样就可以保证在运行的时候,外壳程序会先被执行,在外壳程序执行的过程中,进行各种保护验证及信息查询,只有验证等信息正确的时候,外壳程序才会对原始程序进行解密还原等处理,并读取保存的原始程序入口,将整个程序的入口改为原始程序的入口,确保在外壳程序退出时原始程序被执行。 软件的加壳实际上是由外壳程序和加壳程序两部分构成的,外壳程序是运行在原始程序外面的代码段,在执行时,该部分代码段会先被执行。加壳程序是将 外壳程序和原始程序合并成代码。在加壳程序中,不仅要完成对文件的合并,文件结构的修改等功能,还要完成对原始程序的加密等功能。经过加壳后,程序将变成由外壳程序,原始程序及解密密钥等共同组成的程序段。 在外壳程序中,不仅要提供对原始程序文件提取、解密等功能,还要实现内存解密、解密后数据填回等功能,同时外壳程序还要实现对程序入口地址修改,控制权转意等功能。这样在外壳程序运行时,才能保证对原始程序进行正确的处理并保证原始程序可被执行。 常见的外壳加载过程分为四步: 保存原程序的入口参数。外壳程序执行前,会读取各个寄存器的信息并将这些信息保存,当外壳程序执行完的时候,这些寄存器信息将被回复,同时源程序入口将被设置为真正的入口地址。 解密原程序各个被加密的区。在加壳程序运行过程中,原程序的各个区都会被加密,这些加密后的区段完全失去了原来的信息结构,使得不仅不能被反编译,也无法被加载执行。在壳程序执行的过程中,壳程序根据加密规则,选

文档评论(0)

1亿VIP精品文档

相关文档