Android逆向-Android基础逆向(1)

  • 0x00 前言
    • 学习的目的
    • 工具使用
    • 学习相关基础
    • 学习内容
  • 0x01 Android helloworld
    • 第一步
    • 第二步
    • 第三步
    • 第四步
    • 第五步
    • 第六步
    • 第七步
  • 0x02 Android APK分析
    • 神器android Analyzer
    • APK实质
    • APK内容分析
      • 1签名文件
      • 2资源文件
      • 3资源索引文件
      • 4classesdex
      • 5AndroidManifestxml
      • 6结束语
  • 0x03 反编译
    • apktool
      • 1反编译文件
      • 2original文件夹
      • 3res文件夹
      • 4smali文件
        • 41 android文件
        • 42然后再来看一下com文件夹
      • 5MainActivitysmali
      • 51 第一个模块
      • 52第二个模块
      • 53第三个模块
      • 53结束语
    • APKIDE
    • AndroidKiller
    • JD-GUI
  • 0x04 回编译
    • APKTOOL
  • 0x05 结束语
    • 所学所得
    • 最后

0x00 前言

这里强调一句,在学习的时候,一定要进行笔记的书写,这样才可以

学习的目的:

1.对安卓开发的进行简单的复习(由于本人是Android开发的,所以layout就不重复了)。
2.对最简单的安卓App进行开发。
3.对smali代码进行进一步的学习。
4.对dex文件的分析
5.简单的动态调试
6.静态分析
7.Davlik虚拟机
8.简单的APK文件分析。
以上待补充

工具使用:

1.Android studio 基本操作
2.apktool
3.APKIDE
4.AndroidKiller
5.jd-gui

学习相关基础

1.android简单开发能力
2.smali代码简单了解
3.java了解
4.一些简答工具的使用

学习内容

本次学习内容:
Android开发简单的HelloWorld
对开发的HelloWorld进行反编译

0x01 Android helloworld

开发了一些简单的App所以对于这个Android项目建立就不赘述,想学的可以去单独看看Android开发。

第一步

新建一个project,更改名称

第二步

选择API

第三步

默认选择,然后下一步。

第四步

选择activity的名称,也就是我们主Activity的名称,什么是主Activity,就是类似于c语言的main函数,当然只是类似。

第五步

因为Android studio新建的程序有基本xml,还有helloworld,所以这里不讲解。也不用谷歌自带的模拟器了,直接生成apk。
Build —— Build APK
然后等待,就会Build APK。

第六步

在first_demo\app\build\outputs\apk下就可以看到我们生成的APK。

这个APK就可以在手机或者其他的虚拟机上进行测试了。

第七步

我这里使用的是夜神模拟器,自己百度下载就好。这里不提供下载链接。

把自己的APK拖进去就可以了。

0x02 Android APK分析

1.神器android Analyzer

这个是Android studio自带的神器,以前没有用过,这次写的时候才发现,用的方法很简单。
Build ——Analyze APK就可以了。

这个东西以后如果用的到的话就进行详细了解。

2.APK实质

APK的实质就是一个特殊的zip文件包。
把APK拖到Submit中进行一个查看,当然也可以用其他工具。
这次我们只是做一个查看,不进行分析。
这是我重新写的,之前写的那份不知道为什么没有保存,这两天回家,网卡到爆炸。好气emmmm。

3.APK内容分析。

把APK后缀改成.zip然后解压,就会得到一些文件。
这里就是所有的文件了。我们来依次做一个简单的认识。

3.1签名文件


这里就是签名文件了。这次只是简单的认识。

3.2资源文件


这里面放的是一些图片资源文件,比如说是一些图标。

3.3资源索引文件


简单的说就是R.等资源存放的地方,这个可能开发的人更能理解吧。

3.4classes.dex


dex文件就是java代码编译之后的内容,也是我们手机可以直接运行的文件。

3.5AndroidManifest.xml


这个文件里是是一些权限的描述,还有主文件的问题。

3.6结束语

这些文件以后都会进行详细的分析。

0x03 反编译

1.apktool

使用java -jar apktool.jar d demo.apk指令进行反编译,但是可能会出现一个问题,就是apktool可能因为版本过低的,编译的时候会出问题。
我们在cmd中输入命令。

然后就反编译成功了。

1.1反编译文件

1.2original文件夹


这个文件夹里里面就是签名文件和AndroidManifest.xml

1.3.res文件夹

反编译后还是资源文件。

1.4.smali文件

这个就是我们的主要文件,dex文件被编译出来的就是samli文件,这个也是我们要主要研究的东西。

1.4.1 android文件


这个文件就是资源文件。并不是我们主要看的文件。

1.4.2然后再来看一下com文件夹。

1.5MainActivity.smali

首先来看看代码

.class public Lcom/example/hanlei/first_demo/MainActivity;
.super Landroid/support/v7/app/AppCompatActivity;
.source "MainActivity.java"


# direct methods
.method public constructor ()V
    .locals 0

    .prologue
    .line 6
    invoke-direct {p0}, Landroid/support/v7/app/AppCompatActivity;->()V

    return-void
.end method


# virtual methods
.method protected onCreate(Landroid/os/Bundle;)V
    .locals 1
    .param p1, "savedInstanceState"    # Landroid/os/Bundle;

    .prologue
    .line 10
    invoke-super {p0, p1}, Landroid/support/v7/app/AppCompatActivity;->onCreate(Landroid/os/Bundle;)V

    .line 11
    const v0, 0x7f04001b

    invoke-virtual {p0, v0}, Lcom/example/hanlei/first_demo/MainActivity;->setContentView(I)V

    .line 12
    return-void
.end method

1.5.1 第一个模块

有没有觉得这个模块很熟悉,就是之前我们学习的开头文件。描述了一个路径,以及名称。

1.5.2第二个模块


这个模块就是,之前的通用模块,只是多了一句继承语句。support。

1.5.3第三个模块


第三个模块就是onCreate模块,学习过Android编程的肯定知道这个就是启动模块,相当于main函数。
我们来看看具体都有哪些内容吧。

.param p1, "savedInstanceState"    # Landroid/os/Bundle;

这一句话之前没有见到过,意思就是说传入的参数名为savedInstanceState。

 invoke-super {p0, p1}, Landroid/support/v7/app/AppCompatActivity;->onCreate(Landroid/os/Bundle;)V

这句话很简单,就是调用Landroid/support/v7/app/AppCompatActivity这一串的onCreate方法。然后返回值就是空。

const v0, 0x7f04001b

定义一个v0寄存器,赋值为0x7f04001b

invoke-virtual {p0, v0}, Lcom/example/hanlei/first_demo/MainActivity;->setContentView(I)V

然后调用setContentView方法把v0的值传进去。

1.5.3结束语

有没有感觉到之前在反编译java得到的smali对现在很有帮助呢。

2.APKIDE

使用方法很简单拖进去,简单粗暴易懂。

这个是编译之后的内容,和我们用apktool编译出来的一样但是这个提供了很多插件功能,这个之后再进行细说。

3.AndroidKiller

这个是我自己喜欢用的,之前喜欢用APKIDE之后喜欢用AndroidKiller了。
方法也是很简单。直接拖进去就好了。

具体怎么使用之后详细说明。

4.JD-GUI

如果说smali代码看不懂的话,那么java代码是不是相对要容易一点呢了。
JD-GUI这个工具的作用就是用来查看JAR文件的。我们把dex文件转成jar,然后就可以使用JD-GUI来查看了。

这个是查看apktool.jar文件做的演示。

0x04 回编译

APKTOOL

使用命令:

java -jar apktool.jar b demo

生成的APK会存放在这个文件里,见图。

至于回编译的具体流程之后会慢慢讲到。
这里只说APKTOOl的,其他的之后慢慢来,超级简单,自己研究吧。

0x05 结束语

我在想要不要再加点c语言,python什么的,是不是有点乱了。我觉得要复习的还有很多东西哦。

所学所得

最后加上一个简单的总结吧。
1.APK内容文件的分析(网络问题,我写了四遍)
2.apktool的使用(我第一次用你敢信?)
3.工具(我本来就会用基本的,也不算是所得吧)
4.思路
5.其它

最后

有兴趣可以看看这个java基础系列,对smali理解可能有帮助。
Android逆向-java代码基础(1)
Android逆向-java代码基础(2)
Android逆向-java代码基础(3)
Android逆向-java代码基础(4)
Android逆向-java代码基础(5)
Android逆向-java代码基础(6)
Android逆向-java代码基础(7)
Android逆向-java代码基础(8)

你可能感兴趣的:(Android逆向-操刀天下)