前言现在市面上对App的安全合规管控越来越严格了 , 也就要求了APP在上架之前一定要做合规检测和加固处理 。对APP就是加固的好处 , 可以提高APP的安全性 , 提高APP被逆向分析破解的门槛 , 同时通过加固保护可以提高过安全合规的检测 。
由于APP加固技术不断被攻破情况 , 因此加固技术也是不断在快速迭代的过程 。现在市面上的加固产品的还是比较多的 , 并且各个加固技术产品都有其各自优缺点 , 但是加固产品的所采用技术去有很多共性的地方 。下面就对加固和脱壳对抗方案做些梳理总结 。
Android 反编译的威胁
- 逆向分析: 漏洞挖掘、协议分析
- 二次打包: 盗版、破解、广告
- 代码混淆:JAVA代码、CC++带马甲、JShtml代码
- 应用加固:DEX文件、SO文件、资源文件
文章插图
编译流程
- java源码编译:通过javac将源码编译为.class文件
- 多dex分包:脚本将类根据一定规则划分到主dex和从dex中 , 生成配置文件
- proguard优化/混淆:对.class文件进行压缩、优化、混淆处理
- 转化为dex文件:dxd8将.class文件转换为dex文件
文章插图
- 动态加载:从服务器动态加载业务的DEX
- DEX内存加载:模拟App启动的时候 , 将我们的壳、将业务DEX文件加载到内存中 , 然后通过一些处理方式 , 让DEX文件把Application启动起来 , 让应用认为和普通的启动方式是一样的 (缺点:DEX会暴露在内存中)
- DEX指令抽取:把DEX文件中的一些方法的指令抽取出来 , 然后在内存中开辟一段区域 , 然后将我们内存加载的DEX解析到相应的方法指令偏移的地方 , 方法指令的偏移指向我们开辟的一段内存里面 。(缺点:不彻底)
- 虚拟机加固:我们通过自己实现一套虚拟机 , 将DEX方法的指令抽取出来 , 在运行的时候 , 我们的虚拟机里面就运行被抽取的一段指令 。这样攻击者想要破解 , 首先必须要找到我们虚拟机的入口 , 将虚拟机整个逻辑还原出来 , 这样攻击成本相对比较高 (缺点:本身Android应用就运行在虚拟机里面 , 不论是Dalvik还是ART , 增加个虚拟机 , 就会增加一层对应用运行时代码的解释执行操作 , 那么解释执行的效率会大大下降)
- JAVA2C:提升应用运行时的效率 , 我们的方法会转换为一层在Native(JNI)上实现的逻辑 , 最终通过JNI编译成so , 这样的话在本地执行 , 而不是在虚拟机执行 , 执行效率会大大提升 。
文章插图
360加固脱壳需要完成两个任务 , 一个任务是过掉360加固的反调试 , 另外一个是获取原apk的classes.dex文件 。下面写一下具体的脱壳步骤 , 完成这两个任务 。为了脱壳成功 , 在动态调试加固apk程序前 , 需要将android_server调试程序的名字修改一下 , 因为360加固会通过查询/proc/pid/cmdline文件获取程序的名称来对android_server、gdb、ltrace、strace调试器进行反调试 。
在动态调试加固apk程序的时候 , 需要在几个关键点函数 open、strtol、mmap、memcmp处下断点 , 后面具体的分析 。由于android系统是由linux系统修改而来 , 因此Android系统上很多的属性和Linux系统下的属性 。Linux下进程和线程的信息是保存在文件中的 , 因此要查询进程或者线程的信息必须通过open或者fopen等方式操作文件来完成 。
Android的so调试的步骤略过 , 已经在上面提到的4个函数处下断点 , 注意下断点的技巧 , 下断点的时候 , 要在一个函数的第1条指令和最后一条指令的地方下断点 。
推荐阅读
- 基于区块链与IPv8构建零信任新一代安全网络
- 普洱茶不只王与后,王天下下关班章普洱茶开汤品鉴
- 安化黑茶千两茶价格,安化黑茶千两茶与百两茶的区别是什么
- 如何帮助孩子面对负面情绪 怎么与孩子谈论负面情绪
- 郑浩南|郑浩南婚变后坐游艇出海,与前女友罕同框,戴34万金表抢镜
- Angelababy|Angelababy抽烟视频博主赚23万,与赵丽颖撞衫,8000万颜值会输吗
- 米勒|55岁周慧敏与男星亲密相拥,穿抹胸裙大秀身材,白到发光仍似少女
- 初中孩子不懂得与他人分享怎么做
- 郭晓婷|杨紫资源飞升,与陈晓、丁程鑫强强联手,被爆出演尔冬升新剧
- 病毒与木马电脑中毒症状 电脑中毒的表现