壳对于有过pc端加解密经验的同学来说并不陌生,android世界中的壳也是相同的存在。看下图(exe = dex):

     

  概念清楚罗,我们就说下:壳最本质的功能就是实现加载器。你看加壳后,系统是先执行壳代码的。但我们想要的是执行原dex,可是系统此时是不会自动来执行的需要壳去将原dex加载到系统中。ok,壳就说到这里,看android apk壳:

  Android APK加壳技术方案【1】

  Android APK加壳技术方案【2】

  APK加壳【1】初步方案实现详解

  在看完上述的几篇文章后,相信对apk 壳应该有一定的了解(其实apk壳和pc端的都差不多,只是在处理不同的文件格式:dex和exe中会有差别;导致不同的加壳、解壳步骤。当然我们需要了解文件的格式,才能有的放矢哦)。来看下android apk加壳中处理方法:

  1 :编写解壳apk,得到壳的文件:UnShelldex;

  2:编写脚本或代码(你开心就好),对原dex进行encode变成encodeDex,并将其插入(这里有几种姿势哦,看你喜欢咯)到UnShelldex文件中;注意被修改后的UnShelldex必须要符合dex格式,否则android不执行艾(在上述的文章里就对修改后的UnShelldex的checksum、signature 和file_size值进行修正);

  解壳步骤:

  1 执行解壳apk的代码,decode endcodeDex为原来的dex;

  2 模拟android系统把dex装载,让其顺利执行;

  这里需要提及一点:壳绝对不能改变原来代码的执行流程;又不是hook,你改是算什么意思啊!apk壳的思路讲完啦,但这只是纸上谈兵,还有很多细节需要我们考虑。加壳的步骤没什么好考虑的,无非是跟文件格式打交道(当然你要做高精尖的encode是另说啦)。在解壳步骤里,decode也没什么好分析的(主要是跟encode对应,且每个人的处理方式也不一样);把dex装载才是关键,前面说了壳本质就是装载器。上面的文章的思路是在解壳过程中,调用dexclassloader把dex载入内存,dexclassloader需要dex文件路径,故decode后的dex直接存在目录下。(dalvik浅析三:类加载 ClassLoader)。什么!dex直接放在目录下,别人不是可以直接获取了吗,那加壳干什么啊。是不是觉得加壳然并卵。ok,那我不把dex提取出来放在目录下,直接在内存里装载:

  Android4.0内存Dex数据动态加载技术

  APK加壳【2】内存加载dex实现详解

  android4.0后有DalvikNativeFunc函数Dalvik_dalvik_system_DexFile_openDexFile_bytearray可以直接把dex对应的字节流装载到系统中(其中相关联到很多的知识点,已另写文章注释,看这里)。刚好我们在上面的解壳过程中不是得到dex嘛,这个时候不要再把dex存在目录下了,用Dalvik_dalvik_system_DexFile_openDexFile_bytearray加载。wow,别人不就看不到dex了嘛(真的看不到了嘛;看后续脱壳文章)。

  

  上面是apk加壳的一些基本概念,加壳的实质是反编译软件无法得到dex代码(即dex代码不会静态暴露)。一些加壳思路:

  1 java解密dex代码,难度系数不高

  2 C++解密dex代码,so加固+apk加壳

  3 不使用系统提供的加载dex方法,自己写效果佳

  加壳的基本知识就先到了,在后面脱壳中有新的知识点再补充上来。

资料:

  1 Android APK加壳技术方案【1】

  2 Android APK加壳技术方案【2】

  3 APK加壳【1】初步方案实现详解

  4 Android4.0内存Dex数据动态加载技术

  5 APK加壳【2】内存加载dex实现详解

android apk壳的更多相关文章

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

    做android framework方面的工作将近三年的时间了,现在公司让做一下android apk安全方面的研究,于是最近就在网上找大量的资料来学习.现在将最近学习成果做一下整理总结.学习的这些成 ...

  2. Android APK加壳技术方案

    Android APK加壳技术方案[1] Android APK加壳技术方案[2]

  3. android apk 防止反编译技术第四篇-对抗JD-GUI

    又到周末一个人侘在家里无事可干,这就是程序员的悲哀啊.好了我们利用周末的时间继续介绍android apk防止反编译技术的另一种方法.前三篇我们讲了加壳技术(http://my.oschina.net ...

  4. android apk 自我保护技术-加密apk

    经过了忙碌的一周终于有时间静下来写点东西了,我们继续介绍android apk防止反编译技术的另一种方法.前两篇我们讲了加壳技术(http://my.oschina.net/u/2323218/blo ...

  5. 转: android apk 防止反编译技术(1~5连载)

    转: android apk 防止反编译技术 做android framework方面的工作将近三年的时间了,现在公司让做一下android apk安全方面的研究,于是最近就在网上找大量的资料来学习. ...

  6. 如何加密android apk

    经过了忙碌的一周终于有时间静下来写点东西了,我们继续介绍android apk防止反编译技术的另一种方法.前两篇我们讲了加壳技术(http://my.oschina.net/u/2323218/blo ...

  7. 爱加密Android APk 原理解析

    转载请标明出处:http://blog.csdn.net/u011546655/article/details/45921025 爱加密Android APK加壳原理解析 一.什么是加壳? 加壳是在二 ...

  8. android apk 自我保护技术-完整性校验

    关于防止android apk被反编译的技术我们前面已经讲了四种. 加壳技术 运行时修改字节码 伪加密 对抗JD-GUI 如果有不明白的可以查看我的博客的前四篇中关于这四种技术的介绍.接下来我们接着介 ...

  9. android apk 防止反编译技术第二篇-运行时修改字节码

    上一篇我们讲了apk防止反编译技术中的加壳技术,如果有不明白的可以查看我的上一篇博客http://my.oschina.net/u/2323218/blog/393372.接下来我们将介绍另一种防止a ...

随机推荐

  1. 不用typsescript也能使用类型增强功能

    由于 JS 的弱类型.宽松的编写规范.以及开发工具的弱鸡支持,我们在维护前人的代码时,经常会出现不知道某一个方法或字段命名来自于哪里,一定要在全局搜索以后慢慢筛查才能找到 同样我们在使用接口返回的对象 ...

  2. 模式识别Pattern Recognition

    双目摄像头,单目摄像头缺少深度 Train->test->train->test->predicive

  3. 2020年12月-第02阶段-前端基础-CSS Day07

    CSS Day07 CSS高级技巧 理解 能说出元素显示隐藏最常见的写法 能说出精灵图产生的目的 能说出去除图片底侧空白缝隙的方法 应用 能写出最常见的鼠标样式 能使用精灵图技术 能用滑动门做导航栏案 ...

  4. WPF 基础 - 图形的效果与滤镜

    UIElement 有 BitmapEffect 和 Effect 属性,BitmapEffect 是由 CPU 的运算能力实现的,比较耗性能,推荐使用 Effect: Effect 包括但不限于 D ...

  5. classLoader动态加载技术

    //加载器,apkPath为包含dex文件的.apk或jar路径,dexPath是优化后的dex文件路径,第三个表示libraryPath表示Native库的路径,最后是父类加载器 DexClassL ...

  6. 【odoo14】第二十一章、性能优化

    通过odoo框架,我们可以开发大型且复杂的应用.良好的性能是实现这一目标的基础.本章,我们将探讨如何提高应用性能.同时,我们也会讲解找出影响性能的因素. 本章包含以下内容: 记录集的预读取模式 将数据 ...

  7. Linux 切换用户提示Permission denied

    在使用 su - hdfs 切换到 hdfs 用户时提示 su: Permission denied,但是密码确认是没错的. 找到文件 /etc/pam.d/su,注释掉 auth required ...

  8. Linux入门视频笔记四(vim入门)

    一.vim的基本介绍(纯命令模式编辑器) 1.vim的两种模式:命令模式(不能输入任何东西).编辑模式(按i进入编辑模式) 2.ESC:从编辑模式退出到命令模式 3.保存: ①:wq code.c(如 ...

  9. P1603 斯诺登的密码(JAVA语言)

    //这题有点坑 题目背景 根据斯诺登事件出的一道水题 题目描述 题目描述 2013年X月X日,俄罗斯办理了斯诺登的护照,于是他混迹于一架开往委内瑞拉的飞机.但是,这件事情太不周密了,因为FBI的间谍早 ...

  10. java例题_32 取一个整数a从右端开始的4~7位

    1 /*32 [程序 32 左移右移] 2 题目:取一个整数 a 从右端开始的 4-7 位. 3 */ 4 5 /*分析 6 * 从右端开始的第四位相当于原数除以1000后结果的最后一位数, 7 * ...