Java 編譯和反編譯

編程語言

編程語言(Programming Language)分為低級(jí)語言(Low-level Language)和高級(jí)語言(High-level Language)。

低級(jí)語言: 機(jī)器語言(Machine Language)和匯編語言(Assembly Language),直接用計(jì)算機(jī)指令編寫程序。
高級(jí)語言: C、C++顷锰、Java精堕、Python等屬于高級(jí)語言即寒,用語句(Statement)編寫程序姨蟋,語句是計(jì)算機(jī)指令的抽象表示报辱。

編譯

將便于人編寫与殃、閱讀、維護(hù)的高級(jí)計(jì)算機(jī)語言所寫成的源代碼程序碍现,翻譯為計(jì)算機(jī)能解讀幅疼、運(yùn)行的低階機(jī)器語言的程序的過程就是編譯。負(fù)責(zé)這一過程的處理的工具叫做編譯器昼接。Java語言中負(fù)責(zé)編譯的編譯器是一個(gè)命令:javac 爽篷。

javac是收錄于JDK中的Java語言編譯器。該工具可以將后綴名為.java的源文件編譯為后綴名為.class的可以運(yùn)行于Java虛擬機(jī)的字節(jié)碼慢睡。

反編譯

反編譯的過程與編譯剛好相反逐工,就是將已編譯好的編程語言還原到未編譯的狀態(tài)铡溪,也就是找出程序語言的源代碼。就是將機(jī)器看得懂的語言轉(zhuǎn)換成程序員可以看得懂的語言泪喊。Java語言中的反編譯一般指將class文件轉(zhuǎn)換成java文件棕硫。

Java常用反編譯工具

JAVAP

javap是jdk自帶的一個(gè)工具,可以對(duì)代碼反編譯窘俺,也可以查看java編譯器生成的字節(jié)碼饲帅。javap和其他兩個(gè)反編譯工具最大的區(qū)別是他生成的文件并不是java文件,也不像其他工具生成代碼那樣更容易理解瘤泪。

javap并沒有將字節(jié)碼反編譯成java文件灶泵,而是生成了一種我們可以看得懂字節(jié)碼。其實(shí)javap生成的文件仍然是字節(jié)碼对途,只是程序員可以稍微看得懂一些赦邻。如果你對(duì)字節(jié)碼有所掌握,還是可以看得懂实檀。其實(shí)就是把String轉(zhuǎn)成hashcode惶洲,然后進(jìn)行比較。

JAD

JAD是一個(gè)比較不錯(cuò)的反編譯工具膳犹,只要下載一個(gè)執(zhí)行工具恬吕,就可以實(shí)現(xiàn)對(duì)class文件的反編譯。 由于已經(jīng)很久未更新须床,反編譯java8時(shí)會(huì)出現(xiàn)編譯失敗铐料,比如lambda表達(dá)式。

命令:jad.exe xxx.class 會(huì)生成一個(gè)xxx.jad的文件

CFR

CFR是一個(gè)不錯(cuò)的選擇豺旬,相比JAD來說钠惩,他的語法可能會(huì)稍微復(fù)雜一些,但是好在他可以用族阅。

java -jar cfr_0_110.jar xxxx.class --decodestringswitch false 

--decodestringswitch 表示對(duì)于switch支持string的細(xì)節(jié)進(jìn)行解碼
--decodelambdas 對(duì)lambda表達(dá)式進(jìn)行反編譯篓跛。

JD-GUI

JD-GUI 是一個(gè)用 C++ 開發(fā)的 Java反編譯工具,由 Pavel Kouznetsov開發(fā)坦刀,支持Windows愧沟、Linux和蘋果Mac Os三個(gè)平臺(tái)。而且提供了Eclipse平臺(tái)下的插件JD-Eclipse鲤遥。JD-GUI 基于GPLv3開源協(xié)議央渣,對(duì)個(gè)人使用是完全免費(fèi)的。JD-GUI主要的是提供了可視化操作,直接拖拽文件到窗口既可,效果圖如下:


image.png
如何防止反編譯

提供幾種思路:
● 隔離Java程序
● 對(duì)Class文件進(jìn)行加密
● 對(duì)代碼進(jìn)行混淆

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末渴频,一起剝皮案震驚了整個(gè)濱河市芽丹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌卜朗,老刑警劉巖拔第,帶你破解...
    沈念sama閱讀 216,997評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件咕村,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡蚊俺,警方通過查閱死者的電腦和手機(jī)懈涛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來泳猬,“玉大人批钠,你說我怎么就攤上這事〉梅猓” “怎么了埋心?”我有些...
    開封第一講書人閱讀 163,359評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)忙上。 經(jīng)常有香客問我拷呆,道長(zhǎng),這世上最難降的妖魔是什么疫粥? 我笑而不...
    開封第一講書人閱讀 58,309評(píng)論 1 292
  • 正文 為了忘掉前任茬斧,我火速辦了婚禮,結(jié)果婚禮上梗逮,老公的妹妹穿的比我還像新娘项秉。我一直安慰自己,他們只是感情好慷彤,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,346評(píng)論 6 390
  • 文/花漫 我一把揭開白布娄蔼。 她就那樣靜靜地躺著,像睡著了一般瞬欧。 火紅的嫁衣襯著肌膚如雪贷屎。 梳的紋絲不亂的頭發(fā)上罢防,一...
    開封第一講書人閱讀 51,258評(píng)論 1 300
  • 那天艘虎,我揣著相機(jī)與錄音,去河邊找鬼咒吐。 笑死野建,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的恬叹。 我是一名探鬼主播候生,決...
    沈念sama閱讀 40,122評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼绽昼!你這毒婦竟也來了唯鸭?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,970評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤硅确,失蹤者是張志新(化名)和其女友劉穎目溉,沒想到半個(gè)月后明肮,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,403評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡缭付,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,596評(píng)論 3 334
  • 正文 我和宋清朗相戀三年柿估,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片陷猫。...
    茶點(diǎn)故事閱讀 39,769評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡秫舌,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出绣檬,到底是詐尸還是另有隱情足陨,我是刑警寧澤,帶...
    沈念sama閱讀 35,464評(píng)論 5 344
  • 正文 年R本政府宣布河咽,位于F島的核電站钠右,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏忘蟹。R本人自食惡果不足惜飒房,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,075評(píng)論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望媚值。 院中可真熱鬧狠毯,春花似錦、人聲如沸褥芒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)锰扶。三九已至献酗,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間坷牛,已是汗流浹背罕偎。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留京闰,地道東北人颜及。 一個(gè)月前我還...
    沈念sama閱讀 47,831評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像蹂楣,于是被迫代替她去往敵國(guó)和親俏站。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,678評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • Java的編譯和反編譯 什么是編譯 編譯就是把C痊土、C++肄扎、Java等高級(jí)語言轉(zhuǎn)換成匯編語言、機(jī)器語言等低級(jí)語言的過...
    人在碼途閱讀 5,907評(píng)論 0 2
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,091評(píng)論 25 707
  • 編譯 編程語言有高級(jí)和低級(jí)之分。所謂低級(jí)語言就是指可以被計(jì)算機(jī)理解并執(zhí)行的語言犯祠,例如機(jī)器語言萌丈。而高級(jí)語言計(jì)算...
    still_loving閱讀 1,733評(píng)論 0 4
  • 你辆雾,是上天派在我身邊的天使 每周約定 不論風(fēng)雨 訴衷腸 不約而同的撞衫 每天的呼叫 已經(jīng)成為彼此生命中重要的一部分...
    麗娜_靈魂有香氣的鋼琴老師閱讀 276評(píng)論 0 0
  • 沉魚浣紗魚忘游, 落雁和親雁悲留月劈。 閉月浮云遮明月度迂, 羞花落淚葉卷球。
    姜德馨閱讀 187評(píng)論 0 0