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

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.****.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

                     

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,更改名称
Android逆向-Android基础逆向(1)

第二步

选择API
Android逆向-Android基础逆向(1)

第三步

默认选择,然后下一步。
Android逆向-Android基础逆向(1)

第四步

选择activity的名称,也就是我们主Activity的名称,什么是主Activity,就是类似于c语言的main函数,当然只是类似。
Android逆向-Android基础逆向(1)

第五步

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

第六步

在first_demo\app\build\outputs\apk下就可以看到我们生成的APK。
Android逆向-Android基础逆向(1)
这个APK就可以在手机或者其他的虚拟机上进行测试了。

第七步

我这里使用的是夜神模拟器,自己百度下载就好。这里不提供下载链接。
Android逆向-Android基础逆向(1)
把自己的APK拖进去就可以了。
Android逆向-Android基础逆向(1)

0x02 Android APK分析

1.神器android Analyzer

这个是Android studio自带的神器,以前没有用过,这次写的时候才发现,用的方法很简单。
Build ——Analyze APK就可以了。
Android逆向-Android基础逆向(1)
这个东西以后如果用的到的话就进行详细了解。

2.APK实质

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

3.APK内容分析。

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

3.1签名文件

Android逆向-Android基础逆向(1)
这里就是签名文件了。这次只是简单的认识。

3.2资源文件

Android逆向-Android基础逆向(1)
这里面放的是一些图片资源文件,比如说是一些图标。

3.3资源索引文件

Android逆向-Android基础逆向(1)
简单的说就是R.等资源存放的地方,这个可能开发的人更能理解吧。

3.4classes.dex

Android逆向-Android基础逆向(1)
dex文件就是java代码编译之后的内容,也是我们手机可以直接运行的文件。

3.5AndroidManifest.xml

Android逆向-Android基础逆向(1)
这个文件里是是一些权限的描述,还有主文件的问题。

3.6结束语

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

0x03 反编译

1.apktool

使用java -jar apktool.jar d demo.apk指令进行反编译,但是可能会出现一个问题,就是apktool可能因为版本过低的,编译的时候会出问题。
我们在cmd中输入命令。
Android逆向-Android基础逆向(1)
然后就反编译成功了。

1.1反编译文件

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

1.2original文件夹

Android逆向-Android基础逆向(1)
这个文件夹里里面就是签名文件和AndroidManifest.xml

1.3.res文件夹

反编译后还是资源文件。

1.4.smali文件

这个就是我们的主要文件,dex文件被编译出来的就是samli文件,这个也是我们要主要研究的东西。
Android逆向-Android基础逆向(1)

1.4.1 android文件

Android逆向-Android基础逆向(1)
这个文件就是资源文件。并不是我们主要看的文件。

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

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

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 <init>()V    .locals 0    .prologue    .line 6    invoke-direct {p0}, Landroid/support/v7/app/AppCompatActivity;-><init>()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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

1.5.1 第一个模块

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

1.5.2第二个模块

Android逆向-Android基础逆向(1)
这个模块就是,之前的通用模块,只是多了一句继承语句。support。

1.5.3第三个模块

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

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

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

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

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

const v0, 0x7f04001b
  • 1

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

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

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

1.5.3结束语

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

2.APKIDE

使用方法很简单拖进去,简单粗暴易懂。
Android逆向-Android基础逆向(1)
这个是编译之后的内容,和我们用apktool编译出来的一样但是这个提供了很多插件功能,这个之后再进行细说。

3.AndroidKiller

这个是我自己喜欢用的,之前喜欢用APKIDE之后喜欢用AndroidKiller了。
方法也是很简单。直接拖进去就好了。
Android逆向-Android基础逆向(1)
具体怎么使用之后详细说明。

4.JD-GUI

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

0x04 回编译

APKTOOL

使用命令:

java -jar apktool.jar b demo
  • 1

生成的APK会存放在这个文件里,见图。
Android逆向-Android基础逆向(1)
至于回编译的具体流程之后会慢慢讲到。
这里只说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)

           

给我老师的人工智能教程打call!http://blog.****.net/jiangjunshow

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

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,更改名称
Android逆向-Android基础逆向(1)

第二步

选择API
Android逆向-Android基础逆向(1)

第三步

默认选择,然后下一步。
Android逆向-Android基础逆向(1)

第四步

选择activity的名称,也就是我们主Activity的名称,什么是主Activity,就是类似于c语言的main函数,当然只是类似。
Android逆向-Android基础逆向(1)

第五步

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

第六步

在first_demo\app\build\outputs\apk下就可以看到我们生成的APK。
Android逆向-Android基础逆向(1)
这个APK就可以在手机或者其他的虚拟机上进行测试了。

第七步

我这里使用的是夜神模拟器,自己百度下载就好。这里不提供下载链接。
Android逆向-Android基础逆向(1)
把自己的APK拖进去就可以了。
Android逆向-Android基础逆向(1)

0x02 Android APK分析

1.神器android Analyzer

这个是Android studio自带的神器,以前没有用过,这次写的时候才发现,用的方法很简单。
Build ——Analyze APK就可以了。
Android逆向-Android基础逆向(1)
这个东西以后如果用的到的话就进行详细了解。

2.APK实质

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

3.APK内容分析。

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

3.1签名文件

Android逆向-Android基础逆向(1)
这里就是签名文件了。这次只是简单的认识。

3.2资源文件

Android逆向-Android基础逆向(1)
这里面放的是一些图片资源文件,比如说是一些图标。

3.3资源索引文件

Android逆向-Android基础逆向(1)
简单的说就是R.等资源存放的地方,这个可能开发的人更能理解吧。

3.4classes.dex

Android逆向-Android基础逆向(1)
dex文件就是java代码编译之后的内容,也是我们手机可以直接运行的文件。

3.5AndroidManifest.xml

Android逆向-Android基础逆向(1)
这个文件里是是一些权限的描述,还有主文件的问题。

3.6结束语

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

0x03 反编译

1.apktool

使用java -jar apktool.jar d demo.apk指令进行反编译,但是可能会出现一个问题,就是apktool可能因为版本过低的,编译的时候会出问题。
我们在cmd中输入命令。
Android逆向-Android基础逆向(1)
然后就反编译成功了。

1.1反编译文件

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

1.2original文件夹

Android逆向-Android基础逆向(1)
这个文件夹里里面就是签名文件和AndroidManifest.xml

1.3.res文件夹

反编译后还是资源文件。

1.4.smali文件

这个就是我们的主要文件,dex文件被编译出来的就是samli文件,这个也是我们要主要研究的东西。
Android逆向-Android基础逆向(1)

1.4.1 android文件

Android逆向-Android基础逆向(1)
这个文件就是资源文件。并不是我们主要看的文件。

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

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

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 <init>()V    .locals 0    .prologue    .line 6    invoke-direct {p0}, Landroid/support/v7/app/AppCompatActivity;-><init>()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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

1.5.1 第一个模块

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

1.5.2第二个模块

Android逆向-Android基础逆向(1)
这个模块就是,之前的通用模块,只是多了一句继承语句。support。

1.5.3第三个模块

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

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

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

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

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

const v0, 0x7f04001b
  • 1

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

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

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

1.5.3结束语

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

2.APKIDE

使用方法很简单拖进去,简单粗暴易懂。
Android逆向-Android基础逆向(1)
这个是编译之后的内容,和我们用apktool编译出来的一样但是这个提供了很多插件功能,这个之后再进行细说。

3.AndroidKiller

这个是我自己喜欢用的,之前喜欢用APKIDE之后喜欢用AndroidKiller了。
方法也是很简单。直接拖进去就好了。
Android逆向-Android基础逆向(1)
具体怎么使用之后详细说明。

4.JD-GUI

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

0x04 回编译

APKTOOL

使用命令:

java -jar apktool.jar b demo
  • 1

生成的APK会存放在这个文件里,见图。
Android逆向-Android基础逆向(1)
至于回编译的具体流程之后会慢慢讲到。
这里只说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)