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

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

  1. 1、本文档共26页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Android中的Apk的加固(加壳)原理解析和实现精要

Android中的Apk的加固(加壳)原理解析和实现 一、前言 今天又到周末了,憋了好久又要出博客了,今天来介绍一下Android中的如何对Apk进行加固的原理。现阶段。我们知道Android中的反编译工作越来越让人操作熟练,我们辛苦的开发出一个apk,结果被人反编译了,那心情真心不舒服。虽然我们混淆,做到native层,但是这都是治标不治本。反编译的技术在更新,那么保护Apk的技术就不能停止。现在网上有很多Apk加固的第三方平台,最有名的应当属于:爱加密和梆梆加固了。其实加固有些人认为很高深的技术,其实不然,说的简单点就是对源Apk进行加密,然后在套上一层壳即可,当然这里还有一些细节需要处理,这就是本文需要介绍的内容了。 二、原理解析 下面就来看一下Android中加壳的原理: 我们在加固的过程中需要三个对象: 1、需要加密的Apk(源Apk) 2、壳程序Apk(负责解密Apk工作) 3、加密工具(将源Apk进行加密和壳Dex合并成新的Dex) 主要步骤: 我们拿到需要加密的Apk和自己的壳程序Apk,然后用加密算法对源Apk进行加密在将壳Apk进行合并得到新的Dex文件,最后替换壳程序中的dex文件即可,得到新的Apk,那么这个新的Apk我们也叫作脱壳程序Apk.他已经不是一个完整意义上的Apk程序了,他的主要工作是:负责解密源Apk.然后加载Apk,让其正常运行起来。 在这个过程中我们可能需要了解的一个知识是:如何将源Apk和壳Apk进行合并成新的Dex 这里就需要了解Dex文件的格式了。下面就来简单介绍一下Dex文件的格式 主要来看一下Dex文件的头部信息,其实Dex文件和Class文件的格式分析原理都是一样的,他们都是有固定的格式,我们知道现在反编译的一些工具: 1、jd-gui:可以查看jar中的类,其实他就是解析class文件,只要了解class文件的格式就可以 2、dex2jar:将dex文件转化成jar,原理也是一样的,只要知道Dex文件的格式,能够解析出dex文件中的类信息就可以了 当然我们在分析这个文件的时候,最重要的还是头部信息,应该他是一个文件的开始部分,也是索引部分,内部信息很重要。 我们今天只要关注上面红色标记的三个部分: 1) checksum 文件校验码 ,使用alder32 算法校验文件除去 maigc ,checksum 外余下的所有文件区域 ,用于检查文件错误 。 2) signature 使用 SHA-1 算法 hash 除去 magic ,checksum 和 signature 外余下的所有文件区域 ,用于唯一识别本文件 。 3) file_size Dex 文件的大小 。 为什么说我们只需要关注这三个字段呢? 因为我们需要将一个文件(加密之后的源Apk)写入到Dex中,那么我们肯定需要修改文件校验码(checksum).因为他是检查文件是否有错误。那么signature也是一样,也是唯一识别文件的算法。还有就是需要修改dex文件的大小。 不过这里还需要一个操作,就是标注一下我们加密的Apk的大小,因为我们在脱壳的时候,需要知道Apk的大小,才能正确的得到Apk。那么这个值放到哪呢?这个值直接放到文件的末尾就可以了。 所以总结一下我们需要做:修改Dex的三个文件头,将源Apk的大小追加到壳dex的末尾就可以了。 我们修改之后得到新的Dex文件样式如下: 那么我们知道原理了,下面就是代码实现了。所以这里有三个工程: 1、源程序项目(需要加密的Apk) 2、脱壳项目(解密源Apk和加载Apk) 3、对源Apk进行加密和脱壳项目的Dex的合并 三、项目案例 下面先来看一下源程序 1、需要加密的源程序Apk项目:ForceApkObj 需要一个Application类,这个到后面说为什么需要: MyApplication.Java [java] view plain copy package com.example.forceapkobj; import android.app.Application; import android.util.Log; public class MyApplication extends Application{ @Override public void onCreate() { super.onCreate(); Log.i(demo, source apk onCreate:+this); } } 就是打印一下onCreate方法。 MainActivity.Java [java] view plain copy pac

文档评论(0)

1520520 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档