在smali文件中添加java log


在上文中我們提到了如何去反編譯apk,反編譯後會在out目錄裏面生成smali文件。這篇文章主要就是嘗試在smali文件中添加java log。

首先我們需要找到我們要添加log的那個文件在哪?因爲現在的大部分apk都會混淆的,所以查看起來會比較費力。 如果是Activity,service等等,可以通過AndroidManifest.xml去查找。當然我們也可以通過dex2jar, jd-gui去是一下。(對於沒有混淆過的apk,那麼就相對簡單多了,我試了幾個GMS的apk,貌似都可以直接讀源碼)


這裏我們假設是在一個Activity的onCreate裏面的加一段log,這裏先拋棄一些細節。

1. 直接打開我們要編輯的smali文件,然後搜索onCreate,我的代碼如下:

# virtual methods
.method protected onCreate(Landroid/os/Bundle;)V
    .locals 1
    .parameter

    .prologue
    .line 28
    invoke-super {p0, p1}, Landroid/app/Activity;->onCreate(Landroid/os/Bundle;)V

    .line 29
    const v0, 0x7f030010

    invoke-virtual {p0, v0}, Lcom/yuanpu/nineexpress/WelcomeActivity;->setContentView(I)V

    .line 30
    const v0, 0x7f09004f

    invoke-virtual {p0, v0}, Lcom/yuanpu/nineexpress/WelcomeActivity;->findViewById(I)Landroid/view/View;

    move-result-object v0

    check-cast v0, Landroid/widget/ImageView;

    iput-object v0, p0, Lcom/yuanpu/nineexpress/WelcomeActivity;->b:Landroid/widget/ImageView;

    .line 31
    invoke-direct {p0}, Lcom/yuanpu/nineexpress/WelcomeActivity;->a()V

    .line 32
    return-void
.end method

 裏面的.locals 代表的是寄存器的個數,當我們添加函數變量的時候需要添加對應的個數。

    const-string v1, "TAG"
    const-string v2,  "Debug!!!!!!!"
    #v2 爲要輸出的調試信息字符串
    invoke-static {v1,v2} ,Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
  

修改好的代碼如下:

# virtual methods
.method protected onCreate(Landroid/os/Bundle;)V
    .locals 3
    .parameter

    .prologue
    .line 28
    invoke-super {p0, p1}, Landroid/app/Activity;->onCreate(Landroid/os/Bundle;)V

    const-string v1, "TAG"
    const-string v2,  "Debug!!!!!!!"
    invoke-static {v1,v2} ,Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I                                              

    .line 29
    const v0, 0x7f030010

    invoke-virtual {p0, v0}, Lcom/yuanpu/nineexpress/WelcomeActivity;->setContentView(I)V

    .line 30
    const v0, 0x7f09004f

    invoke-virtual {p0, v0}, Lcom/yuanpu/nineexpress/WelcomeActivity;->findViewById(I)Landroid/view/View;

    move-result-object v0

    check-cast v0, Landroid/widget/ImageView;

    iput-object v0, p0, Lcom/yuanpu/nineexpress/WelcomeActivity;->b:Landroid/widget/ImageView;

    .line 31
    invoke-direct {p0}, Lcom/yuanpu/nineexpress/WelcomeActivity;->a()V

    .line 32
    return-void
.end method




關於Smali相關的詳細解釋,可以參考:

http://blog.csdn.net/wdaming1986/article/details/8299996

http://book.2cto.com/201212/12468.html

http://blog.csdn.net/xuesen_lin/article/details/7186638

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章