安卓逆向基础分享

  • Post author:
  • Post category:其他




安卓逆向基础入门分享



前言

在学习时候要记得时刻的做笔记,都说好记性不如烂笔头是吧,样养成记笔记的好习惯,这样你学习起来就不会乱。



## 本次学习的目的

1.对安卓开发的进行简单的复习(安卓开发的部分这里就不细讲了)。

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进行反编译



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拖进去就可以了。



Android APK分析



1.神器android Analyzer

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

Build ——Analyze APK就可以了。

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

2.APK实质

APK的实质就是一个特殊的zip文件包。

把APK拖到Submit中进行一个查看,当然也可以用其他工具。

这次我们只是做一个查看,不进行分析。

这是我重新写的,之前写的那份不知道为什么没有保存,这两天回家,网卡到爆炸。好气emm。

3.APK内容分析。

把APK后缀改成.zip然后解压,就会得到一些文件。

这里就是所有的文件了。我们来依次做一个简单的认识。

.3.1签名文件

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

3.2资源文件

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

3.3资源索引文件

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

3.4classes.dex

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

3.5AndroidManifest.xml

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

3.6结束语

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



反编译



1.apktool

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

我们在cmd中输入命令。

然后就反编译成功了。

1.1反编译文件

.2original文件夹

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

1.3.res文件夹

反编译后还是资源文件。

1.4.smali文件

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

1.4.1 android文件

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

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

1.5MainActivity.smali

首先来看看代码

在这里插入图片描述

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文件做的演示。



回编译



APKTOOL

使用命令:

复制代码 隐藏代码

java -jar apktool.jar b demo

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

至于回编译的具体流程之后会慢慢讲到。

这里只说APKTOOl的,其他的之后慢慢来,超级简单,自己研究吧



结束语



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

最后加上一个简单的总结吧。

1.APK内容文件的分析(网络问题,我写了四遍)

2.apktool的使用(我第一次用你敢信?)

3.工具(我本来就会用基本的,也不算是所得吧)

4.思路

5.其它

最后

有兴趣学习这个技术可以私信我,希望给在学习的你有一点帮助

一个在学习分享的一点东西,需要工具包的私信我给你发。