jadx反編譯代碼能不能運行
Ⅰ eclipse debug下,為什麼實際運行的代碼和看到的不一致(源碼是jad反編譯的)
通過反編譯的不可能是完全的相同你知道那些class 要是商用還會加密。要是開源的部份就直接去下源碼看不要反編譯。
Ⅱ java程序能被反匯編嗎
呵呵 首先,java可以反編譯,現在已經有反編譯軟體了,你已經用過了,就知道的確很強大。不過,java相對來說,還是安全的,現在似乎還有種反反編譯,聽說過,不了解。
這些我們可以通過一些演算法去加密之類的,比如md5這樣的。所以還是不用擔心java的安全性。
然後,java是可以寫病毒的。只是,java的使用需要對方先安裝jvm之類的,所以說,如果對方沒安裝,那你病毒就沒用了。所以現在很少人用java寫病毒,就像linux里很少人會去浪費時間寫病毒的。
Ⅲ 任何程序都可以反編譯嗎為什麼有一些程序不可以反編譯
javap是用作反編譯的,但是javap只能給出你要反編譯的class的結構,比如有什麼方法,有什麼static或者非static的變數什麼,但不可能產生源代碼編譯後的文件不是原代碼文件,所以不能直接拿來編譯。希望樓主採納
Ⅳ 如何反編譯Android 的apk/dex/odex,獲得源碼
關於APK,DEX的介紹
當我們編譯一個安卓項目的時候,整個項目會被打包成一個 .apk文件。這個文件其實是一個標準的zip文件,因此可以用解壓縮工具打開。這個apk文件一般都包含程序的代碼(在classes.dex文件中), 資源文件, 證書, manifest 文件等。 其中對我們最重要的是classes.dex文件,因為編譯後的位元組碼(bytecode)都是放在這個文件中。我們後面講的反編譯就是針對這個dex文件來的。
反編譯普通的APK文件:
對於普通的APK/DEX文件的反編譯,其實工具有很多, 包括:
ByteCode Viewer: 一個可視化的集成工具,說實話,不太好用,不夠穩定,生成代碼質量中等。
dex2jar + jd_gui: 這兩個工具組合還可以, 用起來比ByteCode Viewer麻煩一些,但比較穩定,生成代碼質量中等。
在線反編譯工具JADX: http://www.javadecompilers.com/apk , 這是基於SourceForge上的JADX的開源工具來實現的。本來以為在線反編譯質量不會好,但出人意料的是:JADX是我發現的最好的反編譯工具, 不但使用簡單(直接上傳,轉換,下載就ok),而且反編譯出來的代碼質量很高,特別是變數命名方面,可讀性很不錯。
反編譯ODEX文件:
Android 5.0 Lollipop以後,Google用ART代替了以前的Dalvik,對於普通的app來說我們仍然可以用上面的方法來把dex文件反編譯成Java源代碼。但對於系統預裝的App,特別是類似應用商店,播放器等, 你會發現這些應用的apk文件中找不到對應的classes.dex文件,而是會發現在其子目錄下有個.odex文件。 那如何反編譯這個odex文件呢?我通過google查了查,知道應該用baksmali,但從github上下載了幾個版本都不行,報各種不同錯誤。經過反復搜索和嘗試,終於找到了這篇文章
: http://www.naldotech.com/how-to-deodex-applications-on-android-5-0-lollipop/ 。 具體方法如下:
1. 從這里下載工具包, 解壓縮到本地。 這里的baksmali的版本是2.0.3. 不同版本的baksmali針對的Android內核不同。有時候高版本反倒不好用。
2. 打開工具所在目錄, 按住shift鍵, 點擊滑鼠右鍵,打開windows命令窗口
3. 把 odex文件拷貝到該目錄
4. 在命令窗口運行: oat2dex.bat *.odex. 正常情況下,應該顯示OK等信息。如果報錯的話,說明這個文件無法轉換,後面的也不用試了。
5. 運行 oat2dex.bat *.odex temp.dex . 運行後會創建一個temp.dex文件。
6. 運行 java -jar baksmali-2.0.3.jar -a 21 -x temp.dex -o source . 運行後會創建一個source的文件夾,並將temp.dex反編譯到該文件夾。-a 21 表明的是Android內核的版本21
7. 運行 java -jar small-2.0.3.jar -a 21 source -o classes.dex, 反編譯為classes.dex文件。
需要注意的是:由這種方式反編譯成的classes.dex 文件相比原生的classes.dex 還是缺少了些信息,因此反編譯這種classes.dex 文件後生成的java代碼可讀性會更差些。
8. 用在線工具JADX 來把 classes.dex 最終反編譯為java代碼。
Ⅳ JAR文件經過反編譯 得出的代碼輸入eclipse無法運行很多錯誤
反編譯過的jar得到的最終代碼形式和手動敲上去的一樣,至於錯誤的原因,大概的分析下來我覺得至少有這幾種可能,包之間的依賴(其他包的引用,但在你的項目擬不存這個包),另外一種就是語法不全,或是語法混亂,有的反編譯工具就可能會生成錯誤的語法結構.... 至於反編譯工具,還沒用過這個東西,所以暫不討論那些好,那些壞了!
Ⅵ jadx反編譯後可以重新打包嗎
1、首先新建一個android項目,裡面只有一個MainActivity,而且主界面只會顯示一個字元串:你好。
2、接著,切換到這個項目生成的apk文件所在的目錄,可以看到有一個hellodemo.apk。
3、在命令行輸入:apktool d -r hellodemo.apk。可以看到在當前目錄下生成了一個hellodemo文件夾。
4、進入到hellodemo\smali\com\example\hello,打開MainActivity.smali。找到:
const-string v1, "\u4f60\u597d",
修改為:
const-string v1, "hello",
5、然後在命令行輸入:apktool b hellodemo hellodemo1.apk。這回重新打包成hellodemo1.apk。
6、然後給新生成的apk進行簽名。把這個apk拷貝到autosign的目錄下面,然後切換過去,在命令行輸入:java -jar signapk.jar testkey.x509.pem testkey.pk8 hellodemo1.apk hellodemo.apk。
7、把生成的hellodemo.apk安裝到手機,可以看到主界面上已經顯示的是hello,而不再是你好。說明反編譯重新打包成功!
Ⅶ 用Reflector 反編譯後的代碼怎麼讓他運行起來
使用Reflector反編譯exe或dll文件都可能無法進行編譯(這里指已經對目的文件進行了脫殼處理),主要原因有以下幾點:
1、如果對方使用了混淆技術,我們再反匯編會非常棘手,我常用的做法是把某個亂七八糟的名稱使用自己的命名規范重新批量重命名,這樣便於分析程序的結構。
2、Reflector對枚舉類型的支持不是很好,它往往會把枚舉當做整數進行處理,這個需要你手動更正過來。
3、對於自動屬性,你需要把不符合編譯語法的地方更正過來。自動屬性的私有欄位一般都含有<>等,需要手動更正一下。
4、對於Winform,你需要重新編譯一下相關的資源文件,如果編譯過程提示找不到資源的話。
5、對於靜態變數或者靜態類,這個你更要注意。舉個例子:假如靜態變數A,和B,而B又用到了A,這時候你要檢查他們的初始化設置是否是先初始化的A,然後再初始化B,否則編譯通不過。
Ⅷ android反編譯apk的代碼怎麼運行起來
Android 是 .apk 文件 網上有反編譯的軟體 可以反編譯成源代碼,你可以去網上找找,我用的是 jd-gui-0.3.3 但是,一般來說 程序員在 開發完成後都會混淆打包,即使是反編譯出來,也會有很多 abcdefg,,,, 表示的亂碼 有的軟體 沒混淆 就可以得到源碼,但是這樣的軟體 一般都能在網上找到開源的相關的代碼 祝你成功 !
