Android 代码混淆机制

Android 代码混淆机制

由于Android项目是基于java语言的,而java属于高层抽象语言,易于反编译,其编译后的程序包包含了大量的源代码变量、函数名、数据结构等信息,根据其编译打包后的APK文件,可以非常容易的得到 近乎源代码质量 的反编译代码。如果不加混淆,相当于直接将源代码拱手送人,内容严密的app权限审核可以说是形同虚设。如果大家想避免自己的成果被别人夺取,然后重新修改策划而额外增加的工作量,那就尽量得自己的Android项目加上混淆吧。

原理

android平台的混淆原理是把代码中原来有具体含义的包名,类名,变量名,方法名等名称全部替换成按顺序排列的无意义的英文字母a、b、c….这样代码结构没有变化,还可以运行得到一样的结果,并且就算代码被反编译出来,别人想弄懂代码的架构和具体意思也比较难。

具体方法

比较常用的方法有以下两种:

一、通过eclipse混淆代码

  • 启用代码混淆
    找到Android项目目录下的project.properties文件,如果需要对项目进行全局混码,只需要进行一步操作:将project.properties文件中的“# proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt”中的“#”去掉就可以了。

    但是如果有一些代码不能被混淆,比如引入了第三方jar文件或加入了so文件,需要调用里面的方法,那么调用JNI访问so文件的方法就不能被混码。在导出的时候,可能不会报错。但是在手机上运行的时候,需要调用so文件的时候,就会报某某方法无法找到。这个时候就需要用到proguard-project.txt。

  • 编写混淆脚本
    找到Android项目目录下的“proguard-project.txt”文件,在proguard-project.txt文件中,你需要做的就是指定混淆规则,还有指明要过滤那些文件或代码块。具体内容来看一个例子:

-ignorewarnings 
-optimizationpasses 7  #指定代码的压缩级别 0 - 7  
-dontusemixedcaseclassnames  #是否使用大小写混合
-dontskipnonpubliclibraryclasses  #是否混淆第三方jar
-dontpreverify  #混淆时是否做预校验(可去掉加快混淆速度)  
-verbose #混淆时是否记录日志(混淆后生产映射文件 map 类名 -> 转化后类名的映射  
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*  #淆采用的算法  

-keep public class * extends android.app.Activity  #所有activity的子类不要去混淆  
-keep public class * extends android.app.Application  
-keep public class * 
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值