在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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值