永发信息网

如何防止代码被反编译

答案:2  悬赏:50  手机版
解决时间 2021-02-13 21:53
如何防止代码被反编译
最佳答案
由于apk是Android虚拟机加载的,它有一定的规范,加密apk后Dalvik无法识别apk了。完全避免是不可能的,总有人能够破解你的代码。但是有几种方式来提高被反编译取代码的难度。
1 关键代码使用jni调用本地代码,用c或者c++编写,因此相对比较难于反编译

2 混淆java代码。混淆是不改变代码逻辑的情况下,增加无用代码,或者重命名,使反编译后的源代码难于看懂。 网上开源的java代码混淆工具较多,一般是用ant的方式来编译的。

1 . 在工程文件project.properties中加入下proguard.config=proguard.cfg , 如下所示:
target=android-8
proguard.config=proguard.cfg
Eclipse会通过此配置在工程目录生成proguard.cfg文件

2 . 生成keystore (如已有可直接利用)
按照下面的命令行 在D:\Program Files\Java\jdk1.6.0_07\bin>目录下,输入keytool -genkey -alias android.keystore -keyalg RSA -validity 100000 -keystore android.keystore
参数意义:-validity主要是证书的有效期,写100000天;空格,退格键 都算密码。
命令执行后会在D:\Program Files\Java\jdk1.6.0_07\bin>目录下生成 android.keystore文件。

3. 在Eclipce的操作
File -> Export -> Export Android Application -> Select project -> Using the existing keystore , and input password -> select the destination APK file

经过混淆后的源代码,原先的类名和方法名会被类似a,b,c。。。的字符所替换,混淆的原理其实也就是类名和方法名的映射。
但4大组件并没有混淆(所有在清单文件定义的组件不能被混淆),因为系统需要通过清单文件来查找和运行应用程序。

proguard.cfg 文件代码解读
-optimizationpasses 5 ->设置混淆的压缩比率 0 ~ 7
-dontusemixedcaseclassnames -> Aa aA
-dontskipnonpubliclibraryclasses ->如果应用程序引入的有jar包,并且想混淆jar包里面的class
-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 * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService

-keepclasseswithmembernames class * {
native ; -> 所有native的方法不能去混淆.
}

-keepclasseswithmembers class * {
public (android.content.Context, android.util.AttributeSet);
-->某些构造方法不能去混淆
}

-keepclasseswithmembers class * {
public (android.content.Context, android.util.AttributeSet, int);
}

-keepclassmembers class * extends android.app.Activity {
public void *(android.view.View);
}

-keepclassmembers enum * { -> 枚举类不能去混淆.
public static **[] values();
public static ** valueOf(java.lang.String);
}

-keep class * implements android.os.Parcelable { -> aidl文件不能去混淆.
public static final android.os.Parcelable$Creator *;
}
全部回答
一般的高级语言编译后就是机器码,无法还原为源代码的。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
【油的密度是多少】油品计量中常用的标准密度
慕尚纯K主题量贩KTV这个地址在什么地方,我要
意统比萨(天地湾店)我想知道这个在什么地方
元始天尊和玉皇大帝在道教的地位谁大谁小
出去玩带孩子在车里睡了一晚,熄火状态会不会
昌盛文具图书复印在什么地方啊,我要过去处理
我的理解能力太差总是把别人的意思理解错怎样
汽车玻璃怎么清洗,有车友可以回答一下这个问
校讯通 如何删除已发短信??如题 谢谢了
木瓜加奶可以吃冰的吗
从来不尿床的,大年初一居然尿床?
东方电脑工作室地址在什么地方,我要处理点事
百果鲜食品水果万源星城店在哪里啊,我有事要
安睡灯可以开一个晚上吗
裕达电脑服务怎么去啊,我要去那办事
推荐资讯
沙里村地址在哪,我要去那里办事
佛山创贸投资公司在什么地方啊,我要过去处理
XEROX3119打印机为什么识别不了16开纸?
刺客信条兄弟会如何永久拥有 伊甸圣器 金苹果
寒食节是哪一天
很多家长给孩子报学习班,该给孩子报吗?
东芝森医药NO.63地址有知道的么?有点事想过
塔沟武术学校中专生退学级登封教育局管吗
BL韩国皮肤管理中心(大学路店)地址好找么,我
求声学和流体力学,气动力学稍微懂一点的翻译
村卫生室医疗废物工作总结
protel99se里如何一次性更改PCB元件流水号
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?