Dex加壳解壳原理课件分析.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
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精品文档

相关文档