「反编译被混淆的java」反编译是否合法

博主:adminadmin 2023-01-04 18:30:08 882

今天给各位分享反编译被混淆的java的知识,其中也会对反编译是否合法进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

混淆的class文件怎么进行反编译

一般情况下Java应用的开发者为了保护代码不被别人抄袭,在生成class文件的时候都java文件进行了混淆,这种class文件用反编译工具得到的结果很难看懂,并且不能进行编译。

从研究的角度,浅析如何读懂这种反编译过来的文件。

例子一:赋值

反编译过来的代码如下:

Node node;

Node node1 = _$3.getChildNodes().item(0);

node1;

node1;

JVM INSTR swap ;

node;

getChildNodes();

0;

item();

getChildNodes();

0;

item();

getNodeValue();

String s;

s;

原始语句:

Node node;

Node node1 = currDocument.getChildNodes().item(0);

node = node1;

String s = node.getChildNodes().item(0).getChildNodes().item(0).getNodeValue();

注解:

JVM INSTR swap ; //赋值语句

练习:

String s1;

String s8 = node.getChildNodes().item(1).getChildNodes().item(0).getNodeValue();

s8;

s8;

JVM INSTR swap ;

s1;

10;

Integer.parseInt();

int i;

i;

例子二:不带参数创建对象

反编译过来的代码如下:

JVM INSTR new #244 ;

JVM INSTR dup ;

JVM INSTR swap ;

CrossTable();

CrossTable crosstable;

crosstable;

原始语句:

CrossTable crosstable = new CrossTable();

注解:

练习:

JVM INSTR new #246 ;

JVM INSTR dup ;

JVM INSTR swap ;

Database();

Object obj;

obj;

例子三:带参数创建对象

反编译过来的代码如下:

JVM INSTR new #262 ;

JVM INSTR dup ;

JVM INSTR swap ;

String.valueOf(s2);

StringBuffer();

s.substring(j, i);

append();

s6;

append();

toString();

s2;

原始语句:

s2 = (new StringBuffer(String.valueOf(s2))).append(s.substring(j, i)).append(s6).toString();

注解:

此语句实际上是:s2 += s.substring(j, i) + s6;

练习:

例子四:for循环

反编译过来的代码如下:

int k = 0;

goto _L4

_L8:

...

k++;

_L4:

if(k as.length) goto _L8; else goto _L7

原始语句:

for(int k=0;k as.length;k++)

{

...

}

注解:

例子五:while循环

反编译过来的代码如下:

String s1 = "";

goto _L1

_L3:

JVM INSTR new #262 ;

JVM INSTR dup ;

JVM INSTR swap ;

String.valueOf(s1);

StringBuffer();

_$2(resultset, s, l);

append();

toString();

s1;

_L1:

if(resultset.next()) goto _L3; else goto _L2

原始语句:

String s1 = "";

while(resultset.next())

{

s1 = s1 + resultSetToString(resultset, s, l);

}

javacompile混淆器怎么混淆后的class文件还是可以被反编译出来呢?求高手指点....

混淆的作用并不是使class文件不能被反编译

混淆的作用是使反编译的代码更难让人阅读,比如一些计算金钱的敏感逻辑里有如下的代码(新金额=旧金额*某个倍率):

double newMoney=oldMoney*rate;

如果这样的代码直接编译成class文件,别人反编译这个class文件就能很清楚的看到金钱的计算关系,混淆后代码可能就变成这样的了:

double a=b*c;

这样的代码别人即使反编译了,也是很难看懂其中的逻辑关系的

如何反编译被Java混淆器保护的class文件?

人家混淆了就是为了防止你反编译。否则反编译后能直接生成源码,人混淆还有啥用?

混淆了就只能费些劲,慢慢看了,花点时间应该还能看懂。

如何分析经过混淆后的java代码

混淆代码 是为了防止class文件被反编译用的 但是程序的功能还是正常的 和你正常运行一样

如果连变量名都混淆了,就是说所有有具体意义的英文变量名都用a,b,c,x,y等等来表示,那这是不可能还原的,因为电脑也不可能知道你这个a实际上代表了你的年龄而那个c代表了你老婆的胸围!

但如果只是个事混淆,那网上倒有不少工具可以格式化源代码!自己搜一搜吧!推荐一款编辑器,IntelliJ,很不错,值得一提的是,我用过的众多编辑器中,这款编辑器的代码格式化功能最强大!

怎么防止Java开发出来的程序被别人反编译

防止Java开发出来的程序被别人反编译有很多种方法,下面给你介绍几种:

1、隔离Java程序

最简单的方法就是让用户不能够访问到Java Class程序,这种方法是最根本的方法,具体实现有多种方式。例如,开发人员可以将关键的Java Class放在服务器端,客户端通过访问服务器的相关接口来获得服务,而不是直接访问Class文件。这样黑客就没有办法反编译Class文件。目前,通过接口提供服务的标准和协议也越来越多,例如 HTTP、Web Service、RPC等。但是有很多应用都不适合这种保护方式,例如对于单机运行的程序就无法隔离Java程序。

2、对Class文件进行加密

为了防止Class文件被直接反编译,许多开发人员将一些关键的Class文件进行加密,例如对注册码、序列号管理相关的类等。在使用这些被加密的类之前,程序首先需要对这些类进行解密,而后再将这些类装载到JVM当中。这些类的解密可以由硬件完成,也可以使用软件完成。

3、转换成本地代码

将程序转换成本地代码也是一种防止反编译的有效方法。因为本地代码往往难以被反编译。开发人员可以选择将整个应用程序转换成本地代码,也可以选择关键模块转换。如果仅仅转换关键部分模块,Java程序在使用这些模块时,需要使用JNI技术进行调用。

4、代码混淆

代码混淆是对Class文件进行重新组织和处理,使得处理后的代码与处理前代码完成相同的功能(语义)。但是混淆后的代码很难被反编译,即反编译后得出的代码是非常难懂、晦涩的,因此反编译人员很难得出程序的真正语义。从理论上来说,黑客如果有足够的时间,被混淆的代码仍然可能被破解,甚至目前有些人正在研制反混淆的工具。但是从实际情况来看,由于混淆技术的多元化发展,混淆理论的成熟,经过混淆的Java代码还是能够很好地防止反编译。

不同保护技术比较希望能给大家带来参考:

关于反编译被混淆的java和反编译是否合法的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。