现在最流行的App破解技术大多是基于一定相关技术的基础:如一定阅读Java代码的能力、有一些Android基础、会使用eclipse的一些Android调试的相关工具以及了解一些smali的语法规范和字段的自定范围,再利用现有的各种工具:如APKtool、dex2jar、jd-gui以及签名工具。有了这些前基础和工具,就可以破解很多没有加反编译保护措施的App。

那么如何就安卓App安全进行保护了,以下内容将会为读者作出详解。
安卓App安全包含很多内容,其中包括混淆代码、整体Dex加固、拆分Dex加固、虚拟机加固等方面。事实上,这些内容也是国内近几年Android App安全保护的一种主要趋势。

一、混淆代码

Java代码是非常容易反编译的,作为一种跨平台的、解释型语言,Java 源代码被编译成中间“字节码”存储于class文件中。由于跨平台的需要,这些字节码带有许多的语义信息,很容易被反编译成Java源代码。为了很好地保护Java源代码,开发者往往会对编译好的class文件进行混淆处理。

混淆就是对发布出去的程序进行重新组织和处理,使得处理后的代码与处理前代码完成相同的功能,而混淆后的代码很难被反编译,即使反编译成功也很难得出程序的真正语义。ProGuard就是一个混淆代码的开源项目,能够对字节码进行混淆、缩减体积、优化等处理。

Proguard处理流程图如下所示,包含压缩、优化、混淆、预检四个主要环节:

  • 压缩(Shrink):检测并移除代码中无用的类、字段、方法和特性(Attribute);
  • 优化(Optimize):对字节码进行优化,移除无用的指令。优化代码,非入口节点类会加上private/static/final,没有用到的参数会被删除,一些方法可能会变成内联代码;
  • 混淆(Obfuscate):使用a、b、c、d这样简短而无意义的名称,对类、字段和方法进行重命名;
  • 预检(Preveirfy):在Java平台上对处理后的代码进行预检,确保加载的class文件是可执行的。

 

二、整体Dex加固

为了加强Android保护强度,随着安全技术的发展,又出现了新型的“加固技术”。DEX加固是对DEX文件进行加壳防护,防止被静态反编译工具破解而泄露源码,最刚开始出现的是整体加固技术方案。

整体加固技术的原理如上所示,包括替换application/classes.dex、解密/动态加载原classes.dex、调用原application相关方法、将原application对象/名称设置到系统内部相关变量四大环节。其中最为关键的一步就是解密/动态加载原classes.dex,通过加密编译好的最终dex源码文件,然后在一个新项目中用新项目的application启动来解密原项目代码并加载到内存中,再把当前进程替换为解密后的代码,能够很好地隐藏源码并防止直接性的反编译。

三、拆分Dex加固

随着业务规模发展到一定程度,不断地加入新功能、添加新的类库,代码在急剧膨胀的同时,相应的apk包的大小也急剧增加,那么简单的整体加固方案就不能很好地满足安全需求,在整体加固方案之外又出现了拆分加固的技术方案。

但是如上所示,dex文件在加固时,针对中间缺失的一部分数据会以解密后的数据来替换,有的时候这种拆分替换也会导致数据不准确。那么到底应该拆分什么样的数据呢?就需要了解一下dex文件的数据结构。

Dex文件结构极为复杂,以下图示选取了其中较为重要的内容。事实上,dex文件是一个以class为核心组装起来的文件,其中最重要的是classdata和classcode两部分,有其特定的接口和指令数据,选取这两部分来拆分的话,即使拆分出来也不会泄露class数据和字节码数据,反编译出来也不完整,安全性较高。

四、虚拟机加固

虚拟机加固也属于dex拆分加固的一种,它是对字节做了一些变化处理。如下所示,这是一个正常安卓系统中的代码,在其中进行了虚拟机加固操作:

以add-int v0, v1, v2、sub-int v0, v1, v2、mul-int v0, v1, v2这三条指令进行替换,然后进行加固编译,这样子操作后,即使把替换后的数据恢复了,也不会以add-int v0, v1, v2、sub-int v0, v1, v2、mul-int v0, v1, v2这三条指令进行替换,然后进行加固编译,这样子操作后,即使把替换后的数据恢复了,也不会变形成为之前的字节码,安全系数较高。

以上是3月17日在重庆举办的安卓巴士全球开发者论坛上,网易资深安全工程师钟亚平《安卓App逆向与保护》演讲的重点节选。

完整演讲内容请见这里:一文了解安卓App逆向分析与保护机制

相关阅读:大公司怎么做Android代码混淆的?

一文读懂加固apk的开发者是怎么想的

关于网易易盾的加固保护

当前安卓App加固到底该如何做到防篡改?

安卓App逆向保护作为开发工作中的重要内容,一直是网易云易盾致力于提供的应用服务。

网易云为您提供iOS应用加固 、 Android应用加固服务,点击均可免费体验。

Android App的破解技术有哪些?如何防止反编译?相关推荐

  1. android安全检测工具,梆梆安全 - 防止反编译|APP安全加固|应用加固|盗版监测

    android安全检测工具,梆梆安全 - 防止反编译|APP安全加固|应用加固|盗版监测 https://dev.bangcle.com/ 业内专业的应用加固服务供应商 帮助数十万APP抵御破解风险, ...

  2. 【破解利器】反汇编工具 and 反编译(Decompilers)

    今天给大家放上 破解利器 之 反汇编工具 and 反编译(Decompilers) 篇 反汇编工具 IDA Pro IDA Pro是DataRescue开发的专业反汇编工具, IDA Pro是一款专业 ...

  3. 【APP渗透测试】 Android APP渗透测试技术实施以及工具使用(客户端服务端)

    文章目录 前言 一.安全威胁分析 二.主要风险项 三.Android测试思维导图 四.反编译工具 五.Android客户端 漏洞一.Jnaus漏洞 漏洞二.数据备份配置风险漏洞 漏洞三.Activit ...

  4. 开发一个android app需要的技术

    最近一直在忙着工作的事,很久没有更新博客了,今天突发奇想要把自己学到的android方面的知识记录下来,一方面是为了系统的回顾一下知识点自己的学习路线,另一方面希望能帮到更多初学的朋友.学习andro ...

  5. PyInstaller将Python文件打包为exe后如何反编译(破解源码)以及防止反编译

    ​ 在这里分享一些技巧和经验给大家.辛苦撰文分享,转载或引用请保留本文作者信息及文章链接. 作者的环境: win7+python3.5(anaconda3) 理论上,win7及以上的系统和python ...

  6. Unity3d 反编译破解游戏 简单示例 使用ildasm反编译DLL修改然后重新编译DLL

    因为这几天碰到一个Unity的Bug,不得不去反编译DLL看看C#代码的生成中间件代码.这也用到了一些反编译以及重新编译DLL的一些知识,意味到Unity是如此的不安全. 首先我们新建一个工程,创建一 ...

  7. Android逆向笔记-通过ApkTool源码分析未能反编译APK的原因

    如下错误: 这里可以看到一个IO错误:Expected: 0x001c0001, got: 0x00000001 这里看下源码: 看下还有哪个个地方调用了他 下面来看下这个CHUNK)STRINGPO ...

  8. android开发入门与实践_我的新书《Android App开发入门与实战》已经出版

    前言 工作之余喜欢在CSDN平台上写一些技术文章,算下时间也有两三年了.写文章的目的一方面是自己对技术的总结,另一方面也是将平时遇到的问题和解决方案与大家分享,还有就是在这个平台上能和大家共同交流. ...

  9. 安居客 Android App 走向平台化 | CSDN 博文精选

    作者 | 张磊 责编 | 屠敏 出品 | CSDN博客 安居客 Android App 距离上次的模块化/组件化重构已经两年多了,重构之后很好的支撑了两年多以来的业务发展.但这个世界总是在向前走的,没 ...

  10. 【移动安全实战篇】————3、Android应用程序破解入门

    Android软件越来越多的走向免费加广告模式了,但在我们日常应用中,还是不乏一些收费应用,一部分通过Market收费下载,另一部分将收费部分放到了软件的实现中,我们今天要讨论的就是后者,就我见到的一 ...

最新文章

  1. SQL server 2005中无法新建作业(Job)的问题
  2. 为窗体添加 最大化,最小化,还原等 事件
  3. centos 5.8 升级php5.1至5.3
  4. 《RPA、AI、.NET Core 与未来》-中国.NET开发者峰会
  5. 使用named_mutex实现锁机制
  6. PHP验证码常用的函数记录
  7. 2021甘肃平凉高考成绩查询,甘肃省教育考试院:2021年甘肃高考查分入口、查分系统...
  8. 华为9月3日或推出麒麟9000;TiDB 3.0.18 发布| 极客头条
  9. ADO SQL手写分页
  10. 2.3,2.2,2.1最新谷歌服务包发布附下载(原创)
  11. 批量识别PDF文件(图片类型)中的文字
  12. 从0到1教你画原型图
  13. Azure实现虚拟机的自动开关机
  14. 达观数据荣获认知图谱产业建设“创新突破奖”,并与图谱知名专家共同探讨工业知识图谱应用落地
  15. 打印机共享计算机密码,打印机共享需要密码,教你打印机共享需要密码怎么解决...
  16. list移除元素时报错
  17. 过宝塔php大马,分享宝塔网站防火墙使用帮助
  18. stormmedia文件夹,360downloads文件夹,FavoriteVideo文件夹是干什么的?
  19. PPT难做?花太长时间?收藏这4个网站,省时省力效率提升不止一倍
  20. bootstrap网格系统

热门文章

  1. 使用vld查看OPCode
  2. SuperMap iDesktopX 数据迁移
  3. 安卓bochs安装linux教程,Ubuntu环境下安装Bochs
  4. 详解KVM虚拟化原理
  5. matlab bode 频率,matlab – bode和freqz之间的区别
  6. mac下解压war包
  7. 关于laydate 日期插件 点击闪退的问题
  8. JS 获取当前页面url(不含参数)
  9. 数据分析:数据分析工具:SPSS、RapidMiner、KNIME、Kettle
  10. html默认初始代码