Ⅰ 混淆的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>;
}
Ⅸ 代碼混淆器打亂代碼的編譯結果有辦法破解掉嗎
應該可以 ,混淆器只是增加了反編譯的難度也而已