当前位置:首页 » 编程软件 » classfinal防止反编译

classfinal防止反编译

发布时间: 2022-02-09 08:03:35

‘壹’ Android项目里如何混淆自己打的jar包或者防止被反编译

Android之防止反编译技巧:

1. 判断程序是否运行在模拟器上

boolean isRunningInEmualtor() {
boolean qemuKernel = false;
Process process = null;
DataOutputStream os = null;
try{
process = Runtime.getRuntime().exec("getprop ro.kernel.qemu");
os = new DataOutputStream(process.getOutputStream());
BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream(),"GBK"));
os.writeBytes("exit\n");
os.flush();
process.waitFor();
// getprop ro.kernel.qemu == 1 在模拟器
// getprop ro.proct.model == "sdk" 在模拟器
// getprop ro.build.tags == "test-keys" 在模拟器
qemuKernel = (Integer.valueOf(in.readLine()) == 1);
Log.d("com.droider.checkqemu", "检测到模拟器:" + qemuKernel);
} catch (Exception e){
qemuKernel = false;
Log.d("com.droider.checkqemu", "run failed" + e.getMessage());
} finally {
try{
if (os != null) {
os.close();
}
process.destroy();
} catch (Exception e) {

}
Log.d("com.droider.checkqemu", "run finally");
}
return qemuKernel;
}

2. 检测keystore签名,再与之前得做比较

public int getSignature(String packageName) {
PackageManager pm = this.getPackageManager();
PackageInfo pi = null;
int sig = 0;
try {
pi = pm.getPackageInfo(packageName, PackageManager.GET_SIGNATURES);
Signature[] s = pi.signatures;
sig = s[0].hashCode();
} catch (Exception e1) {
sig = 0;
e1.printStackTrace();
}
return sig;
}

3. 检测包名,版本名和版本号,然后做判断:

private String getAppInfo() {
try {
String pkName = this.getPackageName();
String versionName = this.getPackageManager().getPackageInfo(
pkName, 0).versionName;
int versionCode = this.getPackageManager()
.getPackageInfo(pkName, 0).versionCode;
return pkName + " " + versionName + " " + versionCode;
} catch (Exception e) {
}
return null;
}

4. 把jpg图片写成是png格式得图片 但是最新版本的apktool已经修复了

5. 花指令,影响jd-gui 但是最新版本的jd-gui已经修复
private static final char[] wJ = "0123456789abcdef".toCharArray();
public static String imsi = "204046330839890";
public static String p = "0";
public static String keyword = "电话";
public static String tranlateKeyword = "%E7%94%B5%E8%AF%9D";
在每个类里面加入 如上字段。。。。

https://***/ 一个第三方得”爱加密“网站 1.需要使用官方的打包key工具打包后上传到"爱加密"网站进行处理,然后到网站上面下载,下载后还要用"爱加密"的打包工具再次进行打包即可。

‘贰’ 反编译java核心类 能不能反编译java核心类,比如java.lang.String,再编写自己的代码放到里面去

我估计你是想重编译String.class文件并覆盖吧,这个目前行不通,据说像HotSpot这种商业JVM内部都存有一张关于核心类库的装载信息表专供根加载器使用,这个表内容是以通过硬写在JVM底层C\C++程序中的方式存在的,在装载核心类库的.Jar文件时不仅要比对其中.class文件的有效性,还要比较.Jar文件的SHA1哈希值与装载信息表中的记录是否一致!(或许哈希弱无碰撞算法出现时会有希望,呵呵)同时JVM会运行各种安全沙箱机制(比如装载约束、访问权限等等)来保护运行环境的安全性,所以除非重编译JVM否则目前没有什么好方法。

‘叁’ 如何防止Android程序被反编译

下面具体说一说怎么样让SDK2.3下的proguard.cfg文件起作用,先来看看android-sdk-windows\tools\lib\proguard.cfg的内容: -optimizationpasses 5 -dontusemixedcaseclassnames - -dontpreverify -verbose -optimizations !code/simplification/arithmetic,!field/*,!class/merging/* -keep public class * extends android.app.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 ; } -keepclasseswithmembernames class * { public (android.content.Context, android.util.AttributeSet); } -keepclasseswithmembernames class * { public (android.content.Context, android.util.AttributeSet, int); } -keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String); } -keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *; } 从脚本中可以看到,混淆中保留了继承自Activity、Service、Application、BroadcastReceiver、 ContentProvider等基本组件以及com.android.vending.licensing.ILicensingService,并保留了所有的Native变量名及类名,所有类中部分以设定了固定参数格式的构造函数,枚举等等。)让proguard.cfg起作用的做法很简单,就是在eclipse自动生成的default.properties文件中加上一句“proguard.config=proguard.cfg”就可以了完整的default.properties文件应该如下: # This file is automatically generated by Android Tools. # Do not modify this file -- YOUR CHANGES WILL BE ERASED! # # This file must be checked in Version Control Systems. # # To customize properties used by the Ant build system use, # "build.properties", and override values to adapt the script to your # project structure. # Project target. target=android-9 proguard.config=proguard.cfg 大功告成,正常的编译签名后就可以防止代码被反编译了。

‘肆’ JAVA中Method类为final,其设计为什么不让继承!

不仅仅Method,其它的Constructor、Parameter、Field都是final的。

1. 类在运行期是缓存的,如果不用final保护,被改动了怎么办?Method对象和class文件不一致了。
2. Method类依赖Class类,如果要改Method,就要动类加载。Class是很底层的类,基本都是native方法,用户自己有没有这个能力改动?
3.从逻辑上将,Method已经完成了所有的工作,没有派生关系,也没有继承的必要性。

jdk的反射机制已经很完善了,整个体系不需要用户去动,一般也没这个能力。一般要扩展也只需要一些工具类就足够满足需求。

‘伍’ 我用java反编译工具把.class文件转为.java文件,其中有些这种字符,请问一下这种是怎么回事啊

不会! if ((l3 = (System.currentTimeMillis() - l2) + 10L) < 62L)
try
{
Thread.sleep(62L - l3);
}
catch (Exception )
} while (true);
if (a_byte == 1)
b();
a_Bobby.notifyDestroyed();
}

private final void d()
{
byte abyte0[] = a();
boolean flag = false;
String s1 = "BC5Data";
a a1 = this;
try
{
RecordStore recordstore;
(recordstore = RecordStore.openRecordStore(s1, false)).setRecord(1, abyte0, 0, abyte0.length);
recordstore.closeRecordStore();
return;
}
catch (Exception )
try
{
RecordStore.deleteRecordStore(s1);
}
catch (Exception )
······

看到了吧~这就是格式!汇编语言!!!
编译连接之后,再用txt打开~就只能看到乱码啦。

‘陆’ 为什么JD Decompiler只可以看class文件,可以直接修改class文件吗,怎么修改


网页
问问
科学
知识
更多

搜索
为什么JD Decompiler只可以看class文件,可以直..._约109个回答_搜狗知识
为什么JD Dec...修改?
[最佳答案] class文件是二进制编码怎么修改!!!先反编译成java源文件然后再编译成class文件就行了
搜狗问问
2011-06-03
用DJ Java Decompiler处理过的class生成java文件,怎...
搜狗问问
2016-05-31
搜狗知识
查看更多
为什么JD Decompiler只可以看class文件,可以直接修改class..._CSDN博客
class文件直接修改_反编译修改class文件变量_weixin_30825199的博...
所以只能直接修改Java class文件. 记录一下修改步骤: 1.下载JClassLib_windows(后面用到),下载jd-gui-1.4.0.jar,用来反编译class文件的,IDEA也可以反编译class文件; 找到需要修改文件的变量...

2017-12-15
如何修改编辑jar包中class文件呢?? - Sun_Ru的博客 - CSDN博客
2016-11-21
CSDN博客
查看更多
反编译-直接修改class文件可以吗?——CSDN问答频道
我用编辑器直接打开class文件,找到13这个字符串,改成14,保存,替换掉原来的class文件,还是... http://java-decompiler.github.io/2.WinR java 修改 class 文件 指定内容 7863 2018-04-07 在java 中可以...
ask.csdn.net
如何利用反编译软件打开并修改class文件-网络经验
1/6
打开反编译软件jd-gui,如图:
2/6
打开文件夹,选中自己要打开的文件...
3/6
选中自己要修改的文件后,先全选(...
4/6
之后打开myeclipse,将复制内容粘...
5/6
修改自己要修改的代码,并发布这个...
6/6
最后在自己安装的tomcat中找到对应...
查看更多
网络经验
破解 jar 包之直接修改 .class 文件方式_知乎

8 - 一、常规 JAVA 软件破解流程先讲一下常规jar包的破解流程.1. 快速定位.1) 通过procmon监控相关软件,查看程序都访... 结构体后面多余的字节就可以直接删除了.现在大功告成,将修改后的 .class 文件替换原来的就可以了.需要注意的细节坑1...


知乎
2017-08-23
怎么修改jar 里面的class文件?-CSD...
好像只能查看class文件不能修改,我上网搜 有人说 eclipse 有插件的直接都可以看到反编译后的东西... 我们想看的是Java文件,当然网上有反编译工具,但是为了一劳永逸,我们可以安装jd-eclipse-site-1....
topic.csdn.net
能把*. class文件反编译成*.java文件吗?-CSDN论坛
class文件反 编译 成.java 经修改后再 编译成 .class Java Decompiler【 java 反编译 】:开发了 反编... 把jar包直接拖进这个软件就能够看到代码了。当然jd-gui不... 像*. exe之类的很难 反编译 ,比如使用...
topic.csdn.net
class文件反编译_class文件怎么打开
[图文] class文件全名称为Java class文件,主要在平台无关性和网络移动性方面使Java更适合网络.它在平台无关性方面的任务是:为Java程序提供独立于底层主机平台的二进制形式的服务.class文件径打破了...
m.pc6.com
class文件怎么打开_搜狗指南
class 文件 2019.02.28 如何查看java class文件 2019.03.24 怎么找到Eclipse中生成的.class文件 2019.... java文件怎样编译成.class文件 2019.03.23 如何将class文件转换成java文件 2019.02.28 iso文件怎么...
搜狗指南
电脑javaclass文件查看与修改工具_class怎么编辑查看,javaclass修改...
发布时间:2013-03-04
能对电脑中的java类class文件进行查看与修改的工具

download.csdn.net
下一页

使用搜狗搜索APP
不管搜多长,我都能帮你忙
立即体验

搜索
首页-导航- 免责-用户反馈
© 2020 SOGOU.COM

‘柒’ Java中final一个method或者一个class会导致什么

final修饰符可以修饰类、方法、变量。
1、被final修饰的类不可以被继承;
2、被final修饰的方法不可以被重写;
3、被final修饰的变量不可以被再次赋值。

‘捌’ final class怎么调用

在特定环境下通过源代码调用。

‘玖’ 如何防止代码被反编译

由于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
- ->如果应用程序引入的有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 <methods>; -> 所有native的方法不能去混淆.
}

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

-keepclasseswithmembers class * {
public <init>(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 *;
}

热点内容
爱如生数据库 发布:2025-01-11 08:12:42 浏览:254
svm遗传算法 发布:2025-01-11 08:11:15 浏览:216
8岁讲编程 发布:2025-01-11 08:02:41 浏览:129
迅雷的tracker服务器地址 发布:2025-01-11 08:02:07 浏览:508
csgo天津服务器ip 发布:2025-01-11 07:57:36 浏览:614
中国天气android 发布:2025-01-11 07:56:53 浏览:464
服务器负载均衡怎么用 发布:2025-01-11 07:54:04 浏览:129
云打印服务器硬件 发布:2025-01-11 07:44:56 浏览:769
怎么在手机上更改wifi密码 发布:2025-01-11 07:37:26 浏览:337
开机启动serviceandroid 发布:2025-01-11 07:35:24 浏览:524