日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android逆向工程反编译指南(详细教程)

發布時間:2023/12/9 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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。

java -jar apktool.jar d test.apk PS C:\Android\reverse> java -jar apktool.jar d test.apkI: Using Apktool 2.6.1 on test.apk I: Loading resource table... I: Decoding AndroidManifest.xml with resources... I: Loading resource table from file: C:\Users\Administrator\AppData\Local\apktool\framework\1.apk I: Regular manifest package... I: Decoding file-resources... I: Decoding values */* XMLs... I: Baksmaling classes.dex... I: Copying assets and libs... I: Copying unknown files... I: Copying original files...

編譯完會生成下面的目錄和文件。

和第一個例子一樣,我們修改res/values/strings.xml文件里面,里面有一個name="app_name"的字段。把值修改為“被反編譯了”。
然后通過下面的代碼重新打包:

java -jar apktool.jar b test

默認情況下會在反編譯目錄下生成一個dist目錄,里面就是重新打包的akp。

因為變到不同的目錄還是有點不方便,我們可以指定重新打包的生成位置
下面的代碼指定重新打包的位置為當前位置,這樣方便調試。

java -jar apktool.jar b test -o release.apk

雖然我們重新打包了apk,但是這個apk是不能安裝的,因為沒有簽名會安裝失敗。
下一步我們需要重新簽名。簽名有很多種方式,下面的這種比較簡單,需要用到signapk.jar這個文件,testkey.x509.pem testkey.pk8這些文件都是signapk.jar附帶的,直接百度就能搜索到這些文件。有了這些文件后,調用下面的代碼就可以給apk簽名了。
如果簽名成功,就可以直接安裝了。

java -jar signapk.jar testkey.x509.pem testkey.pk8 release.apk release-signed.apk

實戰:修改TextView文本

如果TextView的文本不是寫死在xml中的,而是通過setText()方法設置的,那么反編譯的難度就不是一個級別的,這就需要懂安裝的匯編代碼。
源碼如下。

public class MainActivity extends AppCompatActivity {private TextView textView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);textView=findViewById(R.id.textview);textView.setText("This is a Text");} }

反編譯后匯編代碼在smali目錄下面,我們的目標是修改MainActivity里面的setText()方法。

打開MainActivity.smali,發現下面這些奇怪的代碼(片段)。雖然看不太懂,不過沒關系,是有關鍵字表格的,后面會提到,這里我們發現了一些我們非常熟悉的代碼,比如findViewById,setText,這不就是我們想要的代碼嗎?

invoke-virtual {p0, v0}, Lcom/example/apktooldemo/MainActivity;->findViewById(I)Landroid/view/View;move-result-object v0check-cast v0, Landroid/widget/TextView;iput-object v0, p0, Lcom/example/apktooldemo/MainActivity;->textView:Landroid/widget/TextView;.line 17const-string v1, "This is a Text"invoke-virtual {v0, v1}, Landroid/widget/TextView;->setText(Ljava/lang/CharSequence;)V

很明顯,我們需要關系的是下面這三行代碼,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文本的修改了。
大致步驟如下

第一步:java -jar apktool.jar d change_text.apk第二步:修改smali代碼第三步:java -jar apktool.jar b change_text -o change_text_b.apk第四步:簽名java -jar signapk.jar testkey.x509.pem testkey.pk8 change_text_b.apk change_text_b_signed.apk

確實修改成功了!

總結

以上是生活随笔為你收集整理的android逆向工程反编译指南(详细教程)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。