反編譯得到源代碼的比例
『壹』 android 軟體反編譯 可以獲得源代碼嗎
android培訓中有很重要的一個知識點就是反編譯獲得java源代碼,但是這個知識點又恰恰是很多同學的軟肋,很難掌握,今天就來幫你解決你的難題。
環境:win7
步驟:
1,下載工具包
dex2jar-0.0.9.13--反編譯工具--name=dex2jar-0.0.9.13.zip&can=2&q=
jd-gui-0.3.5.windows.zip--反編譯後的文件查看器
分別解壓。
2,將源apk的後綴名修改.jar並解壓,得到其中的classes.dex文件,將classes.dex復制到dex2jar.bat所在目錄dex2jar-0.0.9.13文件夾
在命令行下定位到dex2jar.bat所在目錄 (開始>運行>cmd>cd c:\dex2jar-0.0.9.13)
運行 :dex2jar.bat classes.dex
將生成 classes_dex2jar.jar
接下來就可以通過jdgui下的jd-gui.exe程序打開生成的jar包看到java代碼了。
多看多做多練習是學習語言必須經歷的過程,學習不是一朝一夕的事情,只有恆之以衡的堅持才能帶來成功。希望以上的Android教程能給大家帶來幫助。
『貳』 是不是所有的程序都可以反編譯得到原代碼
Android APK中的Java代碼可以被反編譯到什麼程度主要看APK的加密程度。
第一種情況:無混淆無加密無加殼。
直接利用Dex2jar和JD-GUI可把源碼從APK里摳出來,代碼邏輯清晰,基本上做到可復用,只是資源文件的引用需要計算一下。
第二種情況:混淆。
通常是利用Proguard做的防護。因為是對jar做的不可逆混淆(除非有mapping),因此不能還原成原來的代碼。但是代碼結構,代碼邏輯一致,只要花長時間對代碼進行梳理一樣可找准核心代碼,解密方法跟第一種一致。
第三種情況:加密。
這里以DexGuard為例。對於這種代碼加密的方法,在程序運行中必定會進行解密,只要抽出它解密的邏輯便可。PS:我自己做過DexGuard的解密,如果用Dex2jar反編譯看的話邏輯是不對的,一定要從Smali代碼看。後來發現網上已經有人做了。
解密的腳本:A look inside Dexguard
第四種情況:加殼。
這種情況跟第三種類似。無論你怎麼加殼,運行的時候必定是Dalvik可識別的Odex代碼,建議直接在內存里mp出來。這里推薦Xpose的ZjDroid。
『叄』 怎樣反編譯c++源代碼
C++源代碼無法直接反編譯,但可以通過反匯編或者其他逆向工程手段來分析編譯後的二進制文件。
首先,需要明確的是,反編譯通常指的是將已編譯的二進製程序轉換回高級語言源代碼的過程。然而,在C++的情況下,這是不可能的,因為編譯過程是不可逆的。編譯是將人類可讀的源代碼轉換為機器可執行的二進制代碼。這個過程中,很多源代碼的信息,如變數名、注釋、格式等,都會丟失,因此無法從二進制代碼完全恢復成原始的C++源代碼。
盡管如此,我們可以通過反匯編或者其他逆向工程手段來分析編譯後的二進制文件。反匯編是將機器語言代碼轉換回匯編語言的過程。匯編語言是一種低級語言,它用助記符來表示機器指令,比二進制代碼更易於人類理解。通過反匯編,我們可以查看程序的大致邏輯和結構,但無法恢復成原始的C++代碼。
舉個例子,假設我們有一個簡單的C++程序,它列印出“Hello, World!”。當我們編譯這個程序後,會得到一個可執行文件。如果我們嘗試對這個可執行文件進行反匯編,我們會得到一系列的匯編指令,這些指令描述了程序是如何在內存中載入字元串、如何調用列印函數等。但是,我們無法從這些匯編指令中直接看出原始的C++代碼是`std::cout << "Hello, World!" << std::endl;`。
總的來說,雖然無法直接將C++編譯後的二進制代碼反編譯回源代碼,但我們可以通過反匯編等手段來分析二進製程序的結構和邏輯。這通常用於軟體安全、漏洞分析等領域,以幫助理解程序的內部工作原理。需要注意的是,逆向工程可能涉及法律問題,應確保在合法和合規的范圍內進行。
『肆』 如何反編譯Apk得到Java源代碼
首先要下載兩個工具:dex2jar和JD-GUI
前者dex2jar是將apk中的classes.dex轉化成Jar文件,而JD-GUI是一個反編譯工具,可以直接查看Jar包的源代碼。
首先將apk文件,將後綴改為zip,解壓,得到其中的classes.dex,它就是java文件編譯再通過dx工具打包而成的;
解壓下載的dex2jar,將classes.dex復制到dex2jar.bat所在目錄。在命令行下定位到dex2jar.bat所在目錄(在DOS命令下CD 目錄)
運行
dex2jar.bat classes.dex
生成
classes.dex.dex2jar.jar
運行JD-GUI(jd-gui.exe),打開上面生成的jar包,即可看到源代碼了
『伍』 java的class文件,經過反編譯以後獲得的源代碼是L(小寫),1,i(大寫),o(大寫和小寫),0的組合,是怎麼回事
你看到的已經是源碼了,沒有辦法看到開發時候寫的代碼,因為通過加密混淆軟體,已經把原來寫的代碼中的變數、類名、方法都改成了混亂的組合方式了,所以你看到的都是很混亂的東西,你其實可以自己做一次對自己Java代碼的混淆測試,看看源代碼,再看看混淆後的,你就知道了,根本還原不了