SystemUI.apk文件反編譯初次嘗試


瘟疫期期間,閑來無事,從手機系統中提取了SystemUI.apk文件,打開查看發現亂碼,於是嘗試反編譯apk。

准備工作:

0.首先確保使用java 1.8或以上

1.下載運行腳本並重命名為apktool.bat,下載地址(官網):https://raw.githubusercontent.com/iBotPeaches/Apktool/master/scripts/windows/apktool.bat

2.下載最新的apktool並重命名為apktool.jar,下載地址:https://bitbucket.org/iBotPeaches/apktool/downloads/

3.放在一個文件夾,雙擊運行apktool.bat,會輸出用法

4.反編譯apk,命令格式:apktool d [ apk文件名 ]

Windows:
下載Windows 包裝程序腳本(右鍵單擊,將鏈接另存為apktool.bat)
下載apktool-2(在這里找到最新的)
將下載的jar重命名為 apktool.jar
將兩個文件(apktool.jar&apktool.bat)移至Windows目錄(通常為C://Windows)
如果您無權訪問C://Windows,則可以將兩個文件放在任何位置,然后將該目錄添加到環境變量系統PATH變量中。
嘗試apktool通過命令提示符運行。

注意 -包裝腳本不是必需的,但很有用,因此您不必java -jar apktool.jar一遍又一遍地輸入。在修改之前首先對APK文件內部結構有個了解:AndroidManifest.xml 程序全局配置文件classes.dex 這是Dalvik字節碼

resources.arsc 編譯后的二進制資源文件
META-INF\ 該目錄下存放的是簽名信息
res\ 該目錄存放資源文件
assets\ 該目錄可以存放一些配置文件
AndroidManifest.xml對應這些文件和目錄做些基本的注釋和介紹:

使用命令:apltool d SystemUI.apk

但是發現報錯:

Can't find framework resources for package of id: 2. You must install proper framework files, see project website for more info.

錯誤提示:該錯誤原因提示我們不能找到id=2的框架包資源,必須安裝正確的框架(framework)文件;

分析報錯原因:反編譯的apk針對特定的框架做了適配,依賴framework中部分資源文件,在反編譯過程中未找到相關的文件所以報錯。

嘗試解決:
由上述分析可知,當發生此類錯誤時,需要我們首先安裝依賴的框架資源文件,然后再執行反編譯。

以honor v10為例,都在framework文件夾里面,里面有兩個apk:framework-res.apk、framework-res-hwext,把整個framework文件夾提取出來,

執行安裝命令

apktool if  apkname 

之后再次嘗試反編譯SystemUI.apk

此時我們現在安裝的framework resource與報錯信息中的id一致,說明已找到正確的framework resource。

但,之后還是報錯,如下:

S: Could not decode file, replacing by FALSE value: drawable-hdpi-v4/flashlight_bt_off.png
I: Decoding values */* XMLs...
Exception in thread "main" java.lang.NullPointerException
at brut.androlib.res.data.value.ResEnumAttr.serializeBody(ResEnumAttr.java:56)
at brut.androlib.res.data.value.ResAttr.serializeToResValuesXml(ResAttr.java:64)
at brut.androlib.res.AndrolibResources.generateValuesFile(AndrolibResources.java:742)
at brut.androlib.res.AndrolibResources.decode(AndrolibResources.java:263)
at brut.androlib.Androlib.decodeResourcesFull(Androlib.java:129)
at brut.androlib.ApkDecoder.decode(ApkDecoder.java:124)
at brut.apktool.Main.cmdDecode(Main.java:170)
at brut.apktool.Main.main(Main.java:76)

不知道為什么執行一半就終止了,后來發現部分xml的亂碼已經可見代碼,但是是一些放油png等資源文件及目錄沒有出來。

查看apk文件目錄發現有一個:resources.arsc,打開出現亂碼,沒想到轉化明文的方法(似乎被加密了)。

應該就是它的問題,嘗試打開出現:The file is not dispalyed in the edior because it is either bianry or uses an unsupported text encoding.Doyou want to open it anyway? 

目前尚未想到好的解決方案。

希望各位大佬看到給予指導。本文處於分享學習交流的目的,玩耍反編譯還望恪守律己。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM