導航:首頁 > 源碼編譯 > 反編譯環境id

反編譯環境id

發布時間:2025-02-19 19:41:10

A. 我反編譯java文件,有一些漢字信息就變成了\u9879 了

使用 jdk 自帶的 native2ascii.exe 工具,在你的 jdk文件夾/bin 下能找到。
針對你的問題,在 cmd 窗口中執行下面的命令即可(需要將 jdk文件夾/bin 加入到 path 環境變數中):

native2ascii -reverse C:\abc.java c:\abc2.java
(這里abc.java表示你的含有 \uxxxx 字元的java文件;
c:\abc2.java 表示轉後後的文件)

下面附上完整的 使用方法:
------------------------------
native2ascii用法解析

native2ascii是sun java sdk提供的一個工具。用來將別的文本類文件(比如

*.txt,*.ini,*.properties,*.java等等)編碼轉為Unicode編碼。為什麼要進行轉碼,

原因在於程序的國際化。

Java 編譯器和其它 Java 工具只能處理含有 Latin-1 和/或 Unicode 編碼(\udddd 記

號)字元的文件。native2ascii 將含有其它字元編碼的文件轉換成含 Latin-1 和/或

Unicode 編碼字元的文件。

若省略 outputfile,則使用標准輸出設備輸出。此外,如果也省略 inputfile,則使用

標准輸入設備輸入。

用法:native2ascii [-reverse] [-encoding 編碼] [輸入文件 [輸出文件]]

-[options]:表示命令開關,有兩個選項可供選擇
-reverse:
執行相反的操作:將含 Latin-1 和/或 Unicode 編碼字元的文件轉換成含本地編碼字元

的文件,不指定編碼情況下,將轉為本地編碼。

-encoding encoding_name
指定轉換過程使用的編碼名稱。預設的編碼從系統屬性 file.encoding 中得到。

encoding_name 字元串必須是下表第一欄所示的字元串。

[inputfile [outputfile]]
inputfile:表示輸入文件全名。
outputfile:輸出文件名。如果缺少此參數,將輸出到控制台

-------------------------------------------------------------
8859_1 ISO 8859-1
8859_2 ISO 8859-2
8859_3 ISO 8859-3
8859_4 ISO 8859-4
8859_5 ISO 8859-5
8859_6 ISO 8859-6
8859_7 ISO 8859-7
8859_8 ISO 8859-8
8859_9 ISO 8859-9
Big5 Big5 碼,繁體中文
CNS11643 CNS 11643,繁體中文
Cp037 美國、加拿大(兩種語言,法語)、荷蘭、葡萄牙、巴西、澳大利亞
Cp1006 IBM AIX 巴基斯坦(烏爾都語)
Cp1025 IBM 多語種西里爾語:保加利亞、波斯尼亞 黑塞哥維那、馬其頓 (FYR)
Cp1026 IBM Latin-5,土耳其
Cp1046 IBM Open Edition US EBCDIC
Cp1097 IBM 伊朗(波斯語)/波斯
Cp1098 IBM 伊朗(波斯語)/波斯 (PC)
Cp1112 IBM 拉脫維亞,立陶宛
Cp1122 IBM 愛沙尼亞
Cp1123 IBM 烏克蘭
Cp1124 IBM AIX 烏克蘭
Cp1125 IBM 烏克蘭 (PC)
Cp1250 Windows 東歐
Cp1251 Windows 斯拉夫語
Cp1252 Windows Latin-1
Cp1253 Windows 希臘
Cp1254 Windows 土耳其
Cp1255 Windows 希伯萊
Cp1256 Windows 阿拉伯
Cp1257 Windows 波羅的語
Cp1258 Windows 越南語
Cp1381 IBM OS/2, DOS 中華人民共和國 (PRC)
Cp1383 IBM AIX 中華人民共和國 (PRC)
Cp273 IBM 奧地利、德國
Cp277 IBM 丹麥、挪威
Cp278 IBM 芬蘭、瑞典
Cp280 IBM 義大利
Cp284 IBM 加泰羅尼亞語/西班牙、拉丁美洲西班牙語
Cp285 IBM 英國、愛爾蘭
Cp297 IBM 法國
Cp33722 IBM-eucJP - 日語 (5050 的超集)
Cp420 IBM 阿拉伯
Cp424 IBM 希伯萊
Cp437 MS-DOS 美國、澳大利亞、紐西蘭、南非
Cp500 EBCDIC 500V1
Cp737 PC 希臘
Cp775 PC 波羅的語
Cp838 IBM 泰國擴展 SBCS
Cp850 MS-DOS Latin-1
Cp852 MS-DOS Latin-2
Cp855 IBM 斯拉夫語
Cp857 IBM 土耳其語
Cp860 MS-DOS 葡萄牙語
Cp861 MS-DOS 冰島語
Cp862 PC 希伯萊
Cp863 MS-DOS 加拿大法語
Cp864 PC 阿拉伯語
Cp865 MS-DOS 日爾曼語
Cp866 MS-DOS 俄語
Cp868 MS-DOS 巴基斯坦語
Cp869 IBM 現代希臘語
Cp870 IBM 多語種 Latin-2
Cp871 IBM 冰島語
Cp874 IBM 泰國語
Cp875 IBM 希臘語
Cp918 IBM 巴基斯坦(烏爾都語)
Cp921 IBM 拉脫維亞、立陶宛(AIX, DOS)
Cp922 IBM 愛沙尼亞 (AIX, DOS)
Cp930 與 4370 UDC 混合的日語,5026 的超集
Cp933 與 1880 UDC 混合的韓文,5029 的超集
Cp935 與 1880 UDC 混合的簡體中文主機,5031 的超集
Cp937 與 6204 UDC 混合的繁體中文,5033 的超集
Cp939 與 4370 UDC 混合的日語拉丁字母,5035 的超集
Cp942 日語 (OS/2),932 的超集
Cp948 OS/2 中文(台灣),938 超集
Cp949 PC 韓文
Cp950 PC 中文(香港、台灣)
Cp964 AIX 中文(台灣)
Cp970 AIX 韓文
EUCJIS JIS, EUC 編碼、日語
GB2312 GB2312, EUC 編碼、簡體中文
GBK GBK, 簡體中文
ISO2022CN ISO 2022 CN, 中文
ISO2022CN_CNS ISO-2022-CN 形式的 CNS 11643,繁體中文
ISO2022CN_GB ISO-2022-CN 形式的 GB 2312,簡體中文
ISO2022KR ISO 2022 KR, 韓文
JIS JIS, 日語
JIS0208 JIS 0208, 日語
KOI8_R KOI8-R, 俄語
KSC5601 KS C 5601, 韓文
MS874 Windows 泰國語
MacArabic Macintosh 阿拉伯語
MacCentralEurope Macintosh Latin-2
MacCroatian Macintosh 克羅埃西亞語
MacCyrillic Macintosh 斯拉夫語
MacDingbat Macintosh Dingbat
MacGreek Macintosh 希臘語
MacHebrew Macintosh 希伯萊語
MacIceland Macintosh 冰島語
MacRoman Macintosh 羅馬語
MacRomania Macintosh 羅馬尼亞語
MacSymbol Macintosh 符號
MacThai Macintosh 泰國語
MacTurkish Macintosh 土耳其語
MacUkraine Macintosh 烏克蘭語
SJIS Shift-JIS, 日語
UTF8 UTF-8

B. 如何反編譯android應用以及重編譯,簽名和對齊優化

首先,了解一下我們為什麼需要反編譯apk
大部分情況下,是由於想本地化一款優秀的應用,才需要做這事兒;又或者進行少量的smali修改以達到想要的效果(如添加歸屬地,使3G版Nexus 7支持Wi-Fi熱點)。

下面我們先准備運行環境和工具
建立工作目錄,如.\workspace\apktoolbox (下面同樣以此路徑為例)
必不可少的JDK:Oracle Java下載,安裝完成後把<jdk-inst-path>\bin添加到$PATH環境變數中
反編譯和重編譯工具apktool:Google Code下載,按平台下載(一個apktool-install-<platform>-<ver>-tar.bz2,一個apktool<ver>.tar.bz2,下載完成後解壓至.\workspace\apktoolbox\bin
密鑰文件,共4組。test/shared/media/platform,從android source中獲取,分別對應不同共享用戶ID時簽名所需(查看應用AndroidManifest.xml第二行android:sharedUserId項 ),放到.\workspace\apktoolbox\bin下
test - 無android:sharedUserId項
shared - android:sharedUserId=android.uid.shared
media - android:sharedUserId=android.uid.media
platform - android:sharedUserId=android.uid.system
簽名工具signapk.jar,放到.\workspace\apktoolbox\bin下
對齊優化工具zipalign(從android sdk中獲取,在tools目錄下),放到.\workspace\apktoolbox\bin下
准備工作完成

接下來我們就要開始工作了(以本地化工作為例)
把待反編譯的apk放到.\workspace\apktoolbox\apks下
在命令行模式下進入.\workspace\apktoolbox\bin目錄,輸入以下命令進行解包(反編譯)
apktool d ..\apks\<apkfile>.apk ..\apks\<outdir>
.\workspace\apktoolbox\apks\<outdir>\res下的values目錄(英文原版)和values-r<locale>目錄(本地化)就是我們需要的對象。
本地化工作完成後,在命令行中輸入以下命令進行重新打包(重新編譯)
apktool b ..\apks\<outdir>

.\workspace\apktoolbox\apks\<outdir>\dist目錄下會生成重新打包後的apk(未簽名,未對齊優化)
重新打包完成後,在命令行中輸入以下命令進行簽名(根據實際情況選用密鑰,這里以test密鑰為例)
java -jar signapk.jar testkey.x509.pem testkey.pk8 ..\apks\<outdir>\dist\<apkfile>.apk ..\apks\<apkfile>_signed.apk

簽名完成後,在命令行中輸入以下命令進行對齊優化
zipalign -f -v 4 ..\apks\<apkfile>_signed.apk ..\apks\<apkfile>_zipaligned.apk

<apkfile>_zipaligned.apk就是我們最終需要的apk了。
完成
部分apk需要系統框架資源,沒有的話在重新打包時會報錯,這種情況下我們只需要先安裝一下對應系統框架即可(從你目標ROM中把/system/framework/framework-res.apk提取出,放到.\workspace\apktoolbox\apks下)。在命令行中輸入以下命令進行安裝
apktool if ..\apks\framework-res.apk

C. java的源代碼隱藏問題

你要的功能其實是Java代碼混淆,如果要了解Java編譯成exe,可以看「參考資料」。
下面一段文字摘自《Java 手機/PDA 程序設計入門》一書,可以做為混淆器性能的大致觀點:

筆者沒用過DashO,所以無法對其作出個人評價。所以現在僅說明筆者曾用過的產品。以筆者的個人觀點,如果就混淆的程度來說,ZKM最好,JAX中等,RetroGuard和ProGuard最差,一分錢一分貨,這是千古不變的道理。如果就功能性而言,ZKM和JAX都不錯,不過,JAX是IBM所開發的產品,因此也繼承了大部分IBM產品的最大特色,就是「功能超強,可是不易使用」,可能光是要看完JAX的設定文件就是一個很大的問題。

下面分別介紹幾種具有代表性的混淆器,對它們的產品性能進行對比。我們使用不同混淆器對同一段java代碼進行混淆,分別列出混淆後代碼反編譯的結果,並給出使用的一些直接體會。
原始java代碼:
public class SimpleBean implements Serializable {
private String[] name = {"name0","name1","name2","name3"};
private List myList = null;

public void SimpleBean() {
myList = new ArrayList(4);
}
public void init_public() {
myList.add("name");
for(int i= 1; i < 4; i++){
init_private(i);
}
}
private void init_private(int j) {
myList.add(name[j]);
}
private void writeObject(java.io.ObjectOutputStream out)
throws IOException {
}
}

一、ProGuard 4.5.1
ProGuard是一款免費的Java類文件壓縮器、優化器和混淆器。它能發現並刪除無用類、欄位(field)、方法和屬性值(attribute)。它也能優化位元組碼並刪除無用的指令。最後,它使用簡單無意義的名字來重命名你的類名、欄位名和方法名。經過以上操作的jar文件 會變得更小,並很難進行逆向工程。eclipse已經把Proguard集成在一起了。它支持腳本控制,可以使用GUI界面,字元串不加密,支持 J2ME。
類似功能的開源混淆器:
RetroGuard yGuard(RetroGuard的一個升級版本) JODE
Jad反編譯混淆後class得到的代碼:
public class SimpleBean
implements Serializable
{

public SimpleBean()
{
a_java_util_List_fld = null;
}

public void SimpleBean()
{
a_java_util_List_fld = new ArrayList(4);
}

public void init_public()
{
a_java_util_List_fld.add("name");
for(int i = 1; i < 4; i++)
{
int j = i;
SimpleBean simplebean = this;
a_java_util_List_fld.add(simplebean.a_java_lang_String_array1d_fld[j]);
}

}

private String a_java_lang_String_array1d_fld[] = {
"name0", "name1", "name2", "name3"
};
private List a_java_util_List_fld;
}
優點:
1、對內部private方法的調用進行了內聯,但基本達不到混淆效果;
2、使用文檔詳盡,混淆選項配置文件的編寫示例多;
3、混淆選項粒度較細,可以使用GUI界面,支持本地方法的保護等;
4、支持j2me,可以集成到Eclipse;
5、開源。
缺點:
1、符號混淆的命名具有提示性,字元串未加密,沒有其它的混淆措施;
2、混淆主要針對Xlet、Midlet等應用,混淆庫文件時配置文件將會很復雜。

二、Jocky
Jocky是金蝶中間件技術領袖袁紅崗先生的個人作品(舊有名稱JOC)。原本是方便Apusic 應用伺服器的開發,現在開放出來,供大家自由使用。Jocky混淆編譯器是在Sun JDK中提供的Java編譯器(javac)的基礎上完成的,修改了其中的代碼生成過程,對編譯器生成的中間代碼進行混淆,最後再生成class文件,這樣編譯和混淆只需要一個步驟就可以完成。也就是說,它是直接從源碼上做文章,這是Jocky與其它混淆編譯器最大的不同之處。另外可以在源程序中插入符號保留指令來控制哪些符號需要保留,將混淆過程與開發過程融合在一起,不需要單獨的混淆選項配置文件。Jocky的上述特點較適合於java類庫的混淆。
Jad反編譯混淆後class得到的代碼:
public class SimpleBean
implements Serializable
{

public SimpleBean()
{
this;
String as[] = new String[4];
as;
as[0] = "name0";
as;
JVM INSTR swap ;
1;
"name1";
JVM INSTR aastore ;
JVM INSTR p ;
JVM INSTR swap ;
2;
"name2";
JVM INSTR aastore ;
JVM INSTR p ;
JVM INSTR swap ;
3;
"name3";
JVM INSTR aastore ;
_$2;
_$1 = null;
return;
}

public void SimpleBean()
{
this;
JVM INSTR new #9 <Class ArrayList>;
JVM INSTR p ;
JVM INSTR swap ;
4;
ArrayList();
_$1;
}

public void init_public()
{
_$1.add("name");
for(int i = 1; i < 4; i++)
_$1(i);

}

private void _$1(int i)
{
_$1.add(_$2[i]);
}

private void writeObject(ObjectOutputStream objectoutputstream)
throws IOException
{
}

private String _$2[];
private List _$1;
}
優點:
1、除符號混淆外增加了數據混淆(字元數組初始化);
2、有一些語句反編譯只能得到位元組碼指令;
3、在Sun JDK中提供的Java編譯器(javac)的基礎上完成,編譯和混淆一體完成,不需要先生成class文件再混淆;
4、提供了Eclipse的插件,能夠直接在Eclipse中使用Jocky。
缺點:
1、混淆選項粒度較粗,使用中可能要在具體代碼中添加@preserve指令來實現,工作量大;
2、沒有控制流混淆。

三、Allatori 3.1_demo
Allatori屬於第二代混淆器,具有全方位保護你的知識產權的能力。Allatori具有以下幾種保護方式:命名混淆,流混淆,調試信息混淆,字元串編碼,以及水印技術。對於教育和非商業項目來說這個混淆器是免費的。2.1版本支持war和ear文件格式,並且允許對需要混淆代碼的應用程序添加有效日期。
Jad反編譯混淆後class得到的代碼:
public class SimpleBean
implements Serializable
{

public void init_public()
{
d.add(c.k("{u{0"));
int i = 1;
goto _L1
_L3:
H(i);
++i;
_L1:
4;
JVM INSTR icmplt 21;
goto _L2 _L3
_L2:
}

public void SimpleBean()
{
d = new ArrayList(4);
}

private void H(int a)
{
d.add(c[a]);
}

public SimpleBean()
{
d = null;
}

private void H(ObjectOutputStream objectoutputstream)
throws IOException
{
}

private String c[] = {
c.k("\177q\177te"), c.k("\177q\177td"), c.k("\177q\177tg"), c.k("\177q\177tf")
};
private List d;
}
註:c.k是為進行字元串加密額外生成的類c的靜態方法。
優點:
1、設計考慮了庫文件混淆的使用場景;
2、使用文檔詳盡,混淆選項配置文件的編寫示例多;
3、除符號混淆外,還使用了兩種高級的混淆手段:控制混淆(改寫了for循環)和字元串加密(String數組初始化);
4、混淆選項粒度較細,支持本地方法的保護等;
5、支持水印技術,允許對需要混淆的代碼添加有效日期;
6、支持j2me;
缺點:
1、商業軟體(價格附後),對教育和非商業用途免費(網站鏈接是http://www.allatori.com/price.html)。
附:價格情況
SINGLE DEVELOPER LICENSE
1 license $290
2-5 licenses $260
6-10 licenses $230
11+ licenses $200
SITE LICENSE $3750
BUSINESS LICENSE $4850
ANNUAL SUPPORT UPDATE $45

四、Zelix KlassMaster(ZKM)
Zelix KlassMaster是一個來自Zelix Pty Ltd的商業混淆器。官方文檔中關於它的混淆特性的介紹很少。它的保護功能非常強大,可以進行符號混淆和控制混淆,支持字元串的復雜加密保護,堆棧混亂,支持異常重構,支持增量混淆,支持J2ME。Zelix KlassMaster提供試用版本,可以到http://www.zelix.com下載。

五、DashO Pro
DashO Pro 是由Preemptive Solutions開發的商業化的混淆器. 免費的評估版可以到http://www.preemptive.com下載。DashO Pro代碼保護能力強大易用,方便靈活(商業軟體,非開源)。該Java混淆器是Sun的選擇,對於企業級應用,作為其Java開發包的一部分,Sun微系統使用DashO Pro來混淆其加密庫。DashO Pro能夠對ID進行重新命名,使之成為毫無意義的字元;混淆元數據;改變控制流等,所有這些操作使得java代碼被混淆,難於理解。產品特點包括:
領先的Java源碼保護機制;
運用專利Overload-Inction技術對包/類/方法/域進行重命名;
高級的流程式控制制混淆機制;
字元串加密技術;
防止反編譯器生成有用的輸出;
水印軟體;
提高Java源碼效率;
不採用類/方法/域,全面移除常數存儲庫;
類/方法級別的優化,以提高JIT效果;
動態載入檢測到的類;
全面高效的Java源碼的拓展和部署;
支持所有的JDK版本 (JSE, J2EE, J2ME, etc)包括1.5;
自動堆棧跟蹤轉換;
在指定路徑打包或者java jars;
支持任何打包類型的Java內容——程序、庫、applets程序、小伺服器程序、EJB等;支持基於J2ME CLDC的架構,包括MIDP和 iAppli;
支持CLDC預檢驗庫中的類;
可以從指定路徑、Zip壓縮包或者jars中提取;
支持導出100%純粹的Java,並提供驗證;
命令行介面適合集成到構建環境內;
基於XML的配置文件,易於使用;
全面准確的PDF格式用戶指南。

閱讀全文

與反編譯環境id相關的資料

熱點內容
0tc機器人編程 瀏覽:960
編程字體雅黑 瀏覽:72
濟南暖氣哪個app 瀏覽:960
國際服適合用什麼伺服器 瀏覽:733
購買軟軟的解壓玩具 瀏覽:747
改加密腳本名字 瀏覽:204
蘋果app怎麼點也沒反應 瀏覽:763
網盤文件解壓後的怎麼保存 瀏覽:841
如何在蘋果手機上玩安卓火影忍者 瀏覽:347
手機畫3d圖用哪個app 瀏覽:475
如何查看自己部落沖突伺服器地址 瀏覽:914
ecu編程晶元 瀏覽:551
編譯器gpk 瀏覽:31
程序員28原則 瀏覽:918
掌握命令的英文 瀏覽:687
榮耀屏幕錄像在哪個文件夾 瀏覽:584
蘋果伺服器怎麼放雲上去的 瀏覽:539
pdf三維模型 瀏覽:691
面部按摩解壓助眠視頻完整版 瀏覽:847
嵌套泛型java 瀏覽:455