混淆

Android Studio: 

只需在build.gradle(Module:app)中的buildTypes中增加release的编译选项即可,如下:

<code class="hljs bash has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"> buildTypes {
        release {
            minifyEnabled <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">true</span>
            proguardFiles getDefaultProguardFile(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'proguard-android.txt'</span>), <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'proguard-rules.pro'</span>
        }
    }</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li></ul>

这个proguard-android.txt是sdk中groguard默认的文件,具体地址在:/opt/sdk/tools/proguard/proguard-android.txt 

而proguard-rules.pro是AS中专用的proguard配置文件,其实只是后缀名不同,与Eclipse中的proguard-project.txt是一样的,配置规则相同,后面会详细提到。 

老版本开启混淆的命令是runProguard,现在统一用minifyEnabled命令了,将其设为true就好了。 

编译的时候可以使用命令:

<code class="hljs  has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">./gradlew assembleRelease</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>

或者用上一篇生成签名apk的办法都可。

Eclipse: 

在project.properties文件中开启proguard配置(放开注释),如下:

<code class="hljs avrasm has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">proguard<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.config</span>=${sdk<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.dir</span>}/tools/proguard/proguard-android<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.txt</span>:proguard-project<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.txt</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>

同样,生成签名时代码就会被混淆。

混淆语法 

请参考${sdk.dir}/tools/proguard/proguard-android.txt文件,需要注意的是文件中虽然有了不混淆Parcelable的语句,如下:

<code class="hljs php has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">-keep <span class="hljs-class" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">class</span> * <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">implements</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">android</span>.<span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">os</span>.<span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">Parcelable</span> {</span>
  <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">final</span> android.os.Parcelable<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$Creator</span> *;
}
</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li></ul>

但是还是要自己把继承自Parcelable的类写进来避免混淆,否则会出现BadParcelableException异常。

<code class="hljs avrasm has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">-keep class <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">com</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.linc</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.datatype</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.XXInfo</span> {*<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;}</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>

为微信分享而引入的jar包,我们不需要对其进行混淆,也需要在proguard-android.txt中注明,如下:

<code class="hljs avrasm has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">-keep class <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">com</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.tencent</span>.** { *<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; }</span>
-keep class <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">com</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.tencent</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.mm</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.sdk</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.openapi</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.WXMediaMessage</span> {*<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;}</span>
-keep class <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">com</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.tencent</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.mm</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.sdk</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.openapi</span>.** implements <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">com</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.tencent</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.mm</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.sdk</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.openapi</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.WXMediaMessage</span>$IMediaObject {*<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;}</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li></ul>

为了验证是否混淆成功,可以使用下面的反编译工具验证。


反编译

主要用到三个工具: 

dex2jar:将dex文件转为jar文件 

jd-gui:反编译jar文件 

AXMLPrinter2.jar:反编译xml文件

使用方法参见《反编译apk文件,得到其源代码的方法》

对于Ubuntu64位,运行jd-gui或许会报错: 

尝试解决如下:

<code class="hljs css has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">$ <span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">sudo</span> <span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">apt-get</span> <span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">install</span> <span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">libgtk2</span><span class="hljs-class" style="box-sizing: border-box; color: rgb(155, 112, 63);">.0-0</span><span class="hljs-pseudo" style="color: rgb(0, 0, 0); box-sizing: border-box;">:i386</span> <span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">libnss3</span><span class="hljs-pseudo" style="color: rgb(0, 0, 0); box-sizing: border-box;">:i386</span> <span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">libcurl3-gnutls</span><span class="hljs-pseudo" style="color: rgb(0, 0, 0); box-sizing: border-box;">:i386</span> <span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">libidn11</span><span class="hljs-pseudo" style="color: rgb(0, 0, 0); box-sizing: border-box;">:i386</span> <span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">libpango1</span><span class="hljs-class" style="box-sizing: border-box; color: rgb(155, 112, 63);">.0-0</span><span class="hljs-pseudo" style="color: rgb(0, 0, 0); box-sizing: border-box;">:i386</span> <span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">libpangox-1</span><span class="hljs-class" style="box-sizing: border-box; color: rgb(155, 112, 63);">.0-0</span><span class="hljs-pseudo" style="color: rgb(0, 0, 0); box-sizing: border-box;">:i386</span> <span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">libpangoxft-1</span><span class="hljs-class" style="box-sizing: border-box; color: rgb(155, 112, 63);">.0-0</span><span class="hljs-pseudo" style="color: rgb(0, 0, 0); box-sizing: border-box;">:i386</span> <span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">librtmp0</span><span class="hljs-pseudo" style="color: rgb(0, 0, 0); box-sizing: border-box;">:i386</span> <span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">libxft2</span><span class="hljs-pseudo" style="color: rgb(0, 0, 0); box-sizing: border-box;">:i386</span>
</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li></ul>

又报错:

<code class="hljs vhdl has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">$ /opt/sdk/tools/jd-gui: error <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">while</span> loading <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">shared</span> libraries: libXxf86vm.so<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.1</span>: cannot <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">open</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">shared</span> object <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">file</span>: No such <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">file</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">or</span> directory</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>

解决办法如下:

<code class="hljs css has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">$ <span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">sudo</span> <span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">apt-get</span> <span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">install</span> <span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">libgtk2</span><span class="hljs-class" style="box-sizing: border-box; color: rgb(155, 112, 63);">.0-0</span><span class="hljs-pseudo" style="color: rgb(0, 0, 0); box-sizing: border-box;">:i386</span> <span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">libxxf86vm1</span><span class="hljs-pseudo" style="color: rgb(0, 0, 0); box-sizing: border-box;">:i386</span> <span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">libsm6</span><span class="hljs-pseudo" style="color: rgb(0, 0, 0); box-sizing: border-box;">:i386</span> <span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">lib32stdc</span>++6

</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li></ul>

参考:

android混淆和反编译的更多相关文章

  1. Android混淆、反编译以及反破解的简单回顾

    =========================================================================虽然反编译很简单,也没下面说的那么复杂,不过还是转了过 ...

  2. android 混淆 与 反编译

    1, 文件 project.properties 修改: target=android-14proguard.config=${sdk.dir}/tools/proguard/proguard-and ...

  3. android apk 防止反编译技术第四篇-对抗JD-GUI

    又到周末一个人侘在家里无事可干,这就是程序员的悲哀啊.好了我们利用周末的时间继续介绍android apk防止反编译技术的另一种方法.前三篇我们讲了加壳技术(http://my.oschina.net ...

  4. Android程序的反编译对抗研究

    转自: http://www.freebuf.com/tools/76884.html 一.前言 对抗反编译是指让apk文件或者dex文件无法正常通过反编译工具,而且有可能导致工具异常或者崩溃,如ap ...

  5. android: 使用android逆向助手反编译APK

    第一步:下载逆向助手:(链接: https://pan.baidu.com/s/15jtoFDg9LWV80HREeyx5HA 提取码: k527 ) 第二步:将apk文件拷贝到逆向助手的apktoo ...

  6. 转: android apk 防止反编译技术(1~5连载)

    转: android apk 防止反编译技术 做android framework方面的工作将近三年的时间了,现在公司让做一下android apk安全方面的研究,于是最近就在网上找大量的资料来学习. ...

  7. android apk 防止反编译技术第一篇-加壳技术

    做android framework方面的工作将近三年的时间了,现在公司让做一下android apk安全方面的研究,于是最近就在网上找大量的资料来学习.现在将最近学习成果做一下整理总结.学习的这些成 ...

  8. .Net的混淆防反编译工具ConfuserEx--2(转)

    给大家推荐一个.Net的混淆防反编译工具ConfuserEx. 由于项目中要用到.Net的混淆防反编译工具. 在网上找了很多.Net混淆或混淆防反编译工具,如.NET Reactor.Dotfusca ...

  9. 给大家推荐一个.Net的混淆防反编译工具ConfuserEx

    给大家推荐一个.Net的混淆防反编译工具ConfuserEx. 由于项目中要用到.Net的混淆防反编译工具. 在网上找了很多.Net混淆或混淆防反编译工具,如.NET Reactor.Dotfusca ...

随机推荐

  1. 计算机网络之IP协议族

    网际协议IP 与IP协议配套使用的还有三个协议: 地址解析协议 ARP   (Address Resolution Protocol) 网际控制报文协议 ICMP  (Internet Control ...

  2. Dynamics CRM Entity Relationship Many to Many (N:N)

    该博客对N:N的关系的查询列出了两种方式,一种RetrieveMultipleRequest,一种Fetch XML ,有谁对N:N关系的查询了解不是很深的可以学习下. http://andreasw ...

  3. PHP+MySQL 分页那点事

    分页技术随处可见,这可以算得上是最为基础的网站功能了.于是今天尝试着用PHP来实现一个分页的小例子. 准备工作 环境准备 Apache MySQL PHP 工作环境 数据库准备 建库 建表 预存数据 ...

  4. C++ ifstream,ofstream读写二进制文件

    为什要吧数据存为二进制 这个嘛,是我个人习惯,一般,我们会把日志文件存为文本文件.数据文件存成二进制文件. 其实,我们接触的文件,比如图像.视频都是以二进制的形式存储的,要想查看这类数据,必须知道数据 ...

  5. python辅助开发模块(非官方)如pil,mysqldb,openpyxl,xlrd,xlwd

    官方文档 只是支持win32, 不支持win64 所以很麻烦 民间高人,集中做了一堆辅助库,下载后,用python安装目录下的scripts中,pip和easy_install就可以安装了 pytho ...

  6. MTK8127源码编译出现的错误及相关解决办法

    /** * date:2016/8/17 * author: Y.X .YANG */ 按照开发文档提示: 1.MTK提供的开发包目录下有若干个.aa .ab .ac ...的分压缩包.此时应当将这些 ...

  7. 2.关于QT中数据库操作,简单数据库连接操作,数据库的增删改查,QSqlTableModel和QTableView,事务操作,关于QItemDelegate 代理

     Linux下的qt安装,命令时:sudoapt-get install qt-sdk 安装mysql数据库,安装方法参考博客:http://blog.csdn.net/tototuzuoquan ...

  8. javascript之Style对象

    Background 属性 属性                                 描述 background                      在一行中设置所有的背景属性 ba ...

  9. Android必知必会-Stetho调试工具

    一.背景 Stetho是 Facebook 出品的一个强大的 Android 调试工具,使用该工具你可以在 Chrome Developer Tools查看APP的布局, 网络请求(仅限使用Volle ...

  10. Android 实现图片加水印

    加水印代码 public Bitmap addWaterMark(Bitmap src, String water, Context context){ Bitmap tarBitmap = src. ...