BubblePig 发表于 2018-1-24 19:20

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,更改名称
![这里写图片描述](http://t1.aixinxi.net/o_1c4gnuof4dth1kk1omk62k1f62a.png-j.jpg)
##第二步
选择API
![这里写图片描述](http://t1.aixinxi.net/o_1c4goc375oks192fj4n9pmvhna.png-j.jpg)
##第三步
默认选择,然后下一步。
![这里写图片描述](http://t1.aixinxi.net/o_1c4go994v13ka1civvpu1ef4108oa.png-j.jpg)
##第四步
选择activity的名称,也就是我们主Activity的名称,什么是主Activity,就是类似于c语言的main函数,当然只是类似。
![这里写图片描述](http://t1.aixinxi.net/o_1c4goi4vo1hhduou1m6714vv1a1a.png-j.jpg)
##第五步
因为Android studio新建的程序有基本xml,还有helloworld,所以这里不讲解。也不用谷歌自带的模拟器了,直接生成apk。
Build —— Build APK
然后等待,就会Build APK。
![这里写图片描述](http://t1.aixinxi.net/o_1c4gpjsum18gs17591tth1khlhu3a.png-j.jpg)
##第六步
在first_demo\app\build\outputs\apk下就可以看到我们生成的APK。
![这里写图片描述](http://t1.aixinxi.net/o_1c4gpvgpdelf1vcfh3q1ue2mcua.png-j.jpg)
这个APK就可以在手机或者其他的虚拟机上进行测试了。
##第七步
我这里使用的是夜神模拟器,自己百度下载就好。这里不提供下载链接。
![这里写图片描述](http://t1.aixinxi.net/o_1c4gqacca3esrg97el11ae1gvaa.png-j.jpg)
把自己的APK拖进去就可以了。
![这里写图片描述](http://t1.aixinxi.net/o_1c4gqehkjuhg1c0r4g7vlu1ohba.png-j.jpg)
# 0x02 Android APK分析
## 1.神器android Analyzer
这个是Android studio自带的神器,以前没有用过,这次写的时候才发现,用的方法很简单。
Build ——Analyze APK就可以了。
![这里写图片描述](http://t1.aixinxi.net/o_1c4gr7mb8c3c3frddb11sjdnaa.png-j.jpg)
这个东西以后如果用的到的话就进行详细了解。
##2.APK实质
APK的实质就是一个特殊的zip文件包。
把APK拖到Submit中进行一个查看,当然也可以用其他工具。
这次我们只是做一个查看,不进行分析。
这是我重新写的,之前写的那份不知道为什么没有保存,这两天回家,网卡到爆炸。好气emmmm。
![这里写图片描述](http://t1.aixinxi.net/o_1c4hh4fmmgdueq4q2j15t24r7f.png-j.jpg)
##3.APK内容分析。
把APK后缀改成.zip然后解压,就会得到一些文件。
这里就是所有的文件了。我们来依次做一个简单的认识。
![这里写图片描述](http://t1.aixinxi.net/o_1c4hhh0q4thd58v4ad7ej8apa.png-j.jpg)
###3.1签名文件
![这里写图片描述](http://t1.aixinxi.net/o_1c4hhkhel1k2pdtc5jpf1s1p57a.png-j.jpg)
这里就是签名文件了。这次只是简单的认识。
###3.2资源文件
![这里写图片描述](http://t1.aixinxi.net/o_1c4jjbuhf14541e2bf9n1mnn15tha.png-j.jpg)
这里面放的是一些图片资源文件,比如说是一些图标。
###3.3资源索引文件
![这里写图片描述](http://t1.aixinxi.net/o_1c4jk644d5t9s81el0mh387sa.png-j.jpg)
简单的说就是R.等资源存放的地方,这个可能开发的人更能理解吧。
###3.4classes.dex
![这里写图片描述](http://t1.aixinxi.net/o_1c4jk3a5t1ld11k0lfdadss1brha.png-j.jpg)
dex文件就是java代码编译之后的内容,也是我们手机可以直接运行的文件。
###3.5AndroidManifest.xml
![这里写图片描述](http://t1.aixinxi.net/o_1c4jjtu1j252kptf3e8hr1067a.png-j.jpg)
这个文件里是是一些权限的描述,还有主文件的问题。
###3.6结束语
这些文件以后都会进行详细的分析。
# 0x03 反编译
##1.apktool
使用java -jar apktool.jar d demo.apk指令进行反编译,但是可能会出现一个问题,就是apktool可能因为版本过低的,编译的时候会出问题。
我们在cmd中输入命令。
![这里写图片描述](http://t1.aixinxi.net/o_1c4jmp3pj15m22lvin01lidm0a.png-j.jpg)
然后就反编译成功了。
###1.1反编译文件
![这里写图片描述](http://t1.aixinxi.net/o_1c4jmvgdn11a01bq51q3m1ah4121aa.png-j.jpg)
###1.2original文件夹
![这里写图片描述](http://t1.aixinxi.net/o_1c4jn3qpe1jdb8qt1nf81fue1ctga.png-j.jpg)
这个文件夹里里面就是签名文件和AndroidManifest.xml
###1.3.res文件夹
反编译后还是资源文件。
###1.4.smali文件
这个就是我们的主要文件,dex文件被编译出来的就是samli文件,这个也是我们要主要研究的东西。
![这里写图片描述](http://t1.aixinxi.net/o_1c4jnec431dma1o9leb8jltaopa.png-j.jpg)
####1.4.1 android文件
![这里写图片描述](http://t1.aixinxi.net/o_1c4jnidjsdd8jkd11p3nd1123ka.png-j.jpg)
这个文件就是资源文件。并不是我们主要看的文件。
####1.4.2然后再来看一下com文件夹。
![这里写图片描述](http://t1.aixinxi.net/o_1c4jnlnars4jfadneac5luh0a.png-j.jpg)
###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.5.1 第一个模块
有没有觉得这个模块很熟悉,就是之前我们学习的开头文件。描述了一个路径,以及名称。
![这里写图片描述](http://t1.aixinxi.net/o_1c4joegvs1v7e1l7emq71pt62q8a.png-j.jpg)
###1.5.2第二个模块
![这里写图片描述](http://t1.aixinxi.net/o_1c4joh7nf1cuj1d4b1ic0nuv1bnma.png-j.jpg)
这个模块就是,之前的通用模块,只是多了一句继承语句。support。
###1.5.3第三个模块
![这里写图片描述](http://t1.aixinxi.net/o_1c4joqsaj95ja581ueuu6h1aga.png-j.jpg)
第三个模块就是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
使用方法很简单拖进去,简单粗暴易懂。
![这里写图片描述](http://t1.aixinxi.net/o_1c4jr10bdac71umq1apb8i6a2ga.png-j.jpg)
这个是编译之后的内容,和我们用apktool编译出来的一样但是这个提供了很多插件功能,这个之后再进行细说。
##3.AndroidKiller
这个是我自己喜欢用的,之前喜欢用APKIDE之后喜欢用AndroidKiller了。
方法也是很简单。直接拖进去就好了。
![这里写图片描述](http://t1.aixinxi.net/o_1c4jrg4tb75u1b28jco1db51f3a.png-j.jpg)
具体怎么使用之后详细说明。
##4.JD-GUI
如果说smali代码看不懂的话,那么java代码是不是相对要容易一点呢了。
JD-GUI这个工具的作用就是用来查看JAR文件的。我们把dex文件转成jar,然后就可以使用JD-GUI来查看了。
![这里写图片描述](http://t1.aixinxi.net/o_1c4js0r6ta0pva6nrb2ss1p48a.png-j.jpg)
这个是查看apktool.jar文件做的演示。
# 0x04 回编译
##APKTOOL
使用命令:

```
java -jar apktool.jar b demo
```

生成的APK会存放在这个文件里,见图。
![这里写图片描述](http://t1.aixinxi.net/o_1c4jt6bgddme1rflne1e5gt7ba.png-j.jpg)
至于回编译的具体流程之后会慢慢讲到。
这里只说APKTOOl的,其他的之后慢慢来,超级简单,自己研究吧。
#0x05 结束语
我在想要不要再加点c语言,python什么的,是不是有点乱了。我觉得要复习的还有很多东西哦。
##所学所得
最后加上一个简单的总结吧。
1.APK内容文件的分析(网络问题,我写了四遍)
2.apktool的使用(我第一次用你敢信?)
3.工具(我本来就会用基本的,也不算是所得吧)
4.思路
5.其它
##最后
有兴趣可以看看这个java基础系列,对smali理解可能有帮助。
(https://www.52pojie.cn/thread-690674-1-1.html)
(https://www.52pojie.cn/thread-684492-1-1.html)
(https://www.52pojie.cn/thread-690679-1-1.html)
(https://www.52pojie.cn/thread-685752-1-1.html)
(https://www.52pojie.cn/thread-690689-1-1.html)
(https://www.52pojie.cn/thread-689279-1-1.html)
(https://www.52pojie.cn/thread-689936-1-1.html)
(https://www.52pojie.cn/thread-690542-1-1.html)

末主体缘 发表于 2018-8-6 16:29

df4528 发表于 2018-1-26 14:01
这个真不知道,我旁边就坐着一位逆向大佬,不过大佬主要方向是汇编和算法,对于APP,他现在腾不出手研究 ...

学习安卓逆向,汇编语言必须学吗?还是说只要是逆向(包括Windows),汇编语言都要学?望赐教哈

df4528 发表于 2018-1-26 14:01

BubblePig 发表于 2018-1-26 11:30
我听大佬说逆向是杂学。。。太多了

这个真不知道,我旁边就坐着一位逆向大佬,不过大佬主要方向是汇编和算法,对于APP,他现在腾不出手研究。

ONEPIECE 发表于 2018-1-24 19:37

感谢大神的分享现在开始学习!!!!

三天不过尔雅 发表于 2018-1-24 21:55

谢谢分享!!!

yaksacn2001 发表于 2018-1-24 21:56

楼主辛苦了啊,虽然看不懂,还是评个分

BubblePig 发表于 2018-1-24 22:23

yaksacn2001 发表于 2018-1-24 21:56
楼主辛苦了啊,虽然看不懂,还是评个分

这个我也很尴尬

sjh198687 发表于 2018-1-24 22:37

谢谢分享

Rin_0506 发表于 2018-1-24 22:41

感谢分享

小彬. 发表于 2018-1-24 23:06

谢谢楼主分享!

yssun 发表于 2018-1-25 11:16


谢谢楼主分享!a

Hmily 发表于 2018-1-25 15:34

@BubblePig 我把帖子最后的链接也替换成论坛的帖子地址了,为了方便,以后论坛发布的都给论坛地址吧。
页: [1] 2 3 4
查看完整版本: Android逆向-Android基础逆向(1)