1. 程式人生 > >SMALI注入中新增除錯日誌輸出

SMALI注入中新增除錯日誌輸出

針對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