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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

[Android]反编译apk + eclipse中调试smali

發布時間:2025/4/14 Android 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [Android]反编译apk + eclipse中调试smali 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? 從來沒有想過反編譯apk是來的如此方便,并且還可以修改后重新編譯運行,這比在win下修改pe容易多了,感謝apktool和smali工具的作者提供這么好的工具。

?

? ? 跟蹤apk一般的做法是在反編譯的smali代碼中插入log輸出,然后重新編譯運行看輸出日志,這種方法費時費力,如果能夠實時調試是最好的了。搜了一下,目前比較好的方法是使用NetBeans+DDMS。我嘗試過可以調試,但不大認識NetBeans的操作,eclipse估計很多人都會吧,其實設置跟NetBeans大同小異。

? ? 調試步驟:

? ? 1.對apk使用apktool反編譯出可調試的smali代碼到out文件夾,目前apktool最新的版本是2.0.0b7。

java -jar apktool_2.0.0b7.jar d -d test.apk -o out

? ? 這里必須使用-d參數,這樣反編譯出來的代碼后綴均是java,因為只有java文件才能被eclipse/netbeans識別調試。

? ? 2.設置調試標記和尋找主類

? ? 在輸出的out文件夾中,用文本編輯工具打開AndroidManifest.xml,在application節點中設置屬性android:debuggable="true"。

? ? 繼續在AndroidManifest.xml中,搜索以下關鍵字

<intent-filter><action android:name="android.intent.action.MAIN"/><category android:name="android.intent.category.LAUNCHER"/> </intent-filter>

? ? 找到含有以上信息的activity節點,記錄其android:name屬性的值,該值則為其應用的主類。如下面的例子,主類為com.acids.helloworld.MainActivity。

<?xml version="1.0" encoding="utf-8" standalone="no"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.acids.helloworld"><application android:debuggable="true" android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme"><activity android:label="@string/app_name" android:name="com.acids.helloworld.MainActivity"><intent-filter><action android:name="android.intent.action.MAIN"/><category android:name="android.intent.category.LAUNCHER"/></intent-filter></activity></application> </manifest>

? ? 3.在主類的onCreate事件中添加調試等待。

? ? 用文本編輯工具打開主類文件,找到onCreate方法,在第一句前插入invoke-static {}, Landroid/os/Debug;->waitForDebugger()V,記得添加a=0;//的前綴保持上下一致,結果如下:

a=0;// # virtual methods a=0;// .method protected onCreate(Landroid/os/Bundle;)V a=0;// invoke-static {}, Landroid/os/Debug;->waitForDebugger()V a=0;// a=0;// .locals 1 a=0;// .param p1, "savedInstanceState" # Landroid/os/Bundle; a=0;// a=0;// .prologue a=0;// .line 11 a=0;// invoke-super {p0, p1}, Landroid/app/Activity;->onCreate(Landroid/os/Bundle;)V

? ? 4.保存文件,用apktool重新編譯打包為debug.apk

java -jar apktool_2.0.0b7.jar b -d out -o debug.apk

? ? 5.對debug.apk簽名(需要下載簽名工具),我把簽名工具放在了signapk文件夾下,生成debug.sign.apk

java -jar .\signapk\signapk.jar .\signapk\testkey.x509.pem .\signapk\testkey.pk8 .\debug.apk .\debug.sign.apk

? ? 6.上傳debug.sign.apk至手機或模擬器,然后安裝并運行。這時你會看到程序運行后停留在白屏界面,這時不要動設備和退出程序,因為程序現在是運行到剛才添加的waitForDebugger代碼這里,這行代碼的意思是一直掛起中,等待調試器。

?

? ??下面開始設置實時調試的環境。

? ? 7.啟動eclipse,構建java項目

? ? 1) File -> New -> Project -> Java Project -> Next

? ? 2) Project Name隨便起,Use default location選項去掉,Location選擇out文件夾,然后Next

? ? 3) 把smali文件夾設為Source Folder,然后Finish

? ? 8.在eclipse中,打開第2步找到的主類,并找到onCreate方法,在waitForDebugger后面的第一個方法開始添加斷點。如下圖

? ? 9.打開DDMS(路徑在%android-sdks%\tools\ddms.bat),如果在第6步中運行了修改后的程序,在DDMS的設備列表中會顯示可以調試的程序。

? ? 對應程序最后一欄為8600/8700,其中8600即為調試該程序的端口。

? ? 10.現在要做的就是把代碼與調試程序關聯即可。?回到eclipse,配置遠程調試

? ? 1) 菜單Run -> Debug -> Debug?Configurations

? ? 2) 雙擊Remote Java Application,Host處默認localhost就行,Port填第10步得到的8600,然后Apply -> Debug。

? ? 11.這時eclipse自動切換至debug視圖,并看到程序已經運行并中斷在下一行可執行的代碼了,相關的變量可以直接查看了。

?

?

? ? 總結

? ? 已經可以用eclipse調試smali了,上面的例子是從程序開頭的地方開始調試,但要調試到自己所關心地方的代碼處確實麻煩。建議先用jd-gui等軟件直接查看反編譯的java代碼,確定要調試的位置后,再進入smali定位斷點并實時調試,就可以事半功倍。如果不需要在程序的開頭調試的話,建議把第三部的代碼注釋掉。

?

? ? 相關工具可以在這里下載

? ? apktool:?https://code.google.com/p/android-apktool/

? ? dex2jar:?https://code.google.com/p/dex2jar/

? ? jd-gui:?http://jd.benow.ca/

?

? ??轉載請注明原文地址:http://www.cnblogs.com/litou/p/3539281.html

轉載于:https://www.cnblogs.com/litou/p/3539281.html

總結

以上是生活随笔為你收集整理的[Android]反编译apk + eclipse中调试smali的全部內容,希望文章能夠幫你解決所遇到的問題。

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