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,更改名称
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-P8zBvvJd-1678030046303)(null)]
##第二步
选择API
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-krNZYtPu-1678030046523)(null)]
##第三步
默认选择,然后下一步。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vLX08JI9-1678030046470)(null)]
##第四步
选择activity的名称,也就是我们主Activity的名称,什么是主Activity,就是类似于c语言的main函数,当然只是类似。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qzDlfCZh-1678030046316)(null)]
##第五步
因为Android studio新建的程序有基本xml,还有helloworld,所以这里不讲解。也不用谷歌自带的模拟器了,直接生成apk。
Build —— Build APK
然后等待,就会Build APK。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E8uBhO9N-1678030046350)(null)]
##第六步
在first_demo\app\build\outputs\apk下就可以看到我们生成的APK。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tbirGN4p-1678030046327)(null)]
这个APK就可以在手机或者其他的虚拟机上进行测试了。
##第七步
我这里使用的是夜神模拟器,自己百度下载就好。这里不提供下载链接。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wjRSEXnE-1678030046511)(null)]
把自己的APK拖进去就可以了。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OIXZgutr-1678030046341)(null)]

0x02 Android APK分析

1.神器android Analyzer

这个是Android studio自带的神器,以前没有用过,这次写的时候才发现,用的方法很简单。
Build ——Analyze APK就可以了。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gw53f4ad-1678030043634)(http://t1.aixinxi.net/o_1c4gr7mb8c3c3frddb11sjdnaa.png-j.jpg)]
这个东西以后如果用的到的话就进行详细了解。
##2.APK实质
APK的实质就是一个特殊的zip文件包。
把APK拖到Submit中进行一个查看,当然也可以用其他工具。
这次我们只是做一个查看,不进行分析。
这是我重新写的,之前写的那份不知道为什么没有保存,这两天回家,网卡到爆炸。好气emmmm。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bZBDNIkN-1678030046411)(null)]
##3.APK内容分析。
把APK后缀改成.zip然后解压,就会得到一些文件。
这里就是所有的文件了。我们来依次做一个简单的认识。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gvryiBp6-1678030046450)(null)]
###3.1签名文件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mgs3Nuew-1678030046495)(null)]
这里就是签名文件了。这次只是简单的认识。
###3.2资源文件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TNnoqabu-1678030046385)(null)]
这里面放的是一些图片资源文件,比如说是一些图标。
###3.3资源索引文件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9wGCEZet-1678030046394)(null)]
简单的说就是R.等资源存放的地方,这个可能开发的人更能理解吧。
###3.4classes.dex
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6BINssnq-1678030046484)(null)]
dex文件就是java代码编译之后的内容,也是我们手机可以直接运行的文件。
###3.5AndroidManifest.xml
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2K0mpWby-1678030046580)(null)]
这个文件里是是一些权限的描述,还有主文件的问题。
###3.6结束语
这些文件以后都会进行详细的分析。

0x03 反编译

##1.apktool
使用java -jar apktool.jar d demo.apk指令进行反编译,但是可能会出现一个问题,就是apktool可能因为版本过低的,编译的时候会出问题。
我们在cmd中输入命令。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ON0qGhEE-1678030046373)(null)]
然后就反编译成功了。
###1.1反编译文件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8mgYufDo-1678030046361)(null)]
###1.2original文件夹
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EWW5MCZb-1678030046537)(null)]
这个文件夹里里面就是签名文件和AndroidManifest.xml
###1.3.res文件夹
反编译后还是资源文件。
###1.4.smali文件
这个就是我们的主要文件,dex文件被编译出来的就是samli文件,这个也是我们要主要研究的东西。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X9zhTSdC-1678030046423)(null)]
####1.4.1 android文件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cH3W9sf8-1678030046597)(null)]
这个文件就是资源文件。并不是我们主要看的文件。
####1.4.2然后再来看一下com文件夹。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ONHEXKOS-1678030046560)(null)]
###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 第一个模块
有没有觉得这个模块很熟悉,就是之前我们学习的开头文件。描述了一个路径,以及名称。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-82cv0HhX-1678030046440)(null)]
###1.5.2第二个模块
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HSp9GTMS-1678030046433)(null)]
这个模块就是,之前的通用模块,只是多了一句继承语句。support。
###1.5.3第三个模块
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-knuNL2dj-1678030046461)(null)]
第三个模块就是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
使用方法很简单拖进去,简单粗暴易懂。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aRTg4GcF-1678030046503)(null)]
这个是编译之后的内容,和我们用apktool编译出来的一样但是这个提供了很多插件功能,这个之后再进行细说。
##3.AndroidKiller
这个是我自己喜欢用的,之前喜欢用APKIDE之后喜欢用AndroidKiller了。
方法也是很简单。直接拖进去就好了。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qJsHO9Aj-1678030046569)(null)]
具体怎么使用之后详细说明。
##4.JD-GUI
如果说smali代码看不懂的话,那么java代码是不是相对要容易一点呢了。
JD-GUI这个工具的作用就是用来查看JAR文件的。我们把dex文件转成jar,然后就可以使用JD-GUI来查看了。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1XBOf2cq-1678030046403)(null)]
这个是查看apktool.jar文件做的演示。

0x04 回编译

##APKTOOL
使用命令:

java -jar apktool.jar b demo

生成的APK会存放在这个文件里,见图。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HmZHgnEP-1678030046546)(null)]
至于回编译的具体流程之后会慢慢讲到。
这里只说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)

评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王嘟嘟_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值