app混淆

混淆的概念

通常情况下,Java编译后的字节码仍然包含了大量的调试信息:源文件名,行号,字段名,方法名,参数名,变量名等等。这些信息使得它很容易被反编译和通过逆向工程获得完整的程序。ProGuard混淆器可以删除这些调试信息,进一步精简代码,并用无意义的字符序列来替换所有名字,使得它很难进行逆向工程。除了异常堆栈信息所需要的类名,方法名和行号外,程序只会保留功能上的等价。

Android中的混淆方法

根据project.properties文件中的描述,To enable ProGuard to shrink(精简) and obfuscate(混淆) your code, uncomment this (available properties:sdk.dir, user.home):即取消以下代码注释:#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt即删除该行前面的#号。然后导出apk文件即可。即此时project.properties文件中的内容如下:

target=android-17

proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt

导出签名后的项目

1、选中项目,单击右键选择Android ToolsàExport Signed Application Package...

弹出如下对话框,选择已有Keystore或创建一个keystore。

单击Next,弹出如下对话框,填写KeyStore的相关信息。

单击Next,弹出如下对话框,选择创建的apk文件存放的路径。

此时在D盘java文件夹下就生成了HelloAndroid.apk文件。

Android反编译过程

1、下载.apk文件,然后将后缀名改为zip。解压该文件可得到该apk中的一些资源,例如布局、图片等等,但是没有java源文件。其中有一个classes.dex文件,该文件是java文件编译再通过dx工具打包生成的。将生成的HelloAndroid.apk文件改成HelloAndroid.zip文件,然后解压该文件。目录结构如下(左),内容如下(右):

                      

2、classes.dex文件逆方向导出Java源文件,首先下载一个工具:dex2jar.zip,将classes.dex文件拷贝到dex2jar.bat所在目录,然后在命令行模式下定位到dex2jar.bat所在目录,运行dex2jar.batclasses.dex,生成classes.dex.dex2jar.jar。

3、运行JD-GUI工具,打开生成的classes.dex.dex2jar.jar。



     1.工程中含有第三方jar包,或者.so文件 混淆处理。

 -libraryjars libs/apns_1.0.6.jar                          
 -libraryjars libs/armeabi/libBaiduMapSDK_v2_3_1.so
 -libraryjars libs/armeabi/liblocSDK4.so
-libraryjars libs/baidumapapi_v2_3_1.jar
-libraryjars libs/core.jar
-libraryjars libs/gesture-imageview.jar
-libraryjars libs/gson-2.0.jar

还可以这么处理:

项目中含有 baidumapapi.jar

-keep class com.baidu.mapapi.** {*;}
项目中含有 android-support-v4.jar
-dontwarn android.support.v4.**
-keep class android.support.v4.** { *; }
-keep public class * extends android.support.v4.**
-keep public class * extends android.app.Fragment
-keep 表示不需要混淆的类,因为如Activity等四大组件如果混淆后,则AndroidManifest.xml中就无法识别那个活动类了,则程序无法运行。
-dontwarn 表示对于警告的类

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值