完全可以反編譯成完整的源碼,但是APK在編譯的時候是優化了的, 所以反編譯之後跟原始代碼有差別,還有就是反編譯是根據位元組碼(java的特點)反推java語言,推出來的跟原始的有區別,但是運行效果一模一樣。還有就是你要功底厚才能改寫,還要有個好的工具。你不可能手動反編譯。謝謝。
2. 是不是所有的程序都可以反編譯得到原代碼
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。
3. 能利用反編譯查出源碼嗎
可以,不過前提是看有沒有混淆,或者加固,套殼,如果是軟體開發的那種源碼,得看開發的人有沒有分享源碼呢
一般來說單獨反編譯是看到部分源碼,基本上只能單獨修改或者修訂部分內容。
4. 反編譯為什麼不能得到源代碼
因為源代碼中有很多地方是通過編譯器的預編譯功能規范了的
首先要預編譯才能編譯,反編譯最多隻能得到預編譯後的東西吧
5. java的打包後jar包裡面的class文件都能被反編譯成為源碼嗎
jd-gui這個工具可以進行反編譯的操作。 不過反編譯的質量隨著混淆的程度而定。
特別復雜的代碼(如加密演算法)反編譯一般都有問題。可以建議用 javap -c -p 來看位元組碼。然後參考jvm指令。
一般編譯的文件,都可以反編譯為源碼,但如果是經過加密、以及代碼異常復雜,是很難恢復全部的源碼。
6. 反編譯exe 源碼可能嗎
1、如果exe文件較小,是由匯編語言的源程序編譯得到的,沒有反跟蹤調試、沒有加密,可以反匯編得到可用的源代碼。
2、如果是由解釋語言經過偽編譯得到的exe,比如原來foxpro編譯得到的exe,可通過專門的反編譯工具得到源代碼。
3、如果是由真編譯的高級語言(如c、c++、pascal)編譯得到的exe,很難反編譯得到源代碼。
7. 什麼是逆向工程什麼是反編譯可以根據已經封裝好的程序軟體進行破解分析出源代碼嗎
逆向工程就是根據已有的程序來反推出源代碼以及原來的工程設置,反編譯就是具體的將已經編譯好的程序進行反向工程,從而獲取部分源代碼。一般來說,逆向工程或者反編譯是無法百分之百獲得源代碼的,只能從一定程度上來自源代碼進行猜測,因此根據已經封裝好的程序軟體來進行破解分析出源代碼的可能性並不大,逆向工程的意義並不在於破解源代碼,而是在於了解軟體本身的設計,對於復雜的程序軟體而言破解源代碼的可能性幾乎為零。
8. 反編譯為什麼不能得到源代碼
因為編譯器在編譯時源代碼的一些信息丟失了(或者說換一種方式保存),
比如說自定義的函數名,變數名,在反匯編的代碼中就不會出現。
說到反編譯,現在做的最好的就是IDA
的Hex-Rays
Decompiler
插件,十分強
大,但有時反編譯的代碼可讀性不好,常常指針套指針,不過配合著匯編代碼
來看還是很有參考性的
9. Unity打包好的游戲可以反編譯得到源碼和資源嗎
可以,80%以上的Unity游戲都根本沒做代碼混淆和資源加密,簡直都對不起反編譯三個字。直接拿來用就可以。
工具的話,看代碼用reflector。
資源就是打好包的assetbundle,直接用就好了