《教我兄弟学Android逆向05 在smali代码中插入Log 》


上一篇 《教我兄弟学Android逆向04 动态调试smali代码  》 我带你动态调试了smali代码 课后作业你也做了三遍 基本上是对动态调试有所了解了 课下自己再找几个小例子多练习几遍 知识学到手了 以后面试官面试你的时候问你 你会动态调试smali代码吗?那个时候你就可以用 生气的眼神看着面试官了 今天给你带来的这堂课是在smali代码中插入Log的教程 那么你问了经常听别人提及到Log那么Log到底是什么 ?

给你个眼神 得意那么下面开始上课 好好听课啊

要么学!要么不学!学和不学之间没有中间值 不学就放弃,学就要去认真的学!    --致选择

一 编写JAVA程序并在smali代码中插入Log
1 打开自己的AndroidStudio 在MainActivity里面写一段switch case语句

2.编译并安装程序到手机 打开Android Monitor 运行程序 就把自己添加的Log打印出来了

3.把程序用AndroidKiller反编译 switch case语句的smali代码分析我这里就不讲了 自己可以对照着自己写的java代码去分析 或者参考 教我兄弟学Android逆向03 破解第一个Android游戏 里面对switch case的分析



4 把复制出来的那三句代码中的会飞的丑小鸭 改成: 我是添加的smali代码并添加到smali中  Ctrl+S保存好后 卸载 编译 安装 打开打开Android Monitor看Log

const-string v0, "Hello"

const-string v1, "\u6211\u662f\u6dfb\u52a0\u7684smali\u4ee3\u7801"    

invoke-static {v0, v1}, Landroid/util/Log;->i(Ljava/lang/String;Ljava/lang/String;)I






5.这里就成功的把自己在smali中添加的Log打印出来了

6.通过上面的练习你学会了在smali代码中插入Log 但是通常在实战中只会插入一句话Log是远远不够的 很多情况下插入Log是为了打印出程序中某个变量的值  听完我这句话后 你不耐烦的说道 兄弟你别卖关子了 赶快讲怎么通过在smali代码中插入Log打印出变量的值 我还等着吃饭呢 好吧 为了兄弟的肚子不受饿 下面我加快点进度 

二 打印变量的值
1 这里我编写了一个Demo 从下面的代码中可以出我在onCreate方法中执行了三个函数 函数名分别是fun1 fun2和fun3 并且在下面加入一条Log 目的是为了打印出函数fun1的返回值 因为Log.i的两个参数都必须是String类型  所以这里把int类型的fun1这个函数通过String.valueOf函数转换成String类型
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的值打印出来了



2 把fun2的值打印了出来 那么fun3的值怎么打印呢 可以看到fun2和fun3函数都是int类型 然后通过String.valueOf这个函数转换成的String类型 但是fun3这个函数本身就是String类型 这里如果还通过String.valueOf函数转换的话程序会报错的 那么既然上面那种在smali代码中换函数名字打印Log的方法在函数fun3中行不通了 我如何打印出fun3的值呢 ? 如果在JAVA代码中你会怎么做 是不是重新插一条Log去打印fun3函数的返回值 打开smali代码 按照这个思路去做 这样就把任务一给完成了



任务二  添加Log打印出fun3里面String类型str的值
首先从smali代码中找到fun3方法所在的位置 然后在方法里面找到str的值 一般来说程序都会把这个值储存到寄存器中 可以找到这个寄存器 然后把寄存器作为变量给打印出来 那么任务二是不是也完成了

任务三 添加Log打印出fun3里面int类型value3的值 
这里上面也提到了 Log.i这个函数的两个参数必须都为String类型,而这里想把int类型value3的值通过Log打印出来 那么得把它转换为String类型 用到函数String.valueOf 这里可以把上面打印出fun1那段Log的Smali代码复制过来 稍作修改 



三. 总结 
本节课从简单的插入Log到从smali代码中打印变量的值 然后从中牵扯到了类型转换 最后通过完成三条任务为主线 结束了本节课的教程  这堂课中的每一个例子 每一个点都很精致并且实用 这节课的内容你可以留着当做Log方面参考文档 虽然本节课的篇幅比较长 但是本节课的所讲的所有东西 你都要跟着做一遍 最好自己能写一些心得  有时候你看着这些东西可能会比较烦 因为学习是痛苦的 痛并快乐着 当你看代码累的时候就休息一会吧 给你推荐一首音乐Summer Poem 我经常在敲代码的时候单曲循环这首歌 当你在听这堂课的时候 要记住逆向的道路上不只你一个人在奋斗!有我们 他们 以及看见这篇文章的所有人都在做这件事,所以你不孤独!


课后作业: 
(1) 参考本节课第一个例子自己用AndroidStudio编写Switch case语句 要求Switc case的是支付成功 支付取消和支付失败 并且打印出相应的Log
(2)在 https://www.52pojie.cn/thread-632178-1-2.html 滚动的天空 这个游戏支付成功 失败 取消方法 的smali代码中分别插入三条自己的Log 点击购买时查看程序打印出的Log

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 学习Android逆向PDF这个过程需要一定的时间和专业知识。首先,你的兄弟需要了解Android开发和Java编程语言。他可以通过学习相关的材、在线课程或者参加培训班来掌握Android开发的基本知识。 接下来,他需要了解PDF的相关知识,包括PDF的结构和格式,以及如何解析和操作PDF文件。可以推荐他阅读一些专业的书籍或者参考一些在线程。 在学习Android逆向方面,他需要了解Android的工作原理、应用程序分析的基本流程和相关工具的使用。可以推荐他使用一些逆向工具,例如apktool、DEX2Jar、jadx等,这些工具可以帮助他分析和反编译Android应用程序。 此外,了解逆向工程的基本知识也是很重要的,包括逆向分析的步骤、常用的逆向技术和工具等。他可以通过阅读一些专业的逆向工程书籍或者参加一些逆向工程的培训班来学习这方面的知识。 最后,学习Android逆向PDF需要不断的实践和实验。他可以选择一些简单的Android应用程序进行分析和修改,然后逐渐深入研究更复杂的应用程序。 总之,学习Android逆向PDF需要充分的准备和学习,希望以上的建议可以对你兄弟有所帮助。 ### 回答2: 学习Android逆向PDF是一项复杂的任务,需要具备一定的编程和计算机知识。下面是一个简单的步骤,以帮助你的兄弟开始学习Android逆向PDF。 首先,他需要掌握基本的编程知识,特别是Java语言。因为Android开发主要使用Java编程,了解Java语法和面向对象编程的概念对于理解和编写逆向代码很重要。 接下来,他需要学习Android的基础知识,包括如何创建和设置应用程序、布局和UI设计、活动和片段的使用等等。这将有助于他了解Android应用程序的结构和功能,从而更好地进行逆向分析和修改。 在掌握了Java和Android基础知识之后,他可以开始学习关于逆向工程的知识。逆向工程主要涉及反编译、调试和分析应用程序的代码和逻辑。他可以学习使用工具如JD-GUI、APKTool和IDA Pro等对应用程序进行反编译,以获取代码和资源文件。 接下来,他需要学习如何使用调试器来分析逆向的应用程序。调试器可以帮助他理解应用程序的工作原理和关键功能。他可以使用工具如Xposed框架或Frida来对应用程序进行hook,以便在运行时获取和修改数据。 最后,他需要不断实践和尝试。逆向工程是一个复杂的过程,需要不断的尝试和解决问题。通过参与逆向工程项目、阅读相关文档和论坛,以及与其他逆向工程师交流,他将能够提升他的技能和知识。 综上所述,要学习Android逆向PDF,你的兄弟需要学习编程和Android开发的基础知识,掌握逆向工程相关的工具和技术,并不断实践和尝试。这是一个长期的过程,需要耐心和持续的学习。 ### 回答3: 学习安卓逆向PDF需要一些基本的知识和技能。以下是我给你兄弟的一些建议和步骤: 首先,要学习安卓逆向工具和技术,他可以从学习Java编程语言开始。Java是Android开发的基础,了解Java可以帮助他更好地理解Android逆向过程。他还需学习如何使用反编译工具,例如dex2jar、Apktool和JADX等。 其次,他需要了解Android应用程序的结构和工作原理。阅读有关Android应用程序开发和框架的书籍或程,这将帮助他更好地理解Android逆向工程。 接下来,建议他学习Android逆向工具的使用。这些工具通常用于分析和修改APK文件,例如获取源代码、查看资源文件和修改应用程序的行为。他应该熟悉逆向工具的基本操作,例如反编译APK文件、分析Smali代码和调试应用程序。 此外,他应该参加相关的培训课程或工作坊,或者参考网上的程和指南。这些资源可以帮助他了解更多关于安卓逆向的技术和最佳实践。 最后,我鼓励他通过实践来巩固所知识。他可以选择一些开源的安卓应用程序进行逆向分析,并尝试修改应用程序的行为。通过实际操作,他将更好地理解逆向工程的流程和技巧。 需要注意的是,逆向工程需要遵守法律和道德准则,所以请确保他将技能用于合法和道德的目的,并尊重开发者的知识产权。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值