• 网站刚刚上线,难免有不足的地方,敬请谅解!欢迎提出宝贵意见!

  •    3年前 (2015-06-14)  安卓应用 |   1 条评论  173 
    文章评分 0 次,平均分 0.0

    android framework方面的工作将近三年的时间了,现在公司让做一下android apk安全方面的研究,于是最近就在网上找大量的资料来学习。现在将最近学习成果做一下整理总结。学习的这些成果我会做成一个系列慢慢写出来与大家分享,共同进步。这篇主要讲apk的加壳技术,废话不多说了直接进入正题。

    一、加壳技术原理

    所谓apk的加壳技术和pc exe的加壳原理一样,就是在程序的外面再包裹上另外一段代码,保护里面的代码不被非法修改或反编译,在程序运行的时候优先取得程序的控制权做一些我们自己想做的工作。(哈哈,跟病毒的原理差不多)

    PC exe的加壳原理如下:

    android apk 防止反编译技术第一篇-加壳技术

    二、android apk加壳实现

      要想实现加壳需要解决的技术点如下:

    1)怎么第一时间执行我们的加壳程序?

    首先根据上面的原理我们在apk中要想优先取得程序的控制权作为android apk的开发人员都知道Application会被系统第一时间调用而我们的程序也会放在这里执行。

    2)怎么将我们的加壳程序和原有的android apk文件合并到一起?

    我们知道android apk最终会打包生成dex文件,我们可以将我们的程序生成dex文件后,将我们要进行加壳的apk和我们dex文件合并成一个文件,然后修改dex文件头中的checksumsignature file_size的信息,并且要附加加壳的apk的长度信息在dex文件中,以便我们进行解壳保证原来apk的正常运行。加完壳后整个文件的结构如下:

    android apk 防止反编译技术第一篇-加壳技术

    3)怎么将原来的apk正常的运行起来?

    按照(2)中的合并方式在当我们的程序首先运行起来后,逆向读取dex文件获取原来的apk文件通过DexClassLoader动态加载。

    具体实现如下:

    1)修改原来apkAndroidMainfest.xml文件,假如原来apkAndroidMainfest.xml文件内容如下:

    1.  <application  

    2.      android:icon="@drawable/ic_launcher"  

    3.      android:label="@string/app_name"  

    4.      android:theme="@style/AppTheme" android:name="com.android.MyApplication" >  

    5.  </application>

    修改后的内容如下:

    1.  <application  

    2.      android:icon="@drawable/ic_launcher"  

    3.      android:label="@string/app_name"  

    4.      android:theme="@style/AppTheme" android:name="com.android.shellApplication" >  

    5.  <meta-data android:name="APPLICATION_CLASS_NAME" android:value="com.android.MyApplication"/>

    6.  </application> 

    com.android.shellApplication这个就是我们的程序的的application的名称,而

    7.  <meta-data android:name="APPLICATION_CLASS_NAME" android:value="com.android.MyApplication"/>

    是原来的apkapplication名称。

    2)合并文件代码实现如下:

    3)在我们的程序中加载运行原来的apk文件,代码如下:

     根据上面的讲述相信大家对apk的加壳技术有了一定的了解,下一篇我们将讲解另一种android apk防止反编译技术-运行时修改dalvik指令(http://www.coderonline.net/android-apk-防止反编译技术第二篇-运行时修改dalvik指令.html)。如果对这篇讲的技术有任何疑问及想要获得这篇文章讲的技术的工程源码

    欢迎关注个人微信公众平台:程序员互动联盟(coder_online),扫一扫下方二维码或搜索微信号coder_online即可关注,我们可以在线交流。

    android apk 防止反编译技术第一篇-加壳技术

     

     

    本文原始地址:http://www.coderonline.net/android-apk-to-prevent-decompilation-technology-first-shell-technology.html

    本站所有文章,除特别注明外,均为本站原创,转载请注明出处来自http://www.coderonline.net/

    否则保留追究法律责任的权利!

    关于

    发表评论

    表情 格式
    1. 好文章,内容文笔犀利.禁止此消息:nolinkok@163.com

      不锈钢网 评论达人 LV.1 3年前 (2015-07-03) [0] [0]
    切换注册

    登录

    忘记密码 ?

    切换登录

    注册