SMALI注入中新增除錯日誌輸出
阿新 • • 發佈:2019-01-24
針對Android中Smali程式碼逆向分析,由於現在除錯技術有限,一種相對簡單的辦法是在Smali中加入Log輸出:
const-string v3, "a"
invoke-static {v3, v2}, Landroid/util/Log;->v(Ljava/lang/String;Ljava/lang/String;)I
這裡面有幾個需要注意的問題:
1、v3或者自定義的其它暫存器,有可能被用於它用了
處理方法:
(1)選用一個在後面會重新賦值的暫存器:
.line 27 const-string v3, "a"
invoke-static {v3, v2}, Landroid/util/Log;->v(Ljava/lang/String;Ljava/lang/String;)I
.line 29 :cond_0 const-string v1, "10086"
例如這裡,我會建議將v3改用選為v1,因為v1後面會重新賦值修改為字串"10086"
(2)修改“.locals”新增暫存器數目
.locals指令表明了方法中非參暫存器的數量,比如說:“.locals 3”就是說有可以用的暫存器:v0,v1,v2,假設我將以前的“.locals 3”變為“.locals 4”,這個時候我就可以用v3了(即使以前沒有)。
2、v2或者用於顯示的值是null,會導致程式執行崩潰
處理方法:
增加判斷,SMALI除錯注入程式碼修改為:
if-eqz v2, :errornull_1 const-string v3, "a" invoke-static {v3, v2}, Landroid/util/Log;->v(Ljava/lang/String;Ljava/lang/String;)I :errornull_1