android反編譯失敗
A. 各位安卓反編譯大神,為什麼我反編譯框架成功,而回編譯失敗呢
文件id值沒有在public.xml中設定。要麼給相應文件添加id值(注意添加規則),要麼刪掉public.xml文件,
B. 安卓apk反編譯 一直不成功 ,java環境配置ok的 下了很多工具apktool都不能用 要麼有的可以反編譯成功
我建議你下載一個軟體叫91助手
C. 為什麼很多APK文件反編譯了打包出錯
可能是由於以下幾種情況導致
1、在Android Project配置文件中你使用了當前工程目標版本所沒有的特性,針對這種情況只需更改下目標版本就行了
2、apktool.jar可能不是最新的,針對這種情況下載最新版的apktool.jar就行了
3、在windows平台上aapt.exe、apktool.bat可能不是最新的,針對這種情況也只需下載最新版
D. AndroidKiller老是顯示反編譯失敗,無法繼續下一步源碼反編譯,那位大神知道進來告訴一聲被.
文件擴展名太長。上一行已經提示了。
E. Android反編譯(三)— 手動編譯
PS: 最近沒工作,沒工作就沒需求,沒需求就沒什麼技術總結的靈感,那就沒更新什麼。但是兩個月不更新了,要是三個月不更新就會出大事,所以這次打算做一件有意思又不難的事。
之前有發文章寫過反編譯,今天就來試試反編譯之正編譯,開玩笑的,就是試試手動編譯的過程, 平時我們在項目中編譯出包都是使用Gradle直接執行assemble任務就能解決,我打算試試手動模擬整個過程。當然我也是第一次這樣搞,所以如果有寫得不對的地方,還望指出。
眾所周知,apk實質上就是一個壓縮包。復習一下,我們寫個最簡單的Demo,然後打包,然解壓,注意是解壓,不是反編譯,意義是不同的。
注意我這個Demo很簡單,什麼都不引入
然後我們看看整個出包的過程,隨便從網上拿張圖
然後這里我們用Android SDK給我們提供的工具來完成整個流程,工具在sdk文件夾下的build-tools文件夾下,有什麼aapt.exe、dx.bat,用的就是這些
這步應該是整個流程最簡單的吧,我感覺,所以從最簡單的開始。
我們先看看生成的dex有什麼
對比項目,我是一開始最基本的項目,什麼都沒動,所以只有一個MainActivity.clas,所以這里肯定是要先想辦法得到BuildConfig.class和R.class。
輸入命令:
aapt p -f -m -J <輸出路徑> -S <res路徑> -I <android.jar路徑> -M <Manifest路徑>
下一步,我們需要BuildConfig.class
這個BuildConfig.java是由gradle在我們配置好gradle之後自己幫我們生成的,所以我們直接拿來用,然後再javac就得到class文件了
然後我們再編譯我們的MainActivity.java並將它們放到同一個文件夾下, MainActivity因為引用了Android.jar和R文件,所以編譯時注意點,我為此被動好好的復習了一遍javac,都是淚
最後一步,我們用dx工具就能打出dex文件了
然後執行命令就得到一個Dex文件,看看這個文件裡面和上面直接打出的apk中的Dex文件有什麼不同:
看圖,我們上一步已經生成.dex了,那麼我們需要和compiled Resource 還有 Other Resource 一起生成APK。
我們先來生成compiled Resource,也就是resources.arsc
發現之前使用aapt生成R文件的時候沒寫完整,當時可以加一個-F參數直接生成arsc和Manifest
導出的abc.zip裡面就有resources.arsc和AndroidManifest.xml。
因為之前寫漏了,所以肯定要重新編一次MainActivity.java和Dex
我們把剛才的dex文件和aapt生成的resources.arsc、AndroidManifest.xml和res放到一個文件夾裡面。
PS:res文件夾也是上面aapt的命令生成的
然後我們對比這個文件夾和之前apk解壓的文件夾
最後運行
看來是成功了。
再說說遇到的還有兩個問題,並說下我解決問題的思路
(1)我把它們都放到一個文件夾之後,我壓縮成壓縮包,然後改後綴成.apk,然後發現安裝不了,我就直接反編譯,發現發編譯失敗,提示包有問題,以我多點玩包的經驗,我感覺就是壓縮工具出了問題,然後我去下個「好壓」(這不是廣告啊),然後就能正常反編譯了。
(2)但是還是安裝不了,再根據我多年的玩包經驗,我感覺是簽名問題,然後我隨便給這個包上一個簽名,就能正常安裝得到上圖的結果了。
總體來說,還真挺好玩的,這整個過程,就是翻車了幾次。做完之後感覺非常牛逼,為什麼這樣說,因為我知道這整個過程,我就可以做到,我不經過gradle來打包,我自己寫個python腳本來調用aapt和dx來打包也是能做到的。
當然上面純屬異想天開,因為這是個什麼都沒有的Demo所以覺得簡單,要是一個真實的項目,我感覺肯定要有很多坑,別的先不說,一個項目那麼多依賴關系,我這javac要搞死人。
最後如果有不對的地方,希望有大佬能夠指出,畢竟能運行也不能證明完全沒問題。然後我使用的build-tools是28的,不敢保證其它版本包括以後版本的玩法都一樣。
F. apk反編譯,回編出錯了
不影響正常運行,只是編譯環境,
compileSdkVersion 告訴 Gradle 用哪個 Android SDK 版本編譯你的應用。使用任何新添加的 API 就需要使用對應 Level 的 Android SDK。
需要強調的是修改 compileSdkVersion 不會改變運行時的行為。當你修改了 compileSdkVersion 的時候,可能會出現新的編譯警告、編譯錯誤,但新的 compileSdkVersion 不會被包含到 APK 中:它純粹只是在編譯的時候使用。(你真的應該修復這些警告,他們的出現一定是有原因的)
因此我們強烈推薦總是使用最新的 SDK 進行編譯。在現有代碼上使用新的編譯檢查可以獲得很多好處,避免新棄用的 API ,並且為使用新的 API 做好准備。
注意,如果使用 Support Library ,那麼使用最新發布的 Support Library 就需要使用最新的 SDK 編譯。例如,要使用 23.1.1 版本的 Support Library ,compileSdkVersion 就必需至少是 23 (大版本號要一致!)。通常,新版的 Support Library 隨著新的系統版本而發布,它為系統新增加的 API 和新特性提供兼容性支持。
解決辦法有兩種(我測試的前提是反編譯的母包是沒有包含這兩個屬性的):
(1)使用apktool 2.3.2版本,因為2.3.3之後版本針對appt和appt2做了修改,最後AndroidManifest.xml裡面不在包含compileSdkVersion和compileSdkVersionCodename
(2)清除原本的1.apk,重新指定framework-dir:java -jar apktool_2.4.0.jar empty-framework-dir --force,最後發現可以回編譯成功,但是AndroidManifest.xml還是會包含compileSdkVersion和compileSdkVersionCodename。
G. android 反編譯錯誤 遇到 亂碼的文件名 怎麼辦
准備反編譯工具;
將apk後綴改為.zip並解壓,發現res文件夾下打開的布局文件亂碼;
反編譯工具包里有一個AXMLPrinter2.jar可用於將XML變為可讀文件,但是會引起數組越界的異常;這里提供另一個jar包AXMLPrinter2.S.jar,可實現解析;
下載完jar包後,打開命令行,cd到該jar包路徑下,運行Java -jar AXMLPrinter2.S.jar 文件所在路徑指定文件名.xml命令即可反編譯出xml文件;
但是如果XML文件很大,一屏看不完,則在命令窗口可能無法看全,這時候可以執行命令|more的指令,即Java -jar AXMLPrinter2.S.jar 文件所在路徑指定文件名.xml | more,發現屏幕最後會有--more--的字樣,按回車鍵可逐行顯示出來,但是無法返回看原先的數據;
如果想簡單的到處全部數據,可執行下面的命令Java -jar AXMLPrinter2.S.jar 文件所在路徑指定文件名.xml > 指定路徑文件名.txt(或XML),則該XML數據將全部寫入該文件中;
H. ANDROID反編譯失敗並且壓縮程序無法對那個APK進行刪除或添加或修改!求解決辦法
把那個apk結尾的改成zip再解壓
