Android逆向调试的打印调试信息定位代码位置的一个小技巧
const-string v1, "\u0048\u0065\u006c\u006c\u006f\u0057\u006f\u0072\u006c\u0064\u0021" #此Unicode代码对应HelloWorld! iget-object v3, p0, Lcom/droider/network/MainActivity;->txt_info:Landroid/widget/TextView; const/high16 v4, -0x10000 invoke-virtual {v3, v4}, Landroid/widget/TextView;->setTextColor(I)V iget-object v3, p0, Lcom/droider/network/MainActivity;->txt_info:Landroid/widget/TextView; invoke-virtual {v3, v1}, Landroid/widget/TextView;->setText(Ljava/lang/CharSequence;)V
1、 讲上述代码插入apk反编译得到的smali代码中,再编译安装运行,当app运行到这里时便会在屏幕中间显示一串文本“HelloWorld!”,也可以将想要输出的调试信息字符串赋给寄存器v1来打印所需要的信息。字符串是存储在寄存器v1中的。
2、 在使用上述代码的时候一定要在理解smali语言的情况下根据自己的实际需要来微调。一定要看有没有v1,v3,v4,p0相同寄存器被重复使用的情况
3、给寄存器v1赋值的时候直接使用汉字也可以,记得加上双引号,java连变量名都可以使用汉字,还有什么是不可以的呢。