当前位置: 首页 > news >正文

Android 混淆是啥玩意儿?

什么是混淆

Android混淆,是伴随着Android系统的流行而产生的一种Android APP保护技术,用于保护APP不被破解和逆向分析。简单的说,就是将原本正常的项目文件,对其类、方法、字段,重新命名a,b,c…之类的字母,达到混淆代码的目的,这样反编译出来,结构乱糟糟的。

混淆的优缺点

优点:
  • 代码混淆后阅读性降低,反编译后破译程序难度提高

  • 混淆后字节数减少,减少了应用的体积

缺点:
  • 混淆后,测试不充分可能导致某些功能不能使用

  • 混淆只能提高反编译的门槛,并不能完全做到代码安全

如何开启混淆

Android自带一个混淆规则文件proguard-android.txt,这个文件在SDK目录下,里面有一些默认自带的规则。

混淆规则基本语法

混淆文件采用白名单法,意思是不在白名单里面的都要混淆。

#代表行注释符
-表示一条规则的开始
keep 保留,例如keepattributes:表示保留属性
dont 不要,例如dontwarn:表示不要提示警告
ignore 忽略,例如ignorewarning:表示忽略警告
配置中开启混淆
android{buildTypes {release {buildConfigField "boolean", "LOG_DEBUG", "false" //不显示logminifyEnabled trueshrinkResources trueproguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'signingConfig signingConfigs.config}}
}
测试面对混淆

如上文所说混淆的缺点,部分功能混淆后可能不正常

解决方法:
  • 一轮测试尽可能的使用混淆包测试;

  • 与开发沟通有新的混淆规则时,重点测试;

  • 回归测试必须使用混淆包测试;

混淆log:

混淆应用产生崩溃时,崩溃log也是混淆的

java.lang.NullPointerException:at java.io.File.<init>(File.java:282)at atx.a(SogouSource:497)at awl.a(SogouSource:1117)at com.sogou.expression.getCommitExpressionResult(SogouSource:297)at com.sohu.inputmethod.sogou.MainImeServiceDel.a(SogouSource:3704)at com.sohu.inputmethod..commitExpression(SogouSource:750)at asz$11.a(SogouSource:505)at asz$11.a(SogouSource:484)at aqj$1.onClick(SogouSource:112)at android.view.View.performClick(View.java:6325)at android.view.View$PerformClick.run(View.java:25126)
如何解混淆log:

Android SDK 默认提供了混淆解析工具,可分别使用命令行和GUI两种方式解析,工具位置:<SDK目录>\tools\proguard\bin 

解析日志时,需要release打包同时生成的mapping.txt文件,此文件每次打包都不一样

retrace.bat: 命令行工具(windows版本是retrace.bat,Mac/Linux上是retrace.sh) 

proguardgui.bat: GUI工具

命令行解析

retrace.bat -verbose mapping.txt obfuscated_trace.txt

GUI工具

  1. 运行proguardgui.bat

  2. 从左边的菜单选择“ReTrace”

  3. 在上面的Mapping file中选择你的mapping文件,在下面输入框输入要还原的代码。

  4. 点击右下方的“ReTrace!”

图片

如此,就可以给开发提供一份完整的崩溃log了

http://www.lryc.cn/news/309464.html

相关文章:

  • 【嵌入式——QT】QListWidget
  • 爬虫入门到精通_基础篇5(PyQuery库_PyQuery说明,初始化,基本CSS选择器,查找元素,遍历,获取信息,DOM操作)
  • 用冒泡排序模拟C语言中的内置快排函数qsort!
  • 智慧公厕:打造智慧城市环境卫生新标杆
  • 【学习版】Microsoft Office 2021安装破解教程
  • 基于java Springboot实现课程评分系统设计和实现
  • git操作基本指令
  • YOLO算法
  • 【Android】更改手机主题导致app数据丢失问题
  • Dell R730 2U服务器实践3:安装英伟达上代专业AI训练Nvidia P4计算卡
  • Nacos环境搭建 -- 服务注册与发现
  • Linux了解
  • Keil新版本安装编译器ARMCompiler 5.06
  • 【基础训练 || Test-1】
  • Python读取hbase数据库
  • LeetCode41题:缺失的第一个正数(python3)
  • C# DataTable 对象操作
  • web运行时安全
  • FPGA 与 数字电路的关系 - 这篇文章 将 持续 更新 :)
  • 18 SpringMVC实战
  • Rocky Linux 运维工具 dnf
  • 浅谈 Linux fork 函数
  • golang 装饰器模式详解
  • 刷题笔记day27-回溯算法2
  • 前端架构: 脚手架命令行交互核心实现之inquirer和readline的应用教程
  • 【C++初阶】内存管理
  • 《PyTorch深度学习实践》第十二讲循环神经网络基础
  • 蓝桥杯算法题汇总
  • 【MySQL】学习多表查询和笛卡尔积 - 副本
  • C++设计模式_创建型模式_工厂方法模式