前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android 逆向--BUFF | Smali 介绍与学习

Android 逆向--BUFF | Smali 介绍与学习

作者头像
Python编程与实战
发布2019-12-05 17:04:15
1.6K0
发布2019-12-05 17:04:15
举报
文章被收录于专栏:Python编程与实战
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压缩或者别的压缩工具打开。我们罗列和陈述一下展开后的文件结构,需要注意的是,为了满足自身的架构和设计,几乎所有应用的文件结构都会比我们罗列出来的多一些东西,但我们罗列的七部分是固定不变的基础。

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

提示1

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

提示2

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

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

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

04

本篇重点!

本篇重点!

Smali语法学习

1、工具

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

2、教程

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-09-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python编程与实战 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档