Android逆向入门7——Smali语法学习(1)

这一节我们一起探讨smali语法和smali在Android逆向中的应用,它是Android逆向世界中不可或缺的一部分。

在这里插入图片描述
简单的来说,Dex反编译的结果就是Smali,Smali和dex之间的关系,我们常常称为转化(convert);Dex是晦涩的二进制文件,Smali是人可以读懂的代码,而Jadx等工具就是解析Smali文件,翻译成Java代码,其准确度差了不止一个档次了。

我们尝试一下新的形式,用问与答的形式表述一下Smali学习的一些困惑。

问:学习Smali有啥用?
答:可以实现对Apk源代码的修改。

问:我只是想搞懂Apk的运行逻辑,我为什么要修改Apk源代码?
答:因为Apk程序的运行是非常复杂的,你很难光靠静态分析Jadx反编译得到的Java代码就搞懂程序。

问:你这样说太虚了,举个例子把。
答:在上一节中,我们找到了疑似sign算法生成的地方,可是我们怎么确定这儿就是sign生成的地方?

在这里插入图片描述

问:可以抓一次数据包,如果这个函数的返回值和抓包得到的sign一致,那么就可以判断了吧?
答:抓包很好做,那怎么拿到这个函数的返回值呢?

问:我好像不知道。
答:我们之前对代码的分析是静态的,现在我们要动态分析程序和代码,以小红书sign为例,它最后return lowerCase2,那我们在上面一行print(lowerCase2),然后查看日志不就行了吗?

问:print是Python中用来打印输出的吧,Android用什么?
答:对对对,Java中打印用System.out.println()方法打印输出,Android提供了更方便的Log输出,形式如Log.d(“tag”,“Info”),我们可以通过Android Logcat日志查看器查看和监测一台Android设备运行时产生的所有日志,再通过tag标签/包名/进程id等标识筛选和监测我们需要的那一类Log日志即可。

问:之前通过Android Studio,我确实通过Logcat菜单查看过Log日志,可是那是开发App用的工具,逆向时我们怎么通过它检测Log呢?
答:逆向App时,Android Studio也是非常强大的工具,连接设备后,我们确实也可以通过Android Studio内置的Logcat工具栏查看日志,但Android Studo太庞大了,我们可以使用Android SDK提供的Android Devices Monitor,它更加轻量级,但功能完善。打开SDK目录——tools——ddms.bat/monitor.bat都可以。

在这里插入图片描述

问:我现在已经知道怎么查看日志了,那该怎么在程序中插入一行Log.d(“疑似sign值”, lowerCase2)呢?
答:将Dex返汇编成Smali文件,找到这个类对应的Smali文件,在对应的位置插入Log.d(“疑似sign值”, lowerCase2)这句Android代码所对应的Smali代码,然后将Smali代码回编译成Dex文件,重打包成Apk在手机上运行,手机连接电脑,即可在Android Device Monitor(简称DDMS)中查看Logcat。

问:这就是Smali插桩对吗?
答:是的,Smali插桩可以输出一些关键的信息值,比如函数的参数,函数的返回值,除此之外,Smali插桩还可以帮助我们探测程序的运行逻辑,比如你在if语句内放一个Log.d(”Test“,0),如果Logcat中没有看到这句日志,就说明程序没有走if这个代码块。

引用一下维基百科的插桩定义:程序插桩,最早是由J.C. Huang
教授提出的,它是在保证被测程序原有逻辑完整性的基础上在程序中插入一些探针(又称为“探测仪”),通过探针的执行并抛出程序运行的特征数据,通过对这些数据的分析,可以获得程序的控制流和数据流信息,进而得到逻辑覆盖等动态信息,从而实现测试目的的方法。

问:那Smali除了插桩还能干啥?我听说Hook技术也可以实现插桩。
答:确实,Hook技术很强大,你可以Hook一个函数,它就受你摆布,不论是狸猫换太子换成另外一个函数,还是简单的输出它的参数和返回值都是可以的,Android平台的主流Hook框架目前是Xposed和Frida,它们都很方便而且强大。

问:那我们为什么不学它们而学Smali?
答:因为Smali是基础中的基础,搞Android逆向,就不能不懂Smali代码和arm汇编,更因为Smali动态调试需要你理解Smali,单论插桩能力,Frida插桩甩出Smali插桩三条街,我们之后很快就会提到它。

问答结束,下一讲中,我们将使用Smali插桩技术在Log中输出疑似Sign生成函数的参数和返回值。

发布了27 篇原创文章 · 获赞 120 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_38851536/article/details/100173323
今日推荐