安卓代码混淆中常量的处理方法

最近一直在研究代码混淆,其中发现一个问题,就是我们定义的一些公用的常量在代码混淆后,经过反编译,竟然完完整整的显示在我的眼前,比如服务请求地址,竟然以完整路径的形式显示在混淆后的代码中,比自己定义的还要完整,要是这样的话,代码混淆还有意义吗?当时很郁闷,不过又一想,常量肯定是不能被混淆的,若常量被混淆,1混成个2,其它地方再去引用必然会出错啊,那这怎么办呢?又想进行混淆,又不想让比较重要的常量明目张胆的显示?办法肯定是有的,只是你愿不愿去思考。我们可以对比下原项目和混淆后解压出来的项目结构,你就知道该怎么做了:

 

看到区别了吗,对,区别就在values文件夹,由此可以想到什么?我们可以把相关常量定义在values文件夹下的string.xml资源文件里,在代码中用getString(R.string.xxx)就可以引用了,这样反编译后的代码里,是不会再出现明文形式的常量内容了。

可能还有些童鞋不太明白到底该怎样做,现在博主说一下大致方法:

我们通常会在项目中定义一个公共类如:Const.java,其中包含了很多经常使用的常量(包括服务地址)如:

public static final String SERVER_IP = "192.168.0.1";

这种写法,经过反编译是很容易看到的,按我说的方法,应该是这样的:

	public static String SERVER_IP = "";

然后在string.xml里定义一个server_ip的值:

<string name="server_ip">192.168.8.2</string>

接着在自己项目中的Application的onCreate方法中为常量Const.SERVER_IP赋值:

 Const.SERVER_IP=getString(R.string.server_ip);

这样一来,经过反编译的代码中就看不到你的服务地址明文了,若大家有其他更好的方法,可以一起交流学习。

关于反编译的方法,已在上篇文章讲解过了,有兴趣的可以研究下。



时间: 2024-08-12 05:29:53

安卓代码混淆中常量的处理方法的相关文章

安卓代码混淆注意事项

安卓代码混淆时经常会出现各种问题,下面罗列一些注意事项 1.依赖的工程中使用的jar包若和工程自身中的jar包一样的话,直接删除依赖工程中相同的jar包即可 2.native方法要阻止混淆 例: # natvie 方法不混淆 -keepclasseswithmembernames class * { native <methods>; } 3.若自定义基类Activity中有根据名称为控件注入值的要采用如下方法阻止字段被混消 如 基类Activity中有如下控件注入方法 protected v

安卓 代码混淆与打包

gradle的配置 proguard-rules.pro混淆配置 ###-----------基本配置-不能被混淆的------------ -keep public class * extends android.app.Activity -keep public class * extends android.app.Fragment -keep public class * extends android.app.Application -keep public class * exten

安卓从imageview中获得bitmap的方法

第一种: 使用setDrawingCacheEnabled()和getDrawingCache()这两种方法,第一个是为了设置是否开启缓存,第二个就可以直接获得imageview中的缓存,一般来说需要在获得缓存以后setDrawingCacheEnabled设置为false,因为这样才能让之前的缓存去掉,不会影响后来新的缓存. ImageView image = (ImageView) view.getTag(); Matrix max = new Matrix(); image.setDraw

御安全浅析安卓开发代码混淆技术

御安全浅析安卓开发代码混淆技术[关键词:代码混淆,Android应用加固,移动应用保护,APP保护,御安全] 提高native代码的安全性有什么好办法吗?答案是肯定的,今天我们就来介绍一种有效对抗native层代码分析的方法--代码混淆技术.随着移动互联网的快速发展,应用的安全问题不断涌现出来,于是越来越多的应用开发者将核心代码由java层转到native层,以对抗成熟的java逆向分析工具,然而如果native层的代码如果没有进行任何保护,还是比较容易被逆向分析工作者获取其运行逻辑,进而完成应

安卓与“Proguard”——安卓的代码混淆

谨以此文,记我在公司实习时,所接到的第一个正式的.真正有意义的任务--将公司即将发布的APK进行代码混淆. 什么是代码混淆 混淆就是对发布出去的程序进行重新组织和处理,使得处理后的代码与处理前代码完成相同的功能,而混淆后的代码很难被反编译,即使反编译成功也很难得出程序的真正语义.被混淆过的程序代码,仍然遵照原来的档案格式和指令集,执行结果也与混淆前一样,只是混淆器将代码中的所有变量.函数.类的名称变为简短的英文字母代号,在缺乏相应的函数名和程序注释的况下,即使被反编译,也将难以阅读.同时混淆是不

ASP.net中网站访问量统计方法代码(在线人数,本月访问,本日访问,访问流量,累计访问)

一.建立一个数据表IPStat用于存放用户信息 我在IPStat表中存放的用户信息只包括登录用户的IP(IP_Address),IP来源(IP_Src)和登录时间 (IP_DateTime),些表的信息本人只保存一天的信息,如果要统计每个月的信息则要保存一个月.因为我不太懂对数据日志的操作,所以创建此表,所 以说我笨吧,哈哈. 二.在Global.asax中获取用户信息 在Global.asax的Session_Start即新会话启用时获取有关的信息,同时在这里实现在线人数.访问总人数的增量统计

Android代码混淆及项目发布方法记录

 Android代码混淆及项目发布步骤记录 本来整理了一份Android项目混淆与发布的文档,突然想到何不写篇博客,分享一下呢,如是便有了本文. Android代码混淆及项目发布步骤记录 一.清理代码中的调试信息,如Log.System.out 二.在清单文件中修改版本为当前版本,如果需要更新数据库,则需要在配置类或配置文件中修改程序数据库版本. 三.在清单文件中将项目的debugable设置为false 四.创建签名证书keystore文件 五.在项目中的project.properite

安卓解决代码混淆与反射的冲突

此前的代码混淆,因为并没有用到反射,所以常规的代码混淆方式一遍就能通过,而此项目中某些类利用到了反射机制(本人的这个项目中有即时通讯功能,所以有表情类资源,因此需要通过反射由文件名找到表情资源id),当由文件名去寻找资源id时就报空指针异常了,期初我并不知道什么原因,通过反编译已经混淆的apk,一步一步寻找到出错的地方,才恍然大悟,正是反射那一步出现了问题:Field field = R.drawable.class.getDeclaredField(name);走到这一步就挂了,程序直接崩溃.

Android - 百度地图打包混淆代码后地图崩溃的解决方法

前言: 之前开发项目用到百度地图,测试的时候没有问题:但是,一打包加混淆之后就出现地图崩溃的问题:项目已经完结,趁有闲暇时间赶紧分享一下自己的解决方案. 问题现象:    之前做百度地图开发时出现一些小问题.一搜发现大家似乎都遇到过这样的问题.大家知道百度地图API需要申请Key,填写安全码. 安全码的组成规则为:Android签名证书的sha1值 ";" packagename(即:数字签名 分号 包名) debug的话.代码没有经过混淆.百度地图正常使用.只有在打包之后才有这个问题