android混淆和反编译
混淆
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混淆和反编译的更多相关文章
- Android混淆、反编译以及反破解的简单回顾
=========================================================================虽然反编译很简单,也没下面说的那么复杂,不过还是转了过 ...
- android 混淆 与 反编译
1, 文件 project.properties 修改: target=android-14proguard.config=${sdk.dir}/tools/proguard/proguard-and ...
- android apk 防止反编译技术第四篇-对抗JD-GUI
又到周末一个人侘在家里无事可干,这就是程序员的悲哀啊.好了我们利用周末的时间继续介绍android apk防止反编译技术的另一种方法.前三篇我们讲了加壳技术(http://my.oschina.net ...
- Android程序的反编译对抗研究
转自: http://www.freebuf.com/tools/76884.html 一.前言 对抗反编译是指让apk文件或者dex文件无法正常通过反编译工具,而且有可能导致工具异常或者崩溃,如ap ...
- android: 使用android逆向助手反编译APK
第一步:下载逆向助手:(链接: https://pan.baidu.com/s/15jtoFDg9LWV80HREeyx5HA 提取码: k527 ) 第二步:将apk文件拷贝到逆向助手的apktoo ...
- 转: android apk 防止反编译技术(1~5连载)
转: android apk 防止反编译技术 做android framework方面的工作将近三年的时间了,现在公司让做一下android apk安全方面的研究,于是最近就在网上找大量的资料来学习. ...
- android apk 防止反编译技术第一篇-加壳技术
做android framework方面的工作将近三年的时间了,现在公司让做一下android apk安全方面的研究,于是最近就在网上找大量的资料来学习.现在将最近学习成果做一下整理总结.学习的这些成 ...
- .Net的混淆防反编译工具ConfuserEx--2(转)
给大家推荐一个.Net的混淆防反编译工具ConfuserEx. 由于项目中要用到.Net的混淆防反编译工具. 在网上找了很多.Net混淆或混淆防反编译工具,如.NET Reactor.Dotfusca ...
- 给大家推荐一个.Net的混淆防反编译工具ConfuserEx
给大家推荐一个.Net的混淆防反编译工具ConfuserEx. 由于项目中要用到.Net的混淆防反编译工具. 在网上找了很多.Net混淆或混淆防反编译工具,如.NET Reactor.Dotfusca ...
随机推荐
- 计算机网络之IP协议族
网际协议IP 与IP协议配套使用的还有三个协议: 地址解析协议 ARP (Address Resolution Protocol) 网际控制报文协议 ICMP (Internet Control ...
- Dynamics CRM Entity Relationship Many to Many (N:N)
该博客对N:N的关系的查询列出了两种方式,一种RetrieveMultipleRequest,一种Fetch XML ,有谁对N:N关系的查询了解不是很深的可以学习下. http://andreasw ...
- PHP+MySQL 分页那点事
分页技术随处可见,这可以算得上是最为基础的网站功能了.于是今天尝试着用PHP来实现一个分页的小例子. 准备工作 环境准备 Apache MySQL PHP 工作环境 数据库准备 建库 建表 预存数据 ...
- C++ ifstream,ofstream读写二进制文件
为什要吧数据存为二进制 这个嘛,是我个人习惯,一般,我们会把日志文件存为文本文件.数据文件存成二进制文件. 其实,我们接触的文件,比如图像.视频都是以二进制的形式存储的,要想查看这类数据,必须知道数据 ...
- python辅助开发模块(非官方)如pil,mysqldb,openpyxl,xlrd,xlwd
官方文档 只是支持win32, 不支持win64 所以很麻烦 民间高人,集中做了一堆辅助库,下载后,用python安装目录下的scripts中,pip和easy_install就可以安装了 pytho ...
- MTK8127源码编译出现的错误及相关解决办法
/** * date:2016/8/17 * author: Y.X .YANG */ 按照开发文档提示: 1.MTK提供的开发包目录下有若干个.aa .ab .ac ...的分压缩包.此时应当将这些 ...
- 2.关于QT中数据库操作,简单数据库连接操作,数据库的增删改查,QSqlTableModel和QTableView,事务操作,关于QItemDelegate 代理
Linux下的qt安装,命令时:sudoapt-get install qt-sdk 安装mysql数据库,安装方法参考博客:http://blog.csdn.net/tototuzuoquan ...
- javascript之Style对象
Background 属性 属性 描述 background 在一行中设置所有的背景属性 ba ...
- Android必知必会-Stetho调试工具
一.背景 Stetho是 Facebook 出品的一个强大的 Android 调试工具,使用该工具你可以在 Chrome Developer Tools查看APP的布局, 网络请求(仅限使用Volle ...
- Android 实现图片加水印
加水印代码 public Bitmap addWaterMark(Bitmap src, String water, Context context){ Bitmap tarBitmap = src. ...