这几天做Android的CTF,发现使用smali注入的方式获取Flag的方法比较通用,所以写出来参考一下。
通过注入可以将一些内部变量输出到外部来,使一些看不到的内容看到。在Android一般输出的媒介有Toast
和Logcat
。
可以将第三行的v4
寄存器换成需要查看的寄存器。
同样可以将第二行v1
寄存器换成需要的寄存器。
在smali中,每个 .method
方法中都会用 .locals
声明需要寄存器的数量,在注入的时候要修改寄存器的数量进行扩充。
要查看的寄存器的内容需要为 String
类型,如果不是就需要转换。
v1
为需要查看的int类型寄存器,转换后的结果存放到 v4
中。
v1
为需要产看的boolean类型寄存器,转换后的结果存放到 v4
中。
smali | Java |
---|---|
V | void 只能用于返回值类型 |
Z | boolean |
B | byte |
S | short |
C | char |
I | int |
J | long (64 bits) |
F | float |
D | double (64 bits) |