關於調試器看不到進程,無法attach的問題,網上也有很多教程,基本是修改ro.debugable =1 ,ro.secure = 0 讓adbd有root許可權 attach到其他進程,涉及到要修改boot.img並刷包,可以在網上其他地方找找看相關資料 1.手機上運行apk 2.電腦上用jeb打開 ...
關於調試器看不到進程,無法attach的問題,網上也有很多教程,基本是修改ro.debugable =1 ,ro.secure = 0 讓adbd有root許可權 attach到其他進程,涉及到要修改boot.img並刷包,可以在網上其他地方找找看相關資料
1.手機上運行apk
2.電腦上用jeb打開對應apk
3.用jeb debuger attach 到對應進程
4.轉換到 bytecode 界面,Ctrl + B 在 目標位置下斷點
按tab轉換為java代碼
斷點在java代碼展示界面無法下,只有在 bytecode 界面可以
5.手機端觸發斷點事件
6.
支持很多jdwp的協議,這部分是很強大的功能,比如IDEA的 調試環境中支持的 動態計算表達式,估計是通過使用jdwp提供的類似 call的方式來辦到的,可以動態調用方法,set/get 成員屬性,查看某class的成員變數和方法等,可以方便在調試過程中,臨時動態id修改一些boolean的值,進入某些雪藏已久的分支。
在jeb的 termial 中輸入 help 回車,可以看到基於jdwp的調試命令,有些jeb界面上沒提供的功能可以通過這種 命令行的方式來實現
比如這裡我們試一下動態查看 v1寄存器中的值
輸入 help get 查看 get 命令的用法
按F6運行到函數返回前 停住
看 textView 對象的屬性
。。。
值已經被修改
我們把值改為 ABCD 試試, 嘗試調用 setText("ABCD")
匿名內部類對外部final變數的引用
用 call 指令
修改成功了
JEB也可以分析 .so 文件
右鍵,點解析
找到stringFromJNI 按下 tab(怕是用了IDA的庫)
可惜我這邊沒有辦法調試 native 彙編代碼。。。
JEB用來無源碼smali調試比較方便,可以按TAB轉為java代碼查看,並且可以添加自定義註釋