Ⅰ 混淆的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 p ;
JVM INSTR swap ;
CrossTable();
CrossTable crosstable;
crosstable;
原始语句:
CrossTable crosstable = new CrossTable();
注解:
练习:
JVM INSTR new #246 ;
JVM INSTR p ;
JVM INSTR swap ;
Database();
Object obj;
obj;
例子三:带参数创建对象
反编译过来的代码如下:
JVM INSTR new #262 ;
JVM INSTR p ;
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 p ;
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);
}
Ⅱ 什么是Java混淆编译器
由于Java程序运行时是动态连接的,因此编译成的目标文件中包含有符号表, 使得Java程序很轻易被反编译,混淆器可以打乱class文件中的符号信息,使反向工程变得非常困难。
Ⅲ javacompile混淆器怎么混淆后的class文件还是可以被反编译出来呢求高手指点....
混淆的作用并不是使class文件不能被反编译
混淆的作用是使反编译的代码更难让人阅读,比如一些计算金钱的敏感逻辑里有如下的代码(新金额=旧金额*某个倍率):
double newMoney=oldMoney*rate;
如果这样的代码直接编译成class文件,别人反编译这个class文件就能很清楚的看到金钱的计算关系,混淆后代码可能就变成这样的了:
double a=b*c;
这样的代码别人即使反编译了,也是很难看懂其中的逻辑关系的
Ⅳ 如何混淆Java编译后的类或jar,或将jar编译成exe,使人无法反编译获得源代码
混淆就可以了
我一直在用proguard4.5.1做Java项目的混淆
Ⅳ 对已经混淆的android代码,如何进行反编译
android代码混淆是指安卓开发者或者组织为了防止自己的产品敏感信息或者技术机密被人破解,而在生成apk文件的时候,通过设置一些替换规则,使java文件中指定的代码类的名字或者成员名字变为没有任何意义的字母,然后编译成class文件的过程。
已经混淆过的android代码反编译出来的都是一些没有任何意义的名字,是很难读懂的。没有好的办法。
Ⅵ typescript 怎么混淆加密,编译输出js文件
选择
configure
task
runner
自动创建
task.json
。该配置文件在工作空间的.vscode目录下,这个目录也是存放vscode配置的文件夹。
vscode默认的task配置文件中给出了执行tsc
和
gulp模板配置。简单介绍一下
task.json
的写法
{"version":
"0.1.0",//
要使用的命令或者可执行文件的路径"command":
"tsc",//
对应command参数,是否是一个命令,否则为执行文件路径"isshellcommand":
true,//
是否在执行task任务时显示控制台窗口"showoutput":
"always",//
对应command参数指定程序的参数"args":
["-p",
"src",
"--allowjs",
"-w"],//
不太明白这个,基本用不到"problemmatcher":
"$tsc",}
Ⅶ 能不能让VS.net编译完项目,自动对代码进行混淆
1 把项目的生成路径改成Release(通过项目的属性-生成来修改)
2 把整个Release文件夹拷到另外一个地方,然后用防止反编译软件来生成新的exe,再覆盖掉
3 在打包项目里面把覆盖完后的Release文件夹里面内容添加进来,生成快捷方式以及卸载在此不详细说明。
Ⅷ android ant混淆编译打包生成jar文件,如何将jni生成的lib**.so库文件同时打包
在混淆配置文件中添加这句
-keepclasseswithmembernames class * {
native <methods>;
}
Ⅸ 代码混淆器打乱代码的编译结果有办法破解掉吗
应该可以 ,混淆器只是增加了反编译的难度也而已