这几天做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) |