Android Studio 3.6 調(diào)試 smali的全過程
Android Studio 3.6 正式版終于發(fā)布了,快來圍觀,點(diǎn)擊查看。
簡介
Smali是用于Dalvik(Android虛擬機(jī))的反匯編程序?qū)崿F(xiàn),匯編工具(將Smali代碼匯編為dex文件)為smali.jar,與之對(duì)應(yīng)的baksmali.jar則是反匯編程序(下載地址),官方所說的基于Jasmin/dedexer語法,實(shí)際根不知道是什么鬼……
Smali支持注解、調(diào)試信息、行數(shù)信息等基本Java的基本特性,可以說是很接近Java編譯在JVM上的中間語言了,一般用來做Android程序的逆向工程,還可以。。搞搞小名堂
個(gè)人認(rèn)為Smali只是用于做反匯編的一種語言實(shí)現(xiàn),如果可以,自己也能定義一套這樣的語言,實(shí)現(xiàn)反匯編的效果
好了,下面看下正文。
以前在Android Studio中調(diào)試 smali 還是非常麻煩的時(shí)候,配置不好就是
Error running Smali: Unable to open debugger port (localhost:8700): java.io.IOException "handshake failed - connection prematurally closed
目前最新版的 Android Studio 利用附加功能調(diào)試 smali 非常方便 ,操作步驟如下:
文中會(huì)用到工具及下載地址:
①、apktool.jar(目前最新版 v2.4.1),用于反編譯smali,
下載地址: https://ibotpeaches.github.io/Apktool/
②、Android Studio (目前最新版本 3.6)用于Android開發(fā)調(diào)試IDE,
下載地址: https://developer.android.google.cn/studio/
③、smalidea-0.05.zip (目前最新版 0.05),AS 插件,用來給smali下斷點(diǎn),單步調(diào)試,
下載地址 https://bitbucket.org/JesusFreke/smali/downloads/
1. 先配置好Android Studio開發(fā)環(huán)境,這步就略去2. Android Studio中安裝 smalidea 插件,先從官網(wǎng)下載 smalidea zip包,然后在 Android 中依次選擇:
File --> Setting 將會(huì)彈出設(shè)置對(duì)話框

然后在設(shè)置對(duì)話框依次選擇: Plugins --> <設(shè)置圖標(biāo)> --> Install Plugin from Disk...

在彈出選擇對(duì)話框中,找到下載好的 smalidea 壓縮包,選擇ok即可

至此,插件安裝就完成了,關(guān)閉 Android Studio
3. 用 apktool 反編譯 apk
使用命令 : java.exe -jar apktool.jar d -f <xxxx.apk> -o <xxxx目錄>
也可以直接使用 ApkTool 集成環(huán)境(如果反編譯失敗可以替換其中的 apktool.jar 至最新版):

在 反編譯出來的 AndroidManifest.xml 的 application 節(jié)點(diǎn)添加 android:debuggable="true"
然后在 主 Activity 中加入 invoke-static {},Landroid/os/Debug;->waitForDebugger()V

重建且簽名 apk

安裝 重建后的 apk 到手機(jī)
(這步如果重新打包失敗,可以安裝原始包,把手機(jī) root 配置/default.prop 的 ro.debuggable=1 開啟全局調(diào)試。
然后用命令啟動(dòng) Activiry : adb shell am start -D -n package屬性的值/android:name屬性的值 )
4. 將 反編譯工程導(dǎo)入到 Android Studio

默認(rèn)選擇 Create project from existing sources ,一路 next ,最后點(diǎn)擊 Finish 即可
用 Project 視圖,在項(xiàng)目目錄右鍵 --> Mark Directory as ... --> Sources root

5. 展開 smali 目錄選擇剛才添加 waitForDebugger 代碼的 smali 文件下一行下斷點(diǎn)

6. 運(yùn)行手機(jī)上安裝的apk(apk會(huì)假死停在 waitForDebugger 代碼處,等待調(diào)試器)。
7.在Android Studio選擇附加

此時(shí),已經(jīng) Attach 到進(jìn)程中,可以快樂的調(diào)試了

總結(jié)
到此這篇關(guān)于Android Studio 3.6 調(diào)試 smali的全過程的文章就介紹到這了,更多相關(guān)Android Studio 3.6 調(diào)試 smali內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Android開發(fā)技巧之ViewStub控件惰性裝載
布局文件中的控件并不一定在程序啟動(dòng)時(shí)全都用到,有一些控件只在特定的情況下才會(huì)被使用到;我們急需一種機(jī)制來改變<include>標(biāo)簽的這種行為,只在需要時(shí)裝載控件。這種機(jī)制就是本節(jié)要介紹的ViewStub控件2013-01-01
Android中AlertDialog用法實(shí)例分析
這篇文章主要介紹了Android中AlertDialog用法,結(jié)合實(shí)例形式簡單分析了AlertDialog的基本調(diào)用與功能實(shí)現(xiàn)技巧,需要的朋友可以參考下2016-01-01
Android4.0平板開發(fā)之隱藏底部任務(wù)欄的方法
這篇文章主要介紹了Android4.0平板開發(fā)之隱藏底部任務(wù)欄的方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了Android隱藏于顯示底部任務(wù)欄的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-11-11
Android自定義View實(shí)現(xiàn)仿駕考寶典顯示分?jǐn)?shù)效果(收藏)
本文通過自定義view和屬性動(dòng)畫結(jié)合在一起實(shí)現(xiàn)實(shí)現(xiàn)仿駕考寶典顯示分?jǐn)?shù)效果,非常不錯(cuò),具有參考借鑒價(jià)值,需要的的朋友參考下2017-03-03
Android 實(shí)現(xiàn)帶角標(biāo)的ImageView(微博,QQ消息提示)
下面小編就為大家分享一篇Android 實(shí)現(xiàn)帶角標(biāo)的ImageView(微博,QQ消息提示),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-01-01
解決android關(guān)于打開虛擬機(jī)時(shí)右側(cè)工具欄不顯示的問題
下面小編就為大家分享一篇解決android關(guān)于打開虛擬機(jī)時(shí)右側(cè)工具欄不顯示的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-01-01

