1. 程式人生 > 其它 >教我兄弟學Android逆向04 動態除錯smali程式碼

教我兄弟學Android逆向04 動態除錯smali程式碼

上一篇《教我兄弟學逆向03 破解第一個Android遊戲》我帶你用另一種方式破解了切水果遊戲 我佈置的課後作業你也完成了 並且自己又獨立破解了另外幾款遊戲很不錯 在這裡表揚一下-威 ! 希望其他同學都能向威同學學習努力提高自己的逆向技術!

要麼學!要麼不學!學和不學之間沒有中間值 不學就放棄,學就要去認真的學! --致選擇

在開始本節課之前我有個問題 為什麼要學習動態除錯smali 也就是為什麼要學習本節課?

答: 因為我在招聘網站上面看到很多招逆向的公司都要求要會動態除錯smali程式碼 因為《教我兄弟學逆向》系列課程就是為找工作而生的 並且有些東西通過靜態分析是分析不出來的 要動靜結合分析出來的東西才能更加全面。



那麼本節課要教你的是用AndroidStudio動態除錯smali 下面開始今天的教程

既然這節課我要教你的是用AndroidStudio動態除錯smali 那麼在開始動態除錯smali之前 首先要把要除錯的apk反編譯成smali檔案然後匯入到用AndroidStudio中 對不對?
那麼把怎麼把這個apk反編譯成smali檔案呢?

你回答:我以前都是直接把apk拉到AndroidKiller這個軟體中 然後AndroidKiller自動就會把apk反編譯成smali檔案了

回答正確 可以啊兄弟! 用現在流行的一句話說 給你打call !

那麼我現在給你演示這種方式

一.用AndroidKiller把apk反編譯成smali檔案

apk連結:
https://pan.baidu.com/s/1smNIrST
密碼:uzsa

1. 首先把apk拉到AndroidKiller中 點工程管理器 點smali目錄右鍵 開啟方式-開啟檔案路徑

<ignore_js_op>

2.在E盤新建一個jwx02資料夾 然後把開啟檔案路徑目錄裡的smali資料夾複製到E盤並改名為src 然後就可以用AndroidStudio匯入src了

<ignore_js_op>
二要用AndroidStudio動態除錯smali程式碼 首先要安裝ideasmali外掛
1.開啟AndroidStudio
2. 安裝ideasmali外掛,File->Settings->Plugins,下載安裝ideasmali外掛。

ideasmali下載連結:
連結:https://pan.baidu.com/s/1htl26qS密碼:0pre

<ignore_js_op>

<ignore_js_op>
三. 開啟Android Device Monitor

<ignore_js_op>

<ignore_js_op>

四. 找到要除錯APK的包名和入口的Activity

1.用AndroidKiller開啟要除錯的APK 這裡是jwx02.apk

2.記住包名hfdcxy.com.myapplication 和入口的Activity名 hfdcxy.com.myapplication.MainActivity

<ignore_js_op>

3.這裡要注意一下 在application標籤裡面要有 android:debuggable="true" 這句程式碼,沒有是不能除錯apk的現在除錯的這個例子預設是有這句程式碼的 有的apk中沒有這句程式碼要自行新增上

<ignore_js_op>
五 把自己要除錯的APK安裝到手機中 並用資料線連線手機 開啟USB除錯模式

六 開啟命令列 輸入命令adb shell am start -D -n hfdcxy.com.myapplication/hfdcxy.com.myapplication.MainActivity對apk進行動態除錯 這條命令執行後手機螢幕將會進入到除錯介面(如果手機螢幕沒有進入到除錯介面說明USB沒有連線好手機 或者USB除錯模式 沒有開啟 或者其他原因)
<ignore_js_op>

七.檢視Android Device Monitor 記住下圖圈起來的兩個值 然後把Android Device Monitor關掉(這裡一定要關掉,因為它會佔用8700埠 導致後面轉發埠失敗)

<ignore_js_op>
八.開啟命令列視窗 輸入命令adb forward tcp:8700 jdwp:19509 轉發8700 埠 (這裡 jdwp是自己Android Device Monitor中要除錯app的Online值 )
<ignore_js_op>


九. 匯入jwx02檔案
1.用AndroidStudio匯入jwx02
<ignore_js_op>
<ignore_js_op>

<ignore_js_op>

2.然後一路Next 最後點Finsh
<ignore_js_op>

十 點選Android選擇Project 對之前反編譯的 jwx02/src資料夾右鍵-->Make Directory As --->Source Root
<ignore_js_op>

<ignore_js_op>

十一 配置遠端除錯的選項,選擇Run-->Edit Configurations並增加一個Remote除錯的除錯選項,埠選擇:8700
<ignore_js_op>

<ignore_js_op>

<ignore_js_op>

十二 選擇File-->Project Structure 配置JDK
<ignore_js_op>

<ignore_js_op>

十三 在Smali中下好斷點 斷點的意思是程式執行到下斷點的那行程式碼就會斷下來
<ignore_js_op>

十四 下好斷點之後Run-->Debug'smali',這裡的smali是我們之前配置好的除錯選項
<ignore_js_op>

十五 此時手機會進入程式 在手機上輸入使用者名稱和密碼 點登陸 程式會斷在我下的斷點處
<ignore_js_op>

十六 在自己關心的語句前面下斷點按F8執行下一步 F9執行程式 可以看到程式執行的邏輯 Watches視窗中可以點+按鈕新增自己想看的暫存器的名字 就可以看到這個暫存器的值了
<ignore_js_op>

結束
本節課給你講了用Android動態除錯smali程式碼
當然教程講的並沒有這麼詳細破解過程中遇到不懂得自己去百度 再不懂的就來問我 學習逆向就是這樣學不會就會感覺迷茫 但是不用怕 記住多迷茫幾次就都學會了本節課的例子一定要多練習 多跟著課程做幾遍 自己多下斷點看程式的執行邏輯每節課佈置的課後作業一定要完成 課後作業都不做的話 那我的帖子你也不用繼續跟了 學而不思則罔,思而不學則殆 ,不僅要完成還要能理解那麼本節課教程到此結束 下節課我將教你在smali中程式碼中插入log 。

課後作業:
把本節課的例子動態除錯三遍 嘗試在不同位置下斷點 多下斷點 多看暫存器的值 分析程式執行的邏輯



下一篇 《教我兄弟學Android逆向05 在smali程式碼中插入log

學習時的痛苦是暫時的 未學到的痛苦是終生的