上一篇 《教我兄弟学Android逆向04 动态调试smali代码 》 我带你动态调试了smali代码 课后作业你也做了三遍 基本上是对动态调试有所了解了 课下自己再找几个小例子多练习几遍 知识学到手了 以后面试官面试你的时候问你 你会动态调试smali代码吗?那个时候你就可以用这个表情看着面试官了(无奈 找QQ表情斜眼笑没找到 只能用这个相似但很贱贱的小表情替代了 但是不是我想要的效果 这里建议吾爱破解论坛可以添加个斜眼笑的表情 为什么?因为/xyx) 那么今天给你带来的这堂课是在smali代码中插入Log的教程 那么你问了以前经常听别人提及到Log那么别人口中的Log到底是什么 ?
给你个眼神 下面开始上课 好好听课啊
要么学!要么不学!学和不学之间没有中间值 不学就放弃,学就要去认真的学! --致选择
一 编写JAVA程序并在smali代码中插入Log
1 打开自己的AndroidStudio 在MainActivity里面写一段switch case语句
<ignore_js_op>
6.通过上面的练习你学会了在smali代码中插入Log 但是通常在实战中只会插入一句话Log是远远不够的 很多情况下插入Log是为了打印出程序中某个变量的值 听完我这句话后 你不耐烦的说道 兄弟你别卖关子了 赶快讲怎么通过在smali代码中插入Log打印出变量的值 我还等着吃饭呢 好吧 为了兄弟的肚子不受饿 下面我加快点进度
二 打印变量的值
1 这里我编写了一个Demo 从下面的代码中可以出我在onCreate方法中执行了三个函数 函数名分别是fun1 fun2和fun3 并且在下面加入一条Log 目的是为了打印出函数fun1的返回值 因为Log.i的两个参数都必须是String类型 所以这里把int类型的fun1这个函数通过String.valueOf函数转换成String类型
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
fun1();
fun2();
fun3();
Log.i("这个值是",String.valueOf(fun1()));
}
public int fun1()
{
int value = Test.value;
return value;
}
public int fun2()
{
int value2 = Test.value2;
return value2;
}
public String fun3()
{
String str = Test.str;
String str2 = Test.str2;
int value3 = Test.value3;
return str2;
}
} |
2 下面我给本节课定三个要完成的任务 我将会带着你从从第一个任务开始做 由于下面的内容很重要 所以你可要认真听课了
任务一
添加Log打印出fun2,fun3的值 (其实就是函数的返回值)
任务二
添加Log打印出fun3里面String类型str的值
任务三
添加Log打印出fun3里面int类型value3的值
任务一 添加Log打印出fun2,fun3的值
1. 这里分析一下程序 你看下上面贴的代码中onCreate方法中有一句Log是打印fun1的值的 如果在java代码中如果要打印出fun2的值 是不是只要把String.valueOf(fun1)中的fun1改成fun2 是不是就可以打印出来fun2的值 那么smali代码也一样 我只要找到打印fun1的这条log反编译成的smali代码 把里面的fun1改成fun2 是不是任务一就完成一半了?
这里我把打印fun1的这条log的smali代码复制了下来 然后在这条Log下面粘贴了一遍 把粘贴后smali代码中的fun1改成了fun2 修改完成后 保存->编译->卸载->安装->运行 查看Android Monitor 可以看到这里已经把fun2的值打印出来了
<ignore_js_op>教我兄弟学Android逆向06 用AndroidStudio编写第一个so》