专栏首页搜狗测试Android 混淆是啥玩意儿?

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" //不显示log
            minifyEnabled true
            shrinkResources true
            proguardFiles 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了

本文分享自微信公众号 - 搜狗测试(SogouQA),作者:undefined

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-08-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 测试利器之Mock server

    【问题分析】 通过Fiddler抓包查看请求,Moco Server已经返回了对应的XML文件,但是浏览器还是依然报错,如图所示:

    用户5521279
  • 如何快速推行单元测试

    众所周知,在软件开发流程中,问题发现的的越早修复成本越低,而单元测试就是让问题能够提早发现的一大利器。那我们在团队中,又该如何去利用这把利刃,以提升我们的工程效...

    用户5521279
  • Cypress实践记录

    前一段时间,在前端开发同学的推荐下,了解到一个前端自动化测试工具Cypress,趁着这个机会,将自己的调研记录以及在项目上的实践进行总结。如果想了解...

    用户5521279
  • Android 混淆那些事儿

    本文主要讲述了代码混淆和资源混淆的原理,Studio默认的混淆方案,混淆的参数,以及如何对Apk进行代码混淆(自定义混淆文件)和资源混淆(结合微信混淆和美团混淆...

    腾讯Bugly
  • Android-Proguard(混淆)

      混淆这玩意,也是经常用,但也是没总结,趁端午有假有时间,就在这里整理一下,也祝大家端午快乐。

    android_薛之涛
  • Android 混淆从入门到精通

    ? 简介 作为Android开发者,如果你不想开源你的应用,那么在应用发布前,就需要对代码进行混淆处理,从而让我们代码即使被反编译,也难以阅读。混淆概念虽然容...

    非著名程序员
  • enphp一个开源加密混淆PHP代码项目

    一个开源加密混淆 PHP 代码项目// a Open Source PHP Code Confusion + Encryption Project

    Inkedus
  • C#判断文件是否被混淆

    可以使用混淆工具对一个DLL 和 exe 进行混淆。 但是如何知道一个文件是否已经混淆了。 在发布之前,需要知道是不是有文件忘了混淆。

    林德熙
  • linux的那些事

    每天在哔哩哔哩看黑马程序员的python教程20课时 ###2.每天必须记写笔记,并且在博客上发布

    blankmiss
  • Delphi条件编译时编译器的版本号

    VER180 : Delphi 10.0 CodeGear 2006/2007 VER185 : Delphi 11.0 CodeGear 2007 VER...

    战神伽罗

扫码关注云+社区

领取腾讯云代金券