A. re從零開始的反編譯教程
寫在開頭,引用很喜歡的一句話: 要麼學!要麼不學!學和不學之間沒有中間值 不學就放棄,學就要去認真的學! --致選擇
為了回溯編譯過程(或對程序進行逆向工程),我們使用各種工具來撤銷匯編和編譯過程,這些工具就叫反匯編器和反編譯器。反匯編器撤銷匯編過程,因此我們可以得到匯編語言形式的輸出結果。反編譯器則以匯編語言甚至是機器語言為輸入,其輸出結果為高級語言。
數組的表示方式是:在基本類型前加上前中括弧「[」,例如int數組和float數組分別表示為:[I、[F;對象的表示則以L作為開頭,格式是 LpackageName/objectName;
(注意必須有個分號跟在最後),例如String對象在smali中為: Ljava/lang/String; ,其中 java/lang 對應 java.lang 包,String就是定義在該包中的一個對象。或許有人問,既然類是用 LpackageName/objectName; 來表示,那類裡面的內部類又如何在smali中引用呢?
答案是:在 LpackageName/objectName/subObjectName 的 subObjectName 前加 $ 符號。
方法的定義一般為: Func-Name (Para-Type1Para-Type2Para-Type3...)Return-Type
注意參數與參數之間沒有任何分隔符,同樣舉幾個例子就容易明白
無序列表的使用,在符號"-"後加空格使用。如下:
https://www.jianshu.com/p/1c54c1ccf5cc
https://www.cnblogs.com/onelikeone/p/7594177.html
解決:點擊進去jd-gui,刪除試一試。再不行換最新版本
解析結束後進行編譯報錯
解決方法: https://blog.csdn.net/fuchaosz/article/details/104800802
Failed parse ring installPackageLI: Targeting R+ (version 30 and above) requires the resources.arsc of installed APKs to be stored uncompress
解決方法:
降低gradle里版本,若出現
signatures do not match the previously installed version; ,
使用adb install命令在手機上安裝app時,遇到這個報錯。原因是新裝的app和手機上現有的舊版app沖突了。
解決方法:刪除手機上原來的app,再重新安裝即可。
可是轉念一想如果反編譯的apk都是Version 30 R+以上,難道我解壓後挨個改一遍gradle?太徹淡了,一定有解決方法,所以有了下面探究出現這個問題的解決方法:既然報錯是資源文件高版本不支持,而且沒有4位對齊,那麼不編譯資源文件就好了
APK簽名工具之jarsigner和apksigner:
https://blog.csdn.net/xzytl60937234/article/details/89088215?utm_medium=distribute.pc_relevant.none-task-blog-js_landingword-1&spm=1001.2101.3001.4242
利用apktool反編譯apk,並且重新簽名打包:
https://blog.csdn.net/qq_21007661/article/details/109851522?utm_medium=distribute.pc_relevant.none-task-blog-js_title-4&spm=1001.2101.3001.4242
驗證apktool能否使用
apktool -r d apk名字.apk,不反編譯資源文件,為什麼這么做,先挖個坑
錯誤提示沒有4位對齊和不支持30版本以上的資源文件。所有嘗試不編譯資源文件
解決4位對齊的方法:
查看當前目錄,生成了新文件:abc.keystor
使用JarSigner對apk進行簽名,命令如下
jarsigner -verbose -keystore abc.keystore -signedjar testx.apk src.apk abc.keystore
直接反編譯的apk產生上述錯誤
但是只編譯資源文件的apk安裝時
發現沒有使用V2進行簽名,這時候進行V2簽名, (apksigner,默認同時使用V1和V2簽名 )
所以先對只編譯資源文件的apk進行V2嘗試看能否成功
重復1(進行apktool -r d apk名字.apk)-->2 -->3 -->4( 不使用jarsigner而使用apksigner )
將生成的abc.keystore和打包回的apk( apktoolapp-debugdist 里的app-debug.apk)放入 C:Users aowei.lianAppDataLocalAndroidSdkuild-tools30.0.3 下,因為Android studio的SDK下有apksigner.bat.
對jarsigner只是apk進行了V1簽名;在Android7.0引入了V2簽名,因此,當進入sdk25.0.0及後續版本,會發現一個apksigner.bat執行腳本。
我們可以通過apksigner進行V2簽名,當然,apksigner默認是同時支持V1與V2的,於是:
學習了公鑰和密鑰的使用和區別,使用私鑰的加密演算法稱為對稱加密演算法,這種演算法實現是接收方和發送方公用一道密鑰,優點是效率高,缺點是安全性差,如果被第三人得知密鑰則信息泄露,由此衍生了公鑰加密演算法,也就是非對稱加密演算法,這個演算法是接收方給發送方公鑰,發送方用公鑰加密後發給接收方,接受方再用私鑰解密。這樣即使所有人知道公鑰也不會造成信息泄露。缺點是效率非常低。
此外了解了RSA簽名的大致過程,發送方擁有公鑰和私鑰,對信息進行摘要然後把摘要通過密鑰進行簽名,然後把簽名和信息一起發出去,那麼如何驗證該信息就是發送方發出的呢,這時候就使用到了公鑰驗證,通過公鑰對信息進行解簽,然後使用一樣的摘要演算法得到摘要,如果得到的摘要和解簽後的內容一致則說明是發送方發出。
總結就是公鑰加密,私鑰解密。公鑰驗證,私鑰簽名
RSA 密碼體制是一種公鑰密碼體制,公鑰公開,私鑰保密,它的加密解密演算法是公開的。由公鑰加密的內容可以並且只能由私鑰進行解密,而由私鑰加密的內容可以並且只能由公鑰進行解密。也就是說,RSA 的這一對公鑰、私鑰都可以用來加密和解密,並且一方加密的內容可以由並且只能由對方進行解密。
因為公鑰是公開的,任何公鑰持有者都可以將想要發送給私鑰持有者的信息進行加密後發送,而這個信息只有私鑰持有者才能解密。
它和加密有什麼區別呢?因為公鑰是公開的,所以任何持有公鑰的人都能解密私鑰加密過的密文,所以這個過程並不能保證消息的安全性,但是它卻能保證消息來源的准確性和不可否認性,也就是說,如果使用公鑰能正常解密某一個密文,那麼就能證明這段密文一定是由私鑰持有者發布的,而不是其他第三方發布的,並且私鑰持有者不能否認他曾經發布過該消息。故此將該過程稱為「簽名」。
Android 簽名機制 v1、v2、v3
進入JDK/bin, 輸入命令
參數:
進入Android SDK/build-tools/SDK版本, 輸入命令
參數:
例如:
最後安裝加 -t :
附上參考鏈接:
https://blog.csdn.net/A807296772/article/details/102298970
配置NDK的時候如果按鈕是灰色的,手動配置
直接在javac後面指定編碼是UTF-8就是了。
需要注意的是要加上* -classpath .其中classpath後面的一個黑點是不能省略的。
編譯好後如何導入so庫
成功運行後發現lib目錄下已經apk編進去so了
https://www.52pojie.cn/thread-732298-1-1.html
本節所有到的工具和Demo
IDA
鏈接: https://pan..com/s/15uCX8o6tTSSelgG_RN7kBQ
Demo
鏈接: https://pan..com/s/1vKC1SevvHfeI7f0d2c6IqQ
找到so並打開它 因為我的機型是支持arm的所以我這里打開的是armeabi文件夾下的so 如果機型是x86模式的那麼這里要打開x86模式下的libJniTest.so
編譯過程:
按住鍵盤組合鍵 shift + f12 打開字元串窗口 這個窗口將會列舉出so中所包含的所有字元串 因為上節課我們只編寫了一個字元串 所以這里只有一個hello 52pojie! 如果打開的是x86的so這里還會有一些.so 但是字元串只有這一個
滑鼠點在hello 52pojie!字元串上,打開 Hex mp窗口,修改hello 52pojie!對應內存地址的內容
關於字元對應的16進制可以在網路搜索ascii碼表 找到字元所對應的16進制
因為我要把hello 52pojie!修改成hello world! 是不是只要找到每個字元所對應的hex修改就好了
這里我看到 hello 52pojie!對應的hex是:68 65 6C 6C 6F 20 35 32 70 6F 6A 69 65 21
我在ascii碼表上找到world所對應的十六進制是:77 6F 72 6C 64
所以hello world! 對應的十六進制是:68 65 6C 6C 6F 20 77 6F 72 6C 64 21
注意編輯的時候游標暫停的位置只有先輸入字母才能更改成功,修改好後 右鍵Apply changes應用
退出後保存
此時已經so修改完畢
大功告成,hello 52pojie! --> hello world!
B. 幾種java反編譯軟體的安裝以及使用總結
下面是在網上找的幾種反編譯軟體的安裝以及使用:
一、JD-JUI
官網下載鏈接:http://jd.benow.ca/
下載之後解壓,
點擊「jd-gui.exe」運行:
直接將".jar"文件拖入進去即可查看里邊的「.class」文件,如上圖所示。
二:Luyten
官網下載鏈接:https://github.com/deathmarine/Luyten/releases/tag/v0.5.3
點擊「luyten-0.5.3.exe」下載,下載之後點擊運行,運行後的界面如圖所示,同樣也是講「.jar」文件拖入進入即可。
三、在eclipse中安裝反編譯工具
准備工作:
「jad.exe」下載:https://varaneckas.com/jad/
「net.sf.jadclipse_3.3.0.jar」下載:https://sourceforge.net/projects/jadclipse/files/
jad.exe」下載:
「net.sf.jadclipse_3.3.0.jar」下載:
然後將「net.sf.jadclipse_3.3.0.jar」拷貝到eclipse的plugins目錄下,再刪除eclipse的configuration目錄下「org.eclipse.update」文件,這一步很重要!
重啟eclipse,點擊window->Preference->Java,你會發現里邊多了一個插件「JadClipse」,
選中這個插件,將下圖中紅圈圈的地方的地址填寫為你 「jad.exe」文件的地址
還沒有配置完,先不要close,
點擊General->Editors->File Associations 後,進入下邊的界面
設置.class 文件默認打開方式:
設置.class without source文件的默認打開方式,
需要注意的是,「JadClipse Class File Viewer」這個一開始是沒有的,需用添加,如下圖所示:
接下來在eclipse中查看反編譯後的代碼:(這種方法可能不合適,但是能夠查看)
新建一個EJB project,右鍵「import」,選中"EJB JAR file",導入你的jar包,Finish
在項目下找你要查看的反編譯的文件即可,如果你遇到了下邊的這種情況
關閉這個文件後再次打開,就可以查看了(我的是這樣,所以我感覺這個方法不太好,但別的方法又不知道怎麼查看):
有錯誤或者有更好的方法,希望大家在下邊留言指出
C. 如何反編譯exe文件
反編譯exe文件基本上是不可能的,因為反編譯過程由很多因素會干擾,反編譯過程:
1、檢測程序時候加殼了,如果加殼就必須先去殼。
2、去殼後需要猜測程序員採用的是什麼編程語言,編程語言有:java/c/c++/c#/vb/VC++等等。
3、猜測到程序員使用的語言後根據編程語言進行匯編,匯編需要考慮到語言中的語法問題,即使是同種語言,一種命令有多種說法,匯編成功率在20%左右。
4、匯編成功後基本就已經到反編譯的頂端了,要從匯編程序翻譯成源碼可能性為1%。
D. 函數產生的社會背景
歷史表明,重要數學概念對數學發展的作用是不可估量的,函數概念對數學發展的影響,可以說是貫穿古今、曠日持久、作用非凡,回顧函數概念的歷史發展,看一看函數概念不斷被精煉、深化、豐富的歷史過程,是一件十分有益的事情,它不僅有助於我們提高對函數概念來龍去脈認識的清晰度,而且更能幫助我們領悟數學概念對數學發展,數學學習的巨大作用.
(一)
��馬克思曾經認為,函數概念來源於代數學中不定方程的研究.由於羅馬時代的丟番圖對不定方程已有相當研究,所以函數概念至少在那時已經萌芽.
��自哥白尼的天文學革命以後,運動就成了文藝復興時期科學家共同感興趣的問題,人們在思索:既然地球不是宇宙中心,它本身又有自轉和公轉,那麼下降的物體為什麼不發生偏斜而還要垂直下落到地球上?行星運行的軌道是橢圓,原理是什麼?還有,研究在地球表面上拋射物體的路線、射程和所能達到的高度,以及炮彈速度對於高度和射程的影響等問題,既是科學家的力圖解決的問題,也是軍事家要求解決的問題,函數概念就是從運動的研究中引申出的一個數學概念,這是函數概念的力學來源.
(二)
��早在函數概念尚未明確提出以前,數學家已經接觸並研究了不少具體的函數,比如對數函數、三角函數、雙曲函數等等.1673年前後笛卡兒在他的解析幾何中,已經注意到了一個變數對於另一個變數的依賴關系,但由於當時尚未意識到需要提煉一般的函數概念,因此直到17世紀後期牛頓、萊布尼茲建立微積分的時候,數學家還沒有明確函數的一般意義.
��1673年,萊布尼茲首次使用函數一詞表示「冪」,後來他用該詞表示曲線上點的橫坐標、縱坐標、切線長等曲線上點的有關幾何量.由此可以看出,函數一詞最初的數學含義是相當廣泛而較為模糊的,幾乎與此同時,牛頓在微積分的討論中,使用另一名詞「流量」來表示變數間的關系,直到1689年,瑞士數學家約翰·貝努里才在萊布尼茲函數概念的基礎上,對函數概念進行了明確定義,貝努里把變數x和常量按任何方式構成的量叫「x的函數」,表示為yx.
��當時,由於連接變數與常數的運算主要是算術運算、三角運算、指數運算和對數運算,所以後來歐拉就索性把用這些運算連接變數x和常數c而成的式子,取名為解析函數,還將它分成了「代數函數」與「超越函數」.
��18世紀中葉,由於研究弦振動問題,達朗貝爾與歐拉先後引出了「任意的函數」的說法.在解釋「任意的函數」概念的時候,達朗貝爾說是指「任意的解析式」,而歐拉則認為是「任意畫出的一條曲線」.現在看來這都是函數的表達方式,是函數概念的外延.
(三)
��函數概念缺乏科學的定義,引起了理論與實踐的尖銳矛盾.例如,偏微分方程在工程技術中有廣泛應用,但由於沒有函數的科學定義,就極大地限制了偏微分方程理論的建立.1833年至1834年,高斯開始把注意力轉向物理學.他在和W·威伯爾合作發明電報的過程中,做了許多關於磁的實驗工作,提出了「力與距離的平方成反比例」這個重要的理論,使得函數作為數學的一個獨立分支而出現了,實際的需要促使人們對函數的定義進一步研究.
��後來,人們又給出了這樣的定義:如果一個量依賴著另一個量,當後一量變化時前一量也隨著變化,那麼第一個量稱為第二個量的函數.「這個定義雖然還沒有道出函數的本質,但卻把變化、運動注入到函數定義中去,是可喜的進步.」
��在函數概念發展史上,法國數學家富里埃的工作影響最大,富里埃深刻地揭示了函數的本質,主張函數不必局限於解析表達式.1822年,他在名著《熱的解析理論》中說,「通常,函數表示相接的一組值或縱坐標,它們中的每一個都是任意的……,我們不假定這些縱坐標服從一個共同的規律;他們以任何方式一個挨一個.」在該書中,他用一個三角級數和的形式表達了一個由不連續的「線」所給出的函數.更確切地說就是,任意一個以2π為周期函數,在〔-π,π〕區間內,可以由
�表示出,其中
��富里埃的研究,從根本上動搖了舊的關於函數概念的傳統思想,在當時的數學界引起了很大的震動.原來,在解析式和曲線之間並不存在不可逾越的鴻溝,級數把解析式和曲線溝通了,那種視函數為解析式的觀點終於成為揭示函數關系的巨大障礙.
��通過一場爭論,產生了羅巴切夫斯基和狄里克萊的函數定義.
��1834年,俄國數學家羅巴切夫斯基提出函數的定義:「x的函數是這樣的一個數,它對於每個x都有確定的值,並且隨著x一起變化.函數值可以由解析式給出,也可以由一個條件給出,這個條件提供了一種尋求全部對應值的方法.函數的這種依賴關系可以存在,但仍然是未知的.」這個定義建立了變數與函數之間的對應關系,是對函數概念的一個重大發展,因為「對應」是函數概念的一種本質屬性與核心部分.
��1837年,德國數學家狄里克萊(Dirichlet)認為怎樣去建立x與y之間的關系無關緊要,所以他的定義是:「如果對於x的每一值,y總有完全確定的值與之對應,則y是x的函數.」
��根據這個定義,即使像如下表述的,它仍然被說成是函數(狄里克萊函數):
f(x)= 1���(x為有理數),
0���(x為無理數).
��在這個函數中,如果x由0逐漸增大地取值,則f(x)忽0忽1.在無論怎樣小的區間里,f(x)無限止地忽0忽1.因此,它難用一個或幾個式子來加以表示,甚至究竟能否找出表達式也是一個問題.但是不管其能否用表達式表示,在狄里克萊的定義下,這個f(x)仍是一個函數.
��狄里克萊的函數定義,出色地避免了以往函數定義中所有的關於依賴關系的描述,以完全清晰的方式為所有數學家無條件地接受.至此,我們已可以說,函數概念、函數的本質定義已經形成,這就是人們常說的經典函數定義.
(四)
��生產實踐和科學實驗的進一步發展,又引起函數概念新的尖銳矛盾,本世紀20年代,人類開始研究微觀物理現象.1930年量子力學問世了,在量子力學中需要用到一種新的函數——δ-函數,
即�ρ(x)= 0,x≠0,
∞,x=0.
且
��δ-函數的出現,引起了人們的激烈爭論.按照函數原來的定義,只允許數與數之間建立對應關系,而沒有把「∞」作為數.另外,對於自變數只有一個點不為零的函數,其積分值卻不等於零,這也是不可想像的.然而,δ-函數確實是實際模型的抽象.例如,當汽車、火車通過橋梁時,自然對橋梁產生壓力.從理論上講,車輛的輪子和橋面的接觸點只有一個,設車輛對軌道、橋面的壓力為一單位,這時在接觸點x=0處的壓強是
��P(0)=壓力/接觸面=1/0=∞.
��其餘點x≠0處,因無壓力,故無壓強,即�P(x)=0.另外,我們知道壓強函數的積分等於壓力,即
�函數概念就在這樣的歷史條件下能動地向前發展,產生了新的現代函數定義:若對集合M的任意元素x,總有集合N確定的元素y與之對應,則稱在集合M上定義一個函數,記為y=f(x).元素x稱為自變元,元素y稱為因變元.
��函數的現代定義與經典定義從形式上看雖然只相差幾個字,但卻是概念上的重大發展,是數學發展道路上的重大轉折,近代的泛函分析可以作為這種轉折的標志,它研究的是一般集合上的函數關系.
��函數概念的定義經過二百多年來的錘煉、變革,形成了函數的現代定義,應該說已經相當完善了.不過數學的發展是無止境的,函數現代定義的形式並不意味著函數概念發展的歷史終結,近二十年來,數學家們又把函數歸結為一種更廣泛的概念—「關系」.
��設集合X、Y,我們定義X與Y的積集X×Y為
��X×Y={(x,y)|x∈X,y∈Y}.
��積集X×Y中的一子集R稱為X與Y的一個關系,若(x,y)∈R,則稱x與y有關系R,記為xRy.若(x,y)R,則稱x與y無關系.
��現設f是X與Y的關系,即fX×Y,如果(x,y),(x,z)∈f,必有y=z,那麼稱f為X到Y的函數.在此定義中,已在形式上迴避了「對應」的術語,全部使用集合論的語言了.
��從以上函數概念發展的全過程中,我們體會到,聯系實際、聯系大量數學素材,研究、發掘、拓廣數學概念的內涵是何等重要.
E. JAVA反編譯軟體
由於JAVA語言安全性高、代碼優化、跨平台等特性,從1995年5月由SUN公司發布後,迅速取代了很多傳統高級語言,占據了企業級網路應用開發等諸多領域的霸主地位。
不過,JAVA最突出的跨平台優勢使得它不能被編譯成本地代碼,而要以中間代碼的形式運行在虛擬機環境中,這使得JAVA的反編譯要比別的高級語言容易實現,並且反編譯的代碼經過優化後幾乎可以與源代碼相媲美。
為了更好地保護知識產權,避免本公司的智力成果輕易被人竊取,開發者有必要對反編譯工具深入了解,以便有針對性地採取保護措施。
目前,比較流行的JAVA反編譯工具有近30種,其中有三款堪稱精品:
一、 應用廣泛的JAD
在眾多的JAVA反編譯工具中,有幾種非常著名的工具使用了相同的核心引擎——JAD,其中主要包括:Front End Plus、mDeJava、Decafe Pro、Cavaj Java Decompiler、DJ Java Decompiler、NMI』s Java Class Viewer和國產的JAVA源代碼反編譯專家。
JAD本身是一個命令行工具,沒有圖形界面,上述的這些工具大多是在JAD內核的基礎之上加了一個圖形界面而已。這么多種產品的共同選擇,足可證明JAD在JAVA反編譯領域中的尊貴地位。
JAD是使用Microsoft Visual C++開發的,運行速度非常快,可以處理很復雜的JAVA編譯文件。眾多的參數使JAD可以靈活應付多種加密手段,令反編譯的代碼更加優化和易讀。由於JAD參數太多,沒必要一一解釋,其中有幾個最常用的如下(以JAD 1.5.8f版本為例):
-d
- 用於指定輸出文件的目錄
-s - 輸出文件擴展名(默認為: .jad),通常都會把輸出文件擴展名直接指定為.java,以方便修改的重新編譯。
-8 - 將Unicode字元轉換為ANSI字元串,如果輸出字元串是中文的話一定要加上這個參數才能正確顯示。
最常用的反編譯指令如下所示:
Jad –d c:\javasource –s .java -8 javatest.class
這條指令將當前目錄下的javatest.class反編譯為javatest.java並保存在c:\javasource目錄里,其中的提示輸出為中文,而不是Unicode代碼。
二、 源碼開放的JODE
JODE是全球最大的開源項目網站Sourceforge.net的成員,在所有的JAVA反編譯器中,JODE的反編譯效果是最好的,尤其是對付一些常見的加密手段,例如混淆技術等,更是出類拔粹。
JODE本身也是純JAVA開發的,最近越來越多的JAVA反編譯軟體也選擇JODE來做它們的核心引擎,例如JCavaj Java Decompiler、BTJ (Back To Java)、jEdit』s JavaInsight plugin等。
JODE是一個可運行的JAR文件,在windows環境下雙擊即可運行。
需要特別說明的是,JODE不是通過常規的Open->File的方式來載入JAVA編譯後的類文件(*.class)或是類包(*.jar)的, 而是通過在Options菜單中的Set Classpath來實現的,單獨的類文件可以將它的上一級目錄作為Classpath輸入,然後再選擇Reload Classpath即可。
新加入的類包或是類的名字會在左側窗口出現,雙擊類包名可以展開目錄樹結構,雙擊需要反編譯的類名則在右上角的窗口中直接顯示反編譯後的源代碼。
三、 獨樹一幟的DAVA
DAVA不是一個獨立的JAVA反編譯器,而是JAVA代碼優化工具Soot的一部分。Soot和JODE一樣是純JAVA開發的,也是一個獨立的JAR包,但卻不能通過雙擊直接運行,而是象JAD一樣在命令行狀態運行。
Soot對環境變數的配置要求非常嚴格,通常情況下要對CLASSPATH做如下設置:
Set CLASSPATH=%CLASSPATH%;c:\sootdir\sootclasses-2.1.0.jar;.;
其中的c:\sootdir\是下載的soot類包放置的路徑,CLASSPATH末尾的.;代表了當前目錄,如果不加上這個的話Soot經常會報一個找不到類的錯誤。
DAVA是作為Soot的一個參數使用的,通常的用法如下:
Java soot.Main –f dava –d c:\javasource javatest
注意最後的類名不用帶.class後綴,因為它默認是處理class文件,這個操作與前述的JAD的參數效果相同。
DAVA採取了流程優化的方式進行反編譯,與傳統反編譯思路不盡相同,但卻對改變流程類的加密方法有獨特的反編譯效果。
上述的三種工具各有千秋,但效果都非常不錯。經測試,它們基本上都可以把JDK自帶的一些常式完全反編譯,然後不加任何修改可再編譯成功,並能正常運行!
F. 將.class文件反編譯成.java文件都有哪些工具
反編譯工具jad簡單用法
以下假設jad.exe在c:\java目錄下
一、基本用法
Usage:jad [option(s)]
直接輸入類文件名,且支持通配符,如下所示。
c:\java\>jad example1.class
c:\java\>jad *.class
結果是將example1.class反編譯為example1.jad。將example1.jad改為example1.java即得源文件。
二、Option -o
不提示,覆蓋源文件
三、Option -s
c:\java\>jad -sjava example1.class
反編譯結果以.java為擴展名。
四、Option -p
將反編譯結果輸出到屏幕
c:\java\>jad -p example1.class
將反編譯結果重定向到文件
c:\java\>jad -p example1.class>example1.java
五、Option -d
指定反編譯的輸出文件目錄
c:\java\>jad -o -dtest -sjava *.class
G. 如何反編譯一個exe文件,並修改裡面一句代碼
1、首先打開瀏覽器,網路搜索「反編譯工具ILSpy」,選擇一個安全的網站進行下載。
H. java反編譯器怎麼用
目前最好的反編譯工具,是小穎JAVA源代碼反編譯超級引摯,Google一下就有下的,很好用