-
1 # 天誠老曹
-
2 # 每日速遞News
安卓是一種基於Linux的自由及開放原始碼的作業系統,主要使用於移動裝置,如智慧手機和平板電腦,由Google公司和開放手機聯盟領導及開發。安卓逆向就是將安裝包apk檔案還原成打包前的樣子。逆向分析是一門技術,也是一門藝術。
分類:
1.應用層APK逆向。
2.安卓裝置框架逆向。
3.核心驅動逆向。
4.基於安卓的硬體產品逆向。
逆向工程,主要有幾種用途,第1種是直接修改apk的,例如改程式碼數值、改圖片等的,這時主要用到apktool來解包、打包。第2種是逆向分析,然後原始碼開發出類似功能的,這時用apktool來得到資原始檔,再用dex2jar來得到類似的原始碼,然後再根據邏輯來完善這個工程。
工具/原料
more
apktool dex2jar jd-gui Android簽名檔案
方法/步驟一:使用apktool來解包打包
1/5 分步閱讀
使用apktool來編譯出資原始檔。在命令列輸入:
apktool -d test.apk
2/5
執行上一步後,分析資原始檔。
apktool.yml: apk屬性,這個基本不用修改的.AndroidManifest.xml: 清單檔案, 看這裡可以知道總體的程式碼結構.original: 原始資料, 應用的二進位制清單和簽名.res: 資原始檔,圖片,xml檔案都在這裡。smali: dex解析的程式碼.smali是dex虛擬機器的解析格式,在 dex2jar中,也包含smali格式的轉換.
3/5
修改檔案。一般情況,修改檔案主要是res和smali。修改圖片,主要.9的圖片是不太支援重新打包的。修改smali檔案,可以結合用dex2jar把程式碼反編譯成可讀性強的程式碼,讀懂smali檔案每一代實際代表的java代表的意思。用有的編輯工具編輯smali後,會生成.bak字尾的程式碼,注意要刪掉,否則會重新打包編譯不透過。
4/5
使用apktool重新打包。在命令列輸入:
apktool b test
5/5
簽名apk。沒有簽名的apk是不可用的。在命令列輸入:
jarsigner -digestalg SHA1 -sigalg MD5withRSA -verbose -keystore 金鑰庫名 -storepass 金鑰密碼 -signedjar 生成後apk路徑 原apk路徑 金鑰別名
方法/步驟二:結合dex2jar來生成原始碼
1/2
如果想逆向分析後,用原始碼開發一個類似的,這時需要用dex2jar來生成可讀性強的原始碼。在命令列中輸入:
d2j-dex2jar.bat test.apk
2/2
利用jd-gui等工具,來檢視生成後的jar。這時可以看到程式碼類似開發時寫的java原始碼了,可以大概讀懂大部分邏輯。如果把程式碼複製到Android Studio,會發現還是有些錯誤,這時可以結合邏輯進行修改。
-
3 # 丶南柯叄夢
逆向涉及的技術
反編譯反編譯首先遇到的問題是脫殼,如果APP沒有加殼子的話那還好一點,如果加了殼,那得深入研究下了,可以去網上了解下,不做過多贅述。
反編譯成功以後,需要在清單檔案Androidmainfest.xml裡找到當前APP用到的App name :android:label 和 app icon:,一般的話這兩個會有一個引用地址,找到引用地址,然後去資源目錄下Java .class 的R檔案找到資源地址並記錄下資原始檔名字,之後就可以用新資源覆蓋。
回編譯反編譯完以後,這個時候要再回編譯成apk ,大部分app都有簽名機制,回編譯完之後有可能也執行不起來。網上也有好多解決方案,可自行查詢。
回覆列表
安卓逆向一般指的是做安卓逆向開發,職位也類似於正向開發的JAVA程式設計師;但是需要具備很多的知識儲備來,JAVA正向開發,底層的C,組合語言,瞭解各種協議演算法加解密,會脫殼加固,比較多哈。但是這類資自深大牛的工資都是年薪計算的;正向開發的人員相對飽和,逆向工程師的需求也很大。通俗的給你總結就是,可以做做軟體的破解與防破解,遊戲的破解與防破解。