根据国家互联网金融风险分析技术平台监测数据显示:截至 2020 年 5 月底,共发现 2801 个互联网金融仿冒 App ,仿冒 App 下载量高达 3343.7 万次。

“李逵”和“李鬼”

互联网环境下,盗用和剽窃能有多简单?

先看一波新闻标题感受下:

  • 《北斗卫星导航系统全球免费,却因山寨app收费20元连中国人都误会》
  • 《500万人用山寨12123查违章?高仿APP不只是坑钱》
  • 《关注:小米金融被骗子盯上遭假冒,真假难辨山寨APP要警惕!》
  • ……

根据国家互联网金融风险分析技术平台监测数据显示:截至 2020 年 5 月底,共发现 2801 个互联网金融仿冒 App ,仿冒 App 下载量高达 3343.7 万次。

伴随着移动应用数量的井喷式增长,对于一个 App 来说,被山寨和盗版无疑成为了每一个应用开发者最头疼与烦恼的问题之一。

移动端黑产日益壮大,伴随而来的逆向攻击手段也越来越高明,基于 java 开发的 Android 应用因其语言的特性和系统的开源属性,大量 Android 应用程序面临着应用程序遭逆袭破解、知识产权被侵犯、被二次打包签名等安全问题。

为解决上述问题,在 APK 上传至应用市场之前,需要先对 APK 进行加固并对加固后的 APK 进行兼容性测试,可最大限度保障应用不被破解。

加固技术的演进与优化

传统加固


第一代加固技术采用的是Dex加密存储,解密时落地;落地之后通过自定义的DexClassLoader将解密出的Dex加载到内存中,然后程序运行该文件(Dex是APK的Java代码经过编译后生成的文件,可以简单理解为Java的逻辑)。

其脱壳方式很简单:因为Dex加密是整体进行的,解密时还会落地。可以通过HOOK文件操作(Read、Write、Delete)将Dex文件脱壳出来,通过反编译工具分析,从而得到APP的核心逻辑。


之后对第一代版本进行了升级,与未升级版相比:Dex加密存储方式相同,但解密时不落地;解密之后在内存中通过自定义DexClassLoader进行加载。升级版本的脱壳方法也比较简单,主要采用内存Dump方法,将文件写到磁盘中,通过HOOK dvmDexFilePartial的方式达到脱壳目的。


第二代加固方式采用的是Dex Method方法抽离,Dex在内存中加载时不连续。其原理是:Method方法通过一些加固方法抽离,APK在运行时,整个Dex会一并修复,然后在内存中运行,也就说在内存中有着完整的Dex代码。第三代方式与第二代相比同样是采用Dex Method方法抽离,但Dex执行中动态解密。两者的差异在于:后者在APK运行时,Dex文件是不进行修复的,而是等到Class被执行时才进行解密。


对第二代和第三代进行脱壳前,需要先了解Dex结构。Dex结构从dex_header开始,在头部存在Dex的标志位;然后逐步按结构指向Method结构体,Method结构中的code_off字段最终指向可执行代码。因此在第二代和第三代的脱壳过程中,需要HOOK DVM虚拟机中很底层的函数,从而拿到需要执行的APK的类,进而得知Class object全部方法;然后在内存中对DEX进行重建,重建之后再将其Dump到本地,得到脱壳之后的Dex文件,便于后续采用工具分析。


除了上述的脱壳方式之外,通用的脱壳机(开源的Zjdroid、DexHunter)也可以轻松脱掉大部分壳;并且,由于传统的加固方式容易被脱壳,导致目前脱壳类教程非常之多。因此,传统的加固方式面临着很大的挑战。

全量混淆

针对层出不穷的脱壳方式。阿里内部经过多次讨论后,认为传统的加固方式已过时,需要转变思路:混淆。

ProGuard混淆


在APP发布前,通常会对应用进行ProGuard混淆,类似上图的配置。图中的proguard-android.txt/proguard-rules.pro是ProGuard的混淆规则。在Java中,某些特性如反射调用以及可序列化类等是需要保留的,因此需要人工配置一些复杂的规则。当规则全部配置成功后,对APK进行反编译,从上图可以看到某些逻辑被混淆成了a、b、c等,进而大大增加了黑客逆向分析的难度。


通过混淆可以增加逆向分析的难度,但并不代表着不能分析。上图是对金山隐私保险箱逆向分析的案例,通过反编译工具分析,得知金山隐私保险箱对其核心代码进行了混淆,例如它的类名是a、b、c等形式。由于ProGuard混淆时需要配置很多规则,很多开发人员为了保障兼容性会保持很多类,导致APK内的逻辑并不全部混淆,进而导致安全性的降低,通常ProGuard混淆率在10%-30%。


为了解决ProGuard混淆需要配置很多规则导致混淆效率低下的问题,阿里内部研发了全量混淆技术。上图左侧是手淘在未混淆之前的反编译情况,其中的类、函数名都是一目了然的;经过全量混淆之后的效果图如右侧所示:类名全部变成了a、b、c的类型,并且全量混淆几乎是不用任何配置的,大大降低了使用成本。目前,全量混淆已在线上对外发布。

优化瘦身

随着APK功能的增加,其体积也在不断地增大,例如手淘、支付宝等应用达到五十几兆、游戏类的APK达到几百甚至上千兆,进而引发了手机资源存储、用户下载流量浪费等问题。因此APK优化瘦身势在必行。


APK优化瘦身的实现逻辑主要包括:首先,清除Dex文件Debug信息,减少编译器自动产生函数,优化性能,减少体积;其次,通过Java层拦截技术,对SO进行重新打包压缩,减少体积;同时,修改Android应用资源名称,通常资源名称是带有实际意义的,通过将带有实际意义的长文件名修改成上文所示的a、b、c等形式既减少应用体积,又提高了资源保护强度;此外,通过自行开发的7z工具,对签名后的APK包重新压缩,达到进一步减少体积的目的。


上图是阿里内部应用优化瘦身之后对比效果图,从图中可以看到手淘、支付宝、钉钉瘦身前后的对比,瘦身效果可以达到10%左右。


上图是市场上常见应用瘦身前后的对照表,微博、百度地图等应用优化后的减少百分比可达到百分之十几;华为账号等应用优化瘦身减少率甚至达到40+%。通常应用优化瘦身减少率在15%-20%,具体数值和APK的开发质量有关。

  • 以上内容来自于:《APP加固新方向——混淆和瘦身》
  • 公众号“mPaaS”回复“安全加固”获取完整 PPT 内容

开发不易,阿里”固“你

针对市面上移动应用普遍存在的破解、篡改、盗版、钓⻥欺诈、内存调试、数据窃取等各类安全风险,mPaaS 「移动安全加固」依赖于阿里云集团的移动安全加固技术,经历了淘系等亿级应用的安全性考验。

能够有效为移动应用提供稳定、简单、有效的安全保护,提高 App 的整体安全水平,力保应用不被逆向破解,在安全性上具有非常可靠的保障。

基本原理

「移动安全加固」通过对 Android 应用重新编译、加壳保护、修改其指令调用顺序等手段来增强应用的反破解能力。在加固过程中,注重加固强度与兼容性并重,避免一般加固功能由于盲目追求加固强度而导致加固后应用完全不可用的问题。

产品优势

核心能力

① App 自身安全保护

② 深度安全检测

✨点击此处立即接入✨

如有更多接入相关问题,欢迎使用钉钉扫码或搜索33417739入群交流

mPaaS 移动安全加固正式公测上线:公有云限时免费体验


关注公众号「mPaaS」,回复“安全加固”,获取《APP加固新方向——混淆和瘦身》完整讲义

辛苦开发的 App 被山寨?阿里帮你为 APK 上把加固锁相关推荐

  1. 如何零基础快速开发上手app,成为app开发高手

    本文针对小白用户对App做一个简单的介绍,介绍了App都有哪些类型,不同的类型app开发需要哪些技术,用户可以根据自己的需求选择不同的App开发,若不懂技术,没有资金怎么开发app. 一 .App有哪 ...

  2. Android Studio开发安卓app 安卓与webview中的js交互

    Android Studio开发安卓app 安卓与webview中的js交互 1.webview中的页面调用android中的方法 在Android Studio开发安卓app 封装WEB(H5,UR ...

  3. i国网app苹果版_阿里云盘app苹果版 -阿里云盘app官方手机版下载

    阿里云盘app苹果版:阿里云盘,更智能化的云存储.阿里云盘是阿里云团队开发的云硬盘软件.有了阿里云盘,您可以体验到更快.更安全.更可靠.更智能的云服务.巨大的云存储空间还支持5g下载,下载速度极快,无 ...

  4. 开发步骤_直播软件开发直播APP开发具体步骤

    时间直播软件开发-直播APP开发具体步骤 一款APP从最开始的念头变为最后商品,必须资金投入很多的人工成本,在新项目进行的前期,针对要求的沟通交流也十分关键,要求文档越详尽.越确立,能够让最后的商品更 ...

  5. 倾心家教安卓案例开发代码_开发一个APP多少钱?

    从事互联网十余年,期间不少咨询这问过这个问题"开发一个APP多少钱?" 抠下字眼"开发"而不是购买,购买分多种方式,一种是买断,买的是源码(就是编写这个APP的 ...

  6. 针对正方教务开发大学App(查成绩,课表,一键评教,图书馆,正方系统)

    针对正方教务开发大学App(查成绩,课表,一键评教--) 大一时针对我校开发的校园客户端,方便学生查课表.成绩.一卡通消费记录.失物招领等等.遵循MD设计原则,数据大多通过抓包获取,现开源(已屏蔽学校 ...

  7. 【详细教程】App inventor连接阿里云平台(APP显示STM32发来的温湿度数据等)

    前言: 目前已经成功将esp8266连接上了阿里云平台,实现了温湿度等数据的上云操作.但是在阿里云查看数据非常的不方便,因为阿里云的Web网页版都是临时的,链接在一段时间后会失效,除非绑定了域名才能长 ...

  8. 开发一个app需要多少钱

    App应用开发是目前最热门的产业,很多企业都想通过app的开发来进入移动互联网市场分一杯羹. 那么你一定很想知道开发一个app需要多少钱吧?那下面企业帮就来帮大家计算一下费用吧. 面对app抄袭成风的 ...

  9. 想开发手机APP软件,首先要弄清楚以下10点

    当今互联网时代,手机app软件开发已经成为时代的潮流,企业想开发自己的专属手机软件APP,却不知道怎么去和手机软件开发公司谈合作,更不知道一款手机APP开发需要经历哪些流程,因此,达不到各取所需的成效 ...

  10. 不敲代码用ChatGPT开发一个App

    先说下背景,有一天我在想 ChatGPT 对于成熟的开发者来说已经是一个非常靠谱的助手了,身边也确实有很多同事把它作为一个离不开的助理担当. 但是如果我只是略微懂一点前端知识的新人,了解 HTML.C ...

最新文章

  1. linux 脚本向标准输入,linux中的标准输出和输入
  2. Download interrupted: URL not found.
  3. 崔强:如果有知识就做一个内裤外穿飞行的超人
  4. 曹大,欧神开新公众号了
  5. redis 源码 ziplist.c 压缩list的实现
  6. python 字体_python docx字体设置
  7. SpringCloud应用在Kubernetes上的最佳实践—开发篇
  8. python读取hadoop库数据_使用Python访问HDFS
  9. Spring Core Container 源码分析七:注册 Bean Definitions
  10. visual studio 最新稳定版本_速来围观!Android Studio 4.0 稳定版发布了
  11. python实验二序列_Python学习笔记二:02序列类型的各自方法
  12. 51单片机实现电子时钟代码
  13. 五款超级易用的网络监控软件
  14. 【应急基础】————13、VBS遍历目录获取文件Hash
  15. CSS布局:多种方案实现固定页脚(sticky footer)
  16. 搭建安卓打包环境,用官方示例anysdk生成apk运行
  17. Hive SQL 使用不了union all : SemanticException Cartesian products are disabled for safety reasons
  18. 读吴军老师的《浪潮之巅》总结
  19. Harmonious Attention Network for Person Re-Identification
  20. 参加项目管理培训的一些体会

热门文章

  1. Python之selenium进阶
  2. 《用户体验要素——以用户为中心的产品设计》读书笔记
  3. 3年间 女子称遭邻居报复放了上千条虫子
  4. 各证件号码(身份证、护照、军官证、驾驶证、港澳台湾通行证、户口簿)正则表达式校验 完整正确
  5. 编程题——真题训练一(WYYX)
  6. 短信在用户运营、召回流失用户中的重要作用
  7. 360路由器远程连接服务器,360路由器如何开启端口映射?
  8. 图解 OSPF :什么是 LSA ?
  9. PS 制作毛玻璃效果
  10. iOS 11 正式发布!最全功能介绍 + 视频 ...