android逆向工程反编译指南(详细教程)
要反編譯一定要用到工具。
apktool是谷歌官方推出的反編譯軟件,只能說還能用。而且至今沒有好用的IDE。android反編譯就是通過apktool這個工具來實現的。其他的GUI環境,例如AndroidKiller都是給apktool套了一個殼而已。不過不得不提的是AndroidKiller這個軟件還是非常的好用的,雖然已經不再更新,里面的提供的一些小工具還是非常的實用。
最簡單反編譯
使用AndroidKiller可以非常簡單反編譯apk(只是例子簡單)。
首先我們用Android Studio創建一個HelloWorld,不做任何的事情,我們要實現的功能就是修改App的名字。
打開apk,AndroidKiller會自動幫我們反編譯成下面的這些文件,底層使用的apktool.jar這個工具。App的名字定義在res/values/strings.xml文件里面,里面有一個name="app_name"的字段。把值修改為“被反編譯了”。
然后點擊左上角的編譯,AndroidKiller會自動幫我們打包并加簽名。如果成功的話,會在日志的最后一行告訴你生成的apk的位置。這個就是我們反編譯的文件了。把這個文件安裝到模擬器或者真機上就可以了。
修改Apk名字就這幾個步驟,非常的簡單。
這里我推薦是用windows的模擬器,不要用Android Studio自帶的模擬器,因為不能安裝第三方應用。安裝應用的時候,不要用AndroidKiller提供的安裝功能,因為windows老是找不到設備,非常的難用,還要用adb查找連接,后面會介紹。編譯完成后,手動將apk拖到模擬器安裝。
反編譯步驟
第一步:反編譯
通過apktool反編譯apk,生成反編譯代碼。
第二步:修改想要修改的代碼或者資源
這是最重要也是最難的地方,99%的工作量都在這。
第三步:重新打包
修改后的資源和代碼重新打包
第四步:簽名
重新打包后的apk是沒有簽名的,不能夠安裝,安裝的話會卡住或者報錯。AndroidKiller這個工具可以幫我們一鍵打包簽名。手動也是可以的,后面會介紹。
注意,如果是android studio開發的debug apk實際上也是不能安裝的,在android studio里面能安裝是因為android studio幫我們做了一些事情,直接安裝是不行的。都是需要簽名的。
最傳統最原始的反編譯方式
或者說是最基礎的反編譯方式就是用apktool.jar這個工具來進行反編譯。
通過下面的命令可以直接反編譯一個apk。
編譯完會生成下面的目錄和文件。
和第一個例子一樣,我們修改res/values/strings.xml文件里面,里面有一個name="app_name"的字段。把值修改為“被反編譯了”。
然后通過下面的代碼重新打包:
默認情況下會在反編譯目錄下生成一個dist目錄,里面就是重新打包的akp。
因為變到不同的目錄還是有點不方便,我們可以指定重新打包的生成位置
下面的代碼指定重新打包的位置為當前位置,這樣方便調試。
雖然我們重新打包了apk,但是這個apk是不能安裝的,因為沒有簽名會安裝失敗。
下一步我們需要重新簽名。簽名有很多種方式,下面的這種比較簡單,需要用到signapk.jar這個文件,testkey.x509.pem testkey.pk8這些文件都是signapk.jar附帶的,直接百度就能搜索到這些文件。有了這些文件后,調用下面的代碼就可以給apk簽名了。
如果簽名成功,就可以直接安裝了。
實戰:修改TextView文本
如果TextView的文本不是寫死在xml中的,而是通過setText()方法設置的,那么反編譯的難度就不是一個級別的,這就需要懂安裝的匯編代碼。
源碼如下。
反編譯后匯編代碼在smali目錄下面,我們的目標是修改MainActivity里面的setText()方法。
打開MainActivity.smali,發現下面這些奇怪的代碼(片段)。雖然看不太懂,不過沒關系,是有關鍵字表格的,后面會提到,這里我們發現了一些我們非常熟悉的代碼,比如findViewById,setText,這不就是我們想要的代碼嗎?
很明顯,我們需要關系的是下面這三行代碼,setText需要傳入參數,v1參數就是文本內容,這時候我們就可以手動修改這些文本內容了。我們把 “This is a Text"改為"This is a Dog”
.line 17const-string v1, "This is a Text"invoke-virtual {v0, v1}, Landroid/widget/TextView;->setText(Ljava/lang/CharSequence;)V然后通過上面已經提過的打包,簽名,就完成對setText文本的修改了。
大致步驟如下
確實修改成功了!
總結
以上是生活随笔為你收集整理的android逆向工程反编译指南(详细教程)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 提高ASP.NET首页性能的十大方法
- 下一篇: 常见虚拟化技术