首页
社区
课程
招聘
[求助]android smali 输出调试请教
发表于: 2012-8-14 09:30 17594

[求助]android smali 输出调试请教

2012-8-14 09:30
17594
有一apk,反编译得到smali文件后想修改一下,使其打印出某函数中的某个变量数组,变量数组是byte类型,不是字符串,请教大牛们怎么添加smali语句?下面的方式好像只能是字符串啊
sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;

  const-string v1, "Hello!"

  invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 247
活跃值: (42)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
自己编写一个APK    在反编译编写的APK    在复制粘贴   最后重组    完事!
2012-11-5 14:41
0
雪    币: 123
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
这样子弄就成了!
    new-instance v1, Ljava/lang/String;

    invoke-direct {v1, v0}, Ljava/lang/String;-><init>([B)V
   
    const-string v3, "TEST"
        
    invoke-static {v3, v1}, Landroid/util/Log;->i(Ljava/lang/String;Ljava/lang/String;)I
2012-11-8 16:29
0
雪    币: 18
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
首先添加一个函数,例如:
.method public static log([B)V
    .locals 6
    .parameter "bt"

    .prologue
    .line 12
    const-string v2, ""

    .line 13
    .local v2, str:Ljava/lang/String;
    #v2=(Reference);
    const/4 v1, 0x0

    .local v1, i:I
    :goto_0
    #v0=(Conflicted);v1=(Integer);v3=(Conflicted);v4=(Conflicted);v5=(Conflicted);
    array-length v3, p0

    #v3=(Integer);
    if-lt v1, v3, :cond_0

    .line 20
    const-string v3, "gdc"

    #v3=(Reference);
    invoke-static {v3, v2}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I

    .line 21
    return-void

    .line 15
    :cond_0
    #v3=(Integer);
    aget-byte v3, p0, v1

    #v3=(Byte);
    and-int/lit16 v3, v3, 0xff

    #v3=(Integer);
    or-int/lit16 v0, v3, -0x100

    .line 16
    .local v0, hex:I
    #v0=(Integer);
    new-instance v3, Ljava/lang/StringBuilder;

    #v3=(UninitRef);
    invoke-static {v2}, Ljava/lang/String;->valueOf(Ljava/lang/Object;)Ljava/lang/String;

    move-result-object v4

    #v4=(Reference);
    invoke-direct {v3, v4}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V

    #v3=(Reference);
    invoke-static {v0}, Ljava/lang/Integer;->toHexString(I)Ljava/lang/String;

    move-result-object v4

    const/4 v5, 0x6

    #v5=(PosByte);
    invoke-virtual {v4, v5}, Ljava/lang/String;->substring(I)Ljava/lang/String;

    move-result-object v4

    invoke-virtual {v4}, Ljava/lang/String;->toUpperCase()Ljava/lang/String;

    move-result-object v4

    invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v3

    invoke-virtual {v3}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v2

    .line 17
    new-instance v3, Ljava/lang/StringBuilder;

    #v3=(UninitRef);
    invoke-static {v2}, Ljava/lang/String;->valueOf(Ljava/lang/Object;)Ljava/lang/String;

    move-result-object v4

    invoke-direct {v3, v4}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V

    #v3=(Reference);
    const-string v4, " "

    invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v3

    invoke-virtual {v3}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v2

    .line 13
    add-int/lit8 v1, v1, 0x1

    goto :goto_0
.end method

然后在需要打印的地方添加代码
invoke-virtual {v1}, Lxxx/xx/xxx;->log([B;)V
其中,xxx/xx/xxx是你添加的库类全名。

打印的内容可以在DDMS中找到,标签为gdc
2012-11-28 09:11
0
雪    币: 6
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
反编译不行莫,,直接反编译class文件,得到源码莫
2012-12-14 11:23
0
游客
登录 | 注册 方可回帖
返回
//