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

概念清楚罗,我们就说下:壳最本质的功能就是实现加载器。你看加壳后,系统是先执行壳代码的。但我们想要的是执行原dex,可是系统此时是不会自动来执行的需要壳去将原dex加载到系统中。ok,壳就说到这里,看android apk壳:
在看完上述的几篇文章后,相信对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后有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方法,自己写效果佳
加壳的基本知识就先到了,在后面脱壳中有新的知识点再补充上来。
资料:
android apk壳的更多相关文章
- android apk 防止反编译技术第一篇-加壳技术
做android framework方面的工作将近三年的时间了,现在公司让做一下android apk安全方面的研究,于是最近就在网上找大量的资料来学习.现在将最近学习成果做一下整理总结.学习的这些成 ...
- Android APK加壳技术方案
Android APK加壳技术方案[1] Android APK加壳技术方案[2]
- android apk 防止反编译技术第四篇-对抗JD-GUI
又到周末一个人侘在家里无事可干,这就是程序员的悲哀啊.好了我们利用周末的时间继续介绍android apk防止反编译技术的另一种方法.前三篇我们讲了加壳技术(http://my.oschina.net ...
- android apk 自我保护技术-加密apk
经过了忙碌的一周终于有时间静下来写点东西了,我们继续介绍android apk防止反编译技术的另一种方法.前两篇我们讲了加壳技术(http://my.oschina.net/u/2323218/blo ...
- 转: android apk 防止反编译技术(1~5连载)
转: android apk 防止反编译技术 做android framework方面的工作将近三年的时间了,现在公司让做一下android apk安全方面的研究,于是最近就在网上找大量的资料来学习. ...
- 如何加密android apk
经过了忙碌的一周终于有时间静下来写点东西了,我们继续介绍android apk防止反编译技术的另一种方法.前两篇我们讲了加壳技术(http://my.oschina.net/u/2323218/blo ...
- 爱加密Android APk 原理解析
转载请标明出处:http://blog.csdn.net/u011546655/article/details/45921025 爱加密Android APK加壳原理解析 一.什么是加壳? 加壳是在二 ...
- android apk 自我保护技术-完整性校验
关于防止android apk被反编译的技术我们前面已经讲了四种. 加壳技术 运行时修改字节码 伪加密 对抗JD-GUI 如果有不明白的可以查看我的博客的前四篇中关于这四种技术的介绍.接下来我们接着介 ...
- android apk 防止反编译技术第二篇-运行时修改字节码
上一篇我们讲了apk防止反编译技术中的加壳技术,如果有不明白的可以查看我的上一篇博客http://my.oschina.net/u/2323218/blog/393372.接下来我们将介绍另一种防止a ...
随机推荐
- GoPath模式和GoMoudle模式的相爱相杀
相信看我文章的文章的童鞋,golang版本已经是1.3版本以上.如果你的版本还停留在1.3以下,那这篇文章可以做为你的提升之法. go moudle的前世今生 前世-gopath gopath是什么 ...
- Line-line Intersection Gym - 102220C
题目链接:https://vjudge.net/problem/Gym-102220C 题意:求n 条直线两两相交有几对(也可以重合). 思路:用map和pair存所有直线的斜率和与X轴的交点,假设与 ...
- MyBatis:当表字段名和实体类属性名不一致
第一种解决方法:在sql中使用别名 <select id="getRoleList" resultType="com.ttpfx.domain.Role" ...
- WM_CLOSE WM_QUIT WM_DESTROY 三者的区别
一 个窗口或者应用程序应该被关闭时发出WM_CLOSE消息,当接收到WM_CLOSE消息时,如果你愿意,向用户提出是否真的退出.你知道让用户作确认或 有错误出现或有什么应该注意的事情发生的时候,往往弹 ...
- PTA 统计二叉树度为2的结点个数
6-4 统计二叉树度为2的结点个数 (11 分) 本题要求实现一个函数,可统计二叉树中度为2的结点个数. 函数接口定义: int NodeCount ( BiTree T); T是二叉树树根指针, ...
- java例题_50 题目:有五个学生,每个学生有 3 门课的成绩,从键盘输入以上数据(包括学生号,姓名,三门课成 绩),计算出平均成绩,将原有的数据和计算出的平均分数存放在磁盘文件"stud"中。
1 /*50 [程序 50 文件 IO] 2 题目:有五个学生,每个学生有 3 门课的成绩,从键盘输入以上数据(包括学生号,姓名,三门课成 3 绩),计算出平均成绩,将原有的数据和计算出的平均分数存放 ...
- 力扣 - 92. 反转链表II
目录 题目 思路1(迭代) 代码 复杂度分析 思路2(递归) 代码 复杂度分析 题目 92. 反转链表 II 思路1(迭代) 将反转链表分成3个部分:前一段未反转的部分.待反转链表部分.后一段未反转部 ...
- 数据仓库系列之ETL中常见的增量抽取方式
为了实现数据仓库中的更加高效的数据处理,今天和小黎子一起来探讨ETL系统中的增量抽取方式.增量抽取是数据仓库ETL(数据的抽取(extraction).转换(transformation)和装载(lo ...
- 第22 章 : 有状态应用编排 StatefulSet
有状态应用编排 StatefulSet 本文将主要分享以下四方面的内容: "有状态"需求 用例解读 操作演示 架构设计 "有状态"需求 课程回顾 我们之前讲到过 ...
- 通过lms.samples熟悉lms微服务框架的使用
经过一段时间的开发与测试,终于发布了Lms框架的第一个正式版本(1.0.0版本),并给出了lms框架的样例项目lms.samples.本文通过对lms.samples的介绍,简述如何通过lms框架快速 ...