Android应用如何防止被反编译

25 sec read

上一遍文章讲到了如何一键反编译Android应用,反编译Apk文件常见的影响为:1、窃取源码,2、解获取源码后,嵌入恶意病毒、广告等行为再利用工具打包、签名,形成二次打包应用。下面主要讲的是如何防止反编译。

一、使用ProGuard对代码进行混淆(初级)

ProGuard是一个压缩、优化和混淆Java 字节码文件的软件。它可以删除无用的类、字段、方法和属性。还可以删除没用的注释,优化字节码文件。它还可以使用简短的无意义的名称来重命名已经存在的类、字段、方法和属性。混淆可以保证代码在被反编译后很难读懂,防止逆向工程。

它具有以下功能:

  • 压缩 – 移除无效的类、属性、方法等
  • 优化 – 优化bytecode移除没用的结构
  • 混淆 – 把类名、属性名、方法名替换为晦涩难懂的1到2个字母的名字

当然它也只能混淆Java代码,Android工程中Native代码,资源文件(图片、xml),它是无法混淆的。而且对于Java的常量值也是无法混淆的,所以不要使用常量定义平文的密码等重要信息。

ProGuard的生成文件介绍

  • txt —> 表示混淆前后代码的对照表,这个文件非常重要。如果你的代码混淆后会产生bug的话,log提示中是混淆后的代码,希望定位到源代码的话就可以根据mapping.txt反推。每次发布都要保留它方便该版本出现问题时调出日志进行排查,它可以根据版本号或是发布时间命名来保存或是放进代码版本控制中。
  • txt —> 描述apk内所有class文件的内部结构
  • txt —> 列出了没有被混淆的类和成员
  • txt —> 列出了源代码中被删除在apk中不存在的代码

ProGuard不混淆

  • 反射用到的类
  • Android中Manifest中配置的类(Activity、Service等的子类及Framework类默认不进行混淆)
  • Jni中调用的类
  • 用到的第三方的jar包
  • 表示保留本地的bean文件下的实体类
  • 特别处理js与本地原生组件之间的调用过程
  • 自定义不混淆的类

官网:http://proguard.sourceforge.net/

二、购买或使用第三方加密服务

目前成熟的第三方解决方案

1)娜迦

针对Android平台下的APP被逆向分析,破解,植入木马病毒后,用户敏感信息泄露或者被钓鱼网站劫持,NAGA Android保护采用防止静态分析与防止动态调试全面防护的思路,在未保护程序运行的不同周期采取不同程度的加固措施,可以针对银行、基金、券商,电商等需在线支付领域及游戏领域,提供定制型APP安全解决方案。

主要实现:

  • 类抽取:保护dex文件,防止静态分析及动态破解
  • 代码加解密:保护so文件,防止静态破解
  • 网络访问控制:保护so文件,拦截恶意广告,阻止注入型木马
  • 敏感文件检测:保护so文件,防止静态调试
  • 整体包裹:保护dex文件,防止静态破解
  • 利用重定位清除ELF头:保护so文件,利用系统机制ELF头已经被系统清除,不兼容X86处理器
  • 字符串表加密:保护so文件,防止静态破解
  • 检查核心库:保护so文件,防止功能性数据库被劫持
  • 检查调试器:保护so文件,防止动态调试
  • Xposed检查:保护so文件,防止so文件,防止静态调试,防dump 防xposed脱壳神器对加固apk进行一键脱壳
  • 防止跟踪:保护so文件,防止动态跟踪
  • 强力清除ELF头:保护so文件,防止静态分析
  • 中间码乱序:保护smali文件,dex保护,防止静态分析,不兼容0 ART模式
  • 重定位加密壳段:保护so文件,对抗静态分析
  • 壳完整性检查:保护so文件,防止对APP程序中的壳段进行修改、调试 兼容性100%

2)爱加密

爱加密主要功能:

  1. 漏洞分析:
  • 文件检查:检查dex、res文件是否存在源代码、资源文件被窃取、替换等安全问题
  • 漏洞扫描:扫描签名、XML文件是否存在安全漏洞、存在被注入、嵌入代码等风险。
  • 后门检测:检测App是否存在被二次打包,然后植入后门程序或第三方代码等风险。
  • 一键生成:一键生成App关于源码、文件、权限、关键字等方面的安全风险分析报告。
  1. 加密服务:
  • DEX加壳保护:DEX文件加壳保护对DEX文件进行加壳防护,防止被静态反编译工具破解获取源码。
  • 内存防dump保护:防止通过使用内存dump方法对应用进行非法破解
  • 资源文件保护:应用的资源文件被修改后将无法正常运行
  • 防二次打包保护:保护应用在被非法二次打包后不能正常运行。
  • 防调试器保护:防止通过使用调试器工具(例:zjdroid)对应用进行非法破解
  • 多渠道打包:上传1个APK,通过选择android:name和填写android:value来实现对每一个渠道的包的生成和加密
  • 漏洞分析服务:漏洞分析采用文件检查、漏洞扫描、后门检测等技术方向对APK进行静态分析并支持一键生成分析报告
  • 渠道监测服务:监控国内400多个渠道市场入口,对应用的各渠道的下载量、版本信息、正盗版进行一站监控
  • 签名工具:爱加密提供纯绿色签名工具,支持Windows、Linux和MAC系统,同时支持批量签名
  • DEX专业加壳保护:本服务是对安卓DEX文件进行加壳保护,有效防止所有静态调试器对APK进行破解
  • DEX专业加花保护:本服务对安卓DEX文件进行加入花指令(无效字节码)保护
  • 资源文件指纹签名保护:对资源文件指纹签名进行验证保护,有效防止资源文件被篡改
  • 高级防二次打包保护:本服务对APK进行防止二次打包保护,防止APK被使用非法手段修改替换文件后进行二次打包
  • 高级防调试器保护:防止通过使用调试器工具(如:zjdroid、APK改之理、ida等)对应用进行非法破解
  • 高级内存保护:本服务是对内存数据的专业高级保护,可防止内存调试,防止通过dump获取源码,防止内存修改
  • 截屏防护:防止黑客通过截屏形式获取应用账号、应用密码、支付银行卡号、支付银行卡密码,支持安卓所有机型
  • 本地数据文件保护:对APK应用的网络缓存数据、本地储存数据(提供SDK)进行深度保护
  • 源码优化:1) 一键清除Log(开发日志)信息;2) 一键优化减少加密后增大的源用包大小
  • 防止脚本:本服务爱加密提供防止脚本SDK,用户根据开发帮助文档进行二次开发,此保护项可有效防止游戏非法使用脚本
  • 防止加速器:防止游戏使用加速器,破坏游戏公平(如:防八门神器和葫芦侠中的加速器功能)
  • 防止模拟器运行:防止模拟器非法运行(可以防止运行在PC上的任何类型的android模拟器)
  • 防止内购破解:防止游戏被内购破解(如:游戏内部有支付项,可以防止支付项相关内容被破解)
  • SO文件保护:so文件专业保护,对so文件进行优化压缩、源码加密隐藏、防止调试器逆向分析
  1. 渠道监测:
  • 渠道数据监控
  • 精准识别渠道正盗版
  • 盗版APP详情分析

3)梆梆加固

提供的移动应用保护服务:

  • 防逆向保护:以加密代码的方式阻止反编译,从而防止被窃取代码和创意
  • 防篡改保护:通过对app的完整性保护,防止app被篡改或者盗版
  • 反调试保护:阻止应用运行中被动态注入,防止被外挂,木马偷窃账号密码,修改交易金额等
  • 存储数据加密保护:更底层,跨文件格式的数据加密,防止应用数据被窃取
  • 环境监测和保护:云监测设备环境,防止盗版应用,恶意应用的钓鱼攻击

4)360加固保

加固保为移动应用提供专业安全的保护,可防止应用被逆向分析、反编译、二次打包,防止嵌入各类病毒、广告等恶意代码,从源头保护数据安全和开发者利益,主要提供:

  • 反篡改:通过签名校验保护,能有效避免应用被二次打包,杜绝盗版应用的产生
  • 反窃取:对内存数据进行变换处理和动态跟踪,有效防止数据被获取和修改
  • 反逆向:对代码进行加密压缩,可防止破解者还原真实代码逻辑,避免被复制
  • 反调试:多重手段防止代码注入,可避免外挂、木马、窃取账号密码等行为

最后的总结:软件安全领域的攻防向来是道高一尺魔高一丈,因此防破解或防止反编译是一项需要长期持续研究和改进的工作。

打赏作者
微信支付标点符 wechat qrcode
支付宝标点符 alipay qrcode

C语言学习:size_t

在学习C语言的时候,遇到了一个新的数据类型size_t,截止目前也没有完全理清这个类似的具体场景及出现的原因。
44 sec read

C语言学习:main()函数的正确写法

C语言虽然是一门古老的语言,但是其标准一直在完善,所以很多以前支持的语法在到当前已经不能在使用了。 C语言的版
41 sec read

Scipy数学函数的Scala实现

最近在推进项目的时候,遇到需要将线下的Python代码转化成线上的集群代码,由于机器代码环境是Scala,所以
4 min read

发表评论

电子邮件地址不会被公开。 必填项已用*标注