您现在的位置是:网站首页>文章详情文章详情

安卓逆向从HelloWord开始

inlike2019-09-09 原创文章 浏览(1358) 评论(0) 喜欢(27)

简介本篇将从第一个Android程序HelloWord来运用之前所说的smali语法《安卓虚拟机及基础逆向的核心》,同时对安卓逆向与Python爬虫方面的关系讲一下个人见解。

本篇将从第一个Android程序HelloWord来运用之前所说的smali语法《安卓虚拟机及基础逆向的核心》,同时对安卓逆向与Python爬虫方面的关系讲一下个人见解。

通过对Android逆向初步的学习和了解,发现Android逆向是非常大的一个体系,其难度是远高于网络爬虫的;Android逆向涉及了java语言、c++、arm汇编语言、smali语法的综合运用,要做逆向之事,必然会一点正向开发才行,这也是难度的一部分。

Android逆向最有价值的地方在于外挂,而不在于网络爬虫;之前接触过太多破解软件,他们可以让用户不付费而使用付费的功能、可以开发外挂产生更大的利益,如果说安卓逆向为了方便爬虫那就是大材小用了。

而在安全防御方面,安卓逆向的防御级别是比网络爬虫更高的,网络大多数是为了获取信息,产生的影响较小;而安卓逆向的目的是为了获得直接利益,因此大型app都具有安卓逆向的安全团队来防御逆向攻击。

安卓逆向能力对于爬虫开发者而言是一个鸡肋,一方面是容易逆向的app价值不大,有价值的app不容易逆向;另一方面是安卓逆向是更高级的应用领域,他的价值不在于做个爬虫。不管难度如何,本专题的分享将继续,形成一个完整的安卓逆向知识体系。

言归正传,下面来时说本篇内容的主题内容,第一个逆向程序HelloWord,主要讲述逆向的基本过程。

在电脑安装AndroidStudio之后,新建一个项目,这个项目就是以HelloWord开始的,如图:

image.png

安卓项目中有基本的res(静态资源目录)、AndroidManifest.xml(权限申请、apk系统属性文件)、java源码文件,将这个初始的、最简单的apk打包后用Androidkiller反编译后的目录如下:

image.png

基本上是对应apk项目文件的,其中apk反编译后java源码文件中的类对应smali文件,一个类就是一个smali文件。

我们再通过一个功能来分析smali和java源码的对应关系,HelloWord有个简单的功能,就是单击页面上的email图标会弹出一行提示文本。

该功能对应的java源码是:

 fab.setOnClickListener { view ->
            Snackbar.make(view, "你点击了这个图标", Snackbar.LENGTH_LONG)
                    .setAction("Action"null).show()
        }

给控件fab绑定了一个点击事件,该事件会弹出一个提示框,提示内容是“你点击了这个图标”

我们在看apk逆向后的smali源码文件:

# virtual methods
.method public final onClick(Landroid/view/View;)V
    .locals 3
    .param p1, "view"    # Landroid/view/View
;

    .line 19
    nop

    .line 20
    nop

    .line 19
    nop

    .line 20
    nop

    .line 19
    const-string v0, "\u4f60\u70b9\u51fb\u4e86\u8fd9\u4e2a\u56fe\u6807"

    check-cast v0, Ljava/lang/CharSequence;

    const/4 v1, 0x0

    invoke-static {p1, v0, v1}, Lcom/google/android/material/snackbar/Snackbar;->make(Landroid/view/View;Ljava/lang/CharSequence;I)Lcom/google/android/material/snackbar/Snackbar;

    move-result-object v0

    .line 20
    const-string v1, "Action"

    check-cast v1, Ljava/lang/CharSequence;

    const/4 v2, 0x0

    invoke-virtual {v0, v1, v2}, Lcom/google/android/material/snackbar/Snackbar;->setAction(Ljava/lang/CharSequence;Landroid/view/View$OnClickListener;)Lcom/google/android/material/snackbar/Snackbar;

    move-result-object v0

    invoke-virtual {v0}, Lcom/google/android/material/snackbar/Snackbar;->show()V

    .line 21
    return-void
.end method

那么如何从smali中找到我们需要的那段源码?重要的一个方法就是搜索关键字,在Androidkiller中搜索转为Unicode的中文字符来确定对应源码的位置.

image.png

本篇从安卓正反两方面来说明逆向的过程,及其逆向后的文件结构与apk工程的对应关系,逆向的基本步骤是先查壳在反编译,其中还是涉及到混淆等加固的破解,将在后面逐步完善该专题内容。


很赞哦! ( 27)
    《Python实战进阶》
    None
    None
    夏至已深

站点信息

  • 建站时间:2019-5-24
  • 网站程序:like in love
  • 主题模板《今夕何夕》
  • 文章统计:104条
  • 文章评论:***条
  • 微信公众号:扫描二维码,关注我们
  • 个人微信公众号