BUFF | Smali介绍与学习

在接下来几篇文章里,我们将跟小雅一起学习Smali动态调试

这可比之前的静态分析要省时喔。

01 

动态分析方法

静态分析反编译代码往往是逆向分析的第一步,在对代码逻辑大致了解后,我们就可以使用动态分析的方法验证猜想、加速分析和实现破解。

Android 动态分析

泛指一切需要运行应用才能实现的分析技术 

· Smali动态调试
· Hook动态注入
· DDMS监控工具

Android动态分析の常用方法

   近年来,依托于优雅便捷的Frida框架,很多人初学逆向就开始玩FRIDA HOOK,上手之后都会惊喜于它的简单和强大,几行JS代码就抓到了入参和返回值,甚至直接嗅探到了关键代码,因此感觉不学Smali也可以轻松完成逆向,那么多一事不如少一事,不学Smali也罢。 

我认为这是不妥当的,了解和学习Smali可以帮助加深对Android逆向工程的的理解,不论是Smali插桩还是Apk重签名,都是很有价值的知识,如果我们想在逆向之路上走的更长更远,就应该体系化的汲取知识,切忌浮躁和跃进。除此之外,Smali动态调试是一种通用的、常规化的动态分析技术,它和Hook技术在逆向中互相补充,不能重Hook而轻Smali调试,至少在目前看来,这个技术还没有过时。

02

Smali

通俗的来讲,Smali代码是DEX文件反汇编的结果,学习Smali就是学习其出处、语法和寄存器的过程。

DEX

原生Android应用是由Java/Kotlin语言写的,那么从Java源码到成为一个APK文件,其中经过了非常复杂繁多的步骤,我们这里只关注代码的编译执行过程。

Android程序

Android平台上主要使用Java语言来开发程序,但Android上的程序运行机制和标准的Java程序并不一样。因为手机系统的内存和处理器性能较差。

为了解决该问题,以及摆脱和Java母公司的版权纠纷,Google开发了Dalvik虚拟机,Android程序就运行在其上。

03 

Java代码从编写到执行

 编写Java代码。

✔ 所有的Java代码通过Java编译器(javac)编译成java字节码,即.class文件。

 Java字节码在Java虚拟机上被解释成机器语言后,程序执行。

   到目前为止,我们看不到DEX的影子,那就更别提什么Smali了,显然DEX是Android中独有的文件格式,请看下文:

Android中的Java代码从编写到执行


 编写Java代码。

✔ 所有的Java代码通过Java编译器(javac)编译成java字节码,即.class文件。

 Java字节码通过Android的dx工具转换为Dalvik字节码,即.dex文件。

✔ Dalvik字节码在Dalvik虚拟机上运行。

   我们终于知道DEX的出处了,我们可以瞧一瞧Apk中的DEX文件。

Apkの内部结构

Apk实际上是一种特殊的压缩包,我们可以直接通过360压缩或者别的压缩工具打开。我们罗列和陈述一下展开后的文件结构,需要注意的是,为了满足自身的架构和设计,几乎所有应用的文件结构都会比我们罗列出来的多一些东西,但我们罗列的七部分是固定不变的基础。

640?wx_fmt=png

640?wx_fmt=png

   我们使用Android逆向助手反编译APK得到Smali代码,它集成了Apktool等一系列工具并实现了可视化拖拽操作。如果你喜欢命令行操作,可以搜索Apktool,如果你使用Mac电脑,可以下载这个工具,界面和操作几乎和windows中一样https://github.com/Jermic/Android-Crack-Tool 。

提示1

我演示了Windows下的操作,工具放在了网盘里,也可以自行搜索下载。

640?wx_fmt=jpeg

640?wx_fmt=png

提示2

以smali开头的文件夹里存放的就是层层叠叠的smali代码,你可能会困惑为什么有两个smali文件夹,这是因为有两个dex文件,那为什么java源码编译和打包后变成两个了Davlik字节码文件呢?一个不好吗?这就涉及到DEX的分包问题了,我之后会提到。

用文本编辑器打开smali文件夹中的众多Smali文件

640?wx_fmt=png

   乍看会有些陌生和恐慌,但不用担心,有非常好的教程和工具可以帮助我们学习Smali语法,除此之外也可以在群里讨论和交流Smali语法。

04

640?wx_fmt=png本篇重点! 
本篇重点!

Smali语法学习

1、工具

我们可以使用Java和Smali互转工具来验证与学习Smail语法,工具已放在上一篇百度云中,叫做J2S2J1。

2、教程

我本想自己写一篇完整的教程,但无意中发现了一篇内容、表述、排版均优的教程,附上链接,大家只需要配合上述工具,就可以快速入门Smali语法。https://juejin.im/entry/579ef6e37db2a2005a6350d8

今日份Smali语法介绍和学习到此结束,

小雅会了,你学会了吗?

明日内容:学习Smali动态调试

———— / END / ————

640?wx_fmt=png

文字:Lilac

排版:小雅

每早九点,

每天一更。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值