5、《ANDROID 逆向专题》android 基础及linux指令
我们已经知道,android 的内核其实就linux。本质上我们可以将android看成就是linux系统的一个分支。所以这里我们有必要整理一下linux 中的基础的东西。
本文的内容分为三分部分:
一、android 下的分区目录结构
二、linux 下常用指令
三、adb常用指令
首先先来看看android的分区:
System分区: 就是我们刷ROM的分区
Data分区: 分区就是我们装APK的分区。
Cache分区: 是缓存分区
SDCard分区: 就是挂载的SD卡。
data分区常见目录:app、system、data、local、misc
1、data/data目录
存放的是所有APK程序数据的目录,每个APK对就一个自己的Data目录,就是在data/data/目录下,会产生一个跟 Package一样的目录。比如有一个APK,它的包名叫com.test.hello则,在data/data/目录下会有一个 com.test.hello的目录,这个APK只能操作此目录,不能操作其它APK的目录
2、data/app目录
用户安装的APK放在这里。我们如果把APK放入这个文件夹下面的话,就算安装好了。这就叫静默安装。不用管APK文件里面的lib目录下的库文件,系统会自动帮我们放入调用库
3、data/misc目录
保存WIFI帐号,v*n设置信息等。比如保存了一个WIFI连接帐号,则此目录下的WIFI目录下面wpa_supplicant.conf可以查看到
system分区常用目录:app、lib、xbin、bin、media、framework
1、system/app目录
存放系统自带的APK。将APK放入到System/app目录下,也是静默安装
2、system/lib目录
存放APK程序用到的库文件
3、system/bin目录和system/xbin目录
存放的是shell命令
4、system/framework目录
启用Android系统所用到框架,如一些jar文件
sd卡目录:/sdcard /mnt/sdcard
接下来看看android中常用的指令
下面收集了一些指令,在android下是通用的。常用的不多,这里整理下
1、ls
这个命令是列出当前目录下的文件:
加上 参数,可以看出文件的详情,包括所述者,权限,文件日期等
比如 a 参数,all 的意思显示所有文件,包括隐藏的文件
l 参数,列出文件信息,包括文件权限等。
第一个字符代表文件类型,后面9个字符表示文件权限
- 普通文件
d 文件夹
l 符号连接(软连接) 后面会用 -> 打印出指向的真实文件。类似于我们window下的快捷方式
第一个rwx代表文件所有者的权限,第二个rwx代表和所有者同组人的权限,第三个rwx代表其他用户对该文件的权限
rwx可读可写可执行 - 代表没有权限
权限还可以用数字来表示 r=4(二进制100) w=2(二进制10) x=1(二进制1)。所以一个文件拥有可读可写可运行,就是二进制的111,也就是十进制7。所以如果要赋予一个文件rwxrwxrwx(不管用户组,给最大权限) 那么就是就是要赋予权限 777
Android下面的目录和文件都是有权限的,要操作目录和文件都需要有对应权限才能操作。如果没有,则使用chomd 命令来修改
2、cd
3、cat
查看文本内容,如这里就是查看/data/misc/wifi/wpa_supplicant.conf 文件,这个文件保存的是曾经连接的wifi信息
4、su
这个命令用来提权,一般使用adb命令连接设备之后都是shell权限,使用su命令之后能提权到root
这里提一句,这里是真机经过root之后的。这种情况较不完全root,就是使用adb shell 先进入到shell权限,后面经过一次提权才能进入到root权限。但是在模拟器中,我们使用adb shell 就能直接使用root 权限,如下截图,这种叫完全root。是有区别的,当然一般情况下不完全root就够用了。
5、grep
6、getprop
7、chmod
这个命令用来提权。比如某个文件没有运行权限,就可以使用这个命令对文件进行提权。比如这里的android_server没有运行权限,我们运行的时候回报permission denied。使用 chmod 777 命令后给到运行权限。就可以正常运行了。
8、ps
查看进程
9、mkdir
新建目录
10、rm -rf
强制递归删除(r 递归,f强制)
11、cp
12、mv
13、md5
取一个文件的md5,常用与判断文件是否被修改
14、df
查看系统的分区结构,包括一些空间,大小
这里提到了目录结构,就来整理下android 的目录结构吧,其实跟linux基本上是一样的。
根目录: /,类似于 我们windows 中的根目录(C://。window中我们可以有多个磁盘分区,C盘,D盘等等。每个盘都有自己的根目录。类似我的理解是将linux看成就一个磁盘,只有一个根目录 /)
绝对路径和相对路径: 这里从根目录出发的路径都是绝对路径,.代表的就是当前路径。 .. 代表的是上一层路径
隐藏文件: 以. 开头的文件
可执行文件的运行: ./android_server
用户组: Android的用户组有System、root、shell
最后看看一些常用的adb 指令
同样的。我们需要在pc上完成对android 的控制,很多时候是需要使用到adb的。熟练掌握一些必要的adb命令也是逆向中基础的一步。这里也整理一些常用的出来
1、adb devices
这个指令用来显示当前连接的 设备列表,包括使用usb连接的真机以及运行中的虚拟机。 如果当前连接的有多个设备,在后面使用adb命名的时候是需要指定需要执行命令的设备的。
2、adb shell
这个命令是进入到设备的控制台。如果只有一个设备那么直接adb shell 就够了,但是如果有多个设备,就需要使用-s 参数指定,如下。成功运行命令之后,会出现linux的提示符。
这里明显的是我们已经使用shell权限进入了我们的设备。如果要提权,需要使用su命令。#号,是使用超级用户root登录后的命令行结尾提示符,而$号是使用普通用户登录后的命令行结尾提示符。
如果要退出shell 。使用exit 命令就行,如果是root 下,可能还需要两次退出,如下:
这里需要注意的是,我们使用adb shell 之后,就跟sdb没有太大关系了,后面都是要用linux命令行。
3、adb connect 127.0.0.1:21500
用于连接端口
4、adb pull
将android 中的文件发送到pc
5、adb push
将pc 上的文件发送到android
6、adb install apk
安装应用
7、adb -s name
指定adb命令运行的设备