APK渠道打包与APK加密加固

标签(空格分隔): Android

APK渠道打包##

  • 通过友盟

参考StormZhang文章
比较常见的友盟移动统计sdk中使用的方案,UMeng要根据各应用市场渠道号来进行一些统计和分析,比如各渠道的下载数、活跃度、自动更新等等。这种方案是 通过build.gradle脚本中的productFlavor 来实现的。首先在AndroidManifest.xml文件的 application 标签里指定一个 meta-data ,然后Umeng SDK会读取这个标签中value传到Umeng的后台,这样就可以让开发者监测到自己的应用程序渠道分布情况了。
【注意的是,虽然这里用到了友盟的标签,但是不用像引入友盟推送是将友盟SDK集成到项目依赖?】

自动化打包+版本号管理
定制生成的apk文件名、Android Studio设置默认的签名文件

  • 美团的打包方案(现阶段最快)-打包界的曙光
    用友盟传统的批量打包方式,最大的缺点就是打包时间长。在前期渠道很少时这种方法还可以接受,但只要渠道稍微增多该方法就不再适用了,原因是每打一个包都要执行一遍Gradle构建过程,效率太低。
    原理:


    此处输入图片的描述

到这里,思路就有了。
1、在META-INF中放置一个类似 channel_xxx 的空文件来标识市场。
2、在Java代码中解析这个文件名获取市场xxx即可。
具体步骤:文章

那Gradle构建是不是没用了呢?
当然不是,Google老大为他做了这么多,怎么能说不用就不用呢?
他的用处在于实现订制,比如打包出x86和arm的包,或者打出手机包和适应平板的hd包,然后借助上面的美团的打包方案工具生成多个市场,即完成了多种适配包多个市场的任务。


加密加固APK

  • 什么是加壳?

    加壳是在二进制的程序中植入一段代码,在运行的时候优先取得程序的控制权,做一些额外的工作。大多数病毒就是基于此原理。
    
此处输入图片的描述
  • Android Dex文件加壳原理


    此处输入图片的描述

    PC平台现在已存在大量的标准的加壳和解壳工具,但是Android作为新兴平台还未出现APK加壳工具。Android Dex文件大量使用引用给加壳带来了一定的难度,但是从理论上讲,Android APK加壳也是可行的。
    主要步骤:
    我们拿到需要加密的Apk和自己的壳程序Apk,然后用加密算法对源Apk进行加密在将壳Apk进行合并得到新的Dex文件,最后替换壳程序中的dex文件即可,得到新的Apk,那么这个新的Apk我们也叫作脱壳程序Apk.他已经不是一个完整意义上的Apk程序了,他的主要工作是:负责解密源Apk.然后加载Apk,让其正常运行起来。
    在这个过程中,牵扯到三个角色:
    1、加壳程序:加密源程序为解壳数据、组装解壳程序和解壳数据
    2、解壳程序:解密解壳数据,并运行时通过DexClassLoader动态加载
    3、源程序:需要加壳处理的被保护代码

  • 根据解壳数据在解壳程序DEX文件中的不同分布,本文将提出两种Android Dex加壳的实现方案。
    参考文章
    1、解壳数据位于解壳程序文件尾部
    2、解壳数据位于解壳程序文件头

  • 加固实战
    代码实现参考文章
    在实战中的坑请参考稀土掘金文章

  • 各大加密平台的对比与常见app漏洞及风险
    文章

你可能感兴趣的:(APK渠道打包与APK加密加固)