《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帐号,VPN设置信息等。比如保存了一个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

进入到目录。 比如 cd / 就是进入到根目录。

3、cat

查看文本内容,如这里就是查看/data/misc/wifi/wpa_supplicant.conf 文件,这个文件保存的是曾经连接的wifi信息

4、mkdir

新建目录

5、rm -rf

强制递归删除(r 递归,f强制)

6、cp

复制文件

7、mv

移动,重命名文件

8、touch

创建空文件

9、md5

取一个文件的md5,常用与判断文件是否被修改

系统操作命令

1、su

这个命令用来提权,一般使用adb命令连接设备之后都是shell权限,使用su命令之后能提权到root

这里提一句,这里是真机经过root之后的。这种情况较不完全root,就是使用adb shell 先进入到shell权限,后面经过一次提权才能进入到root权限。但是在模拟器中,我们使用adb shell 就能直接使用root 权限,如下截图,这种叫完全root。是有区别的,当然一般情况下不完全root就够用了。

2、grep

3、getprop

4、chmod

这个命令用来提权。比如某个文件没有运行权限,就可以使用这个命令对文件进行提权。比如这里的android_server没有运行权限,我们运行的时候回报permission denied。使用 chmod 777 命令后给到运行权限。就可以正常运行了。

5、ps

查看进程

6、df 

查看系统的分区结构,包括一些空间,大小

这里提到了目录结构,就来整理下android 的目录结构吧,其实跟linux基本上是一样的。

根目录: /,类似于 我们windows 中的根目录(C://。window中我们可以有多个磁盘分区,C盘,D盘等等。每个盘都有自己的根目录。类似我的理解是将linux看成就一个磁盘,只有一个根目录 /)

绝对路径和相对路径: 这里从根目录出发的路径都是绝对路径,.代表的就是当前路径。 .. 代表的是上一层路径

隐藏文件:  以. 开头的文件

可执行文件的运行:   ./android_server

用户组:  Android的用户组有System、root、shell

7、id 

获取当前用户信息

8、ps

查看系统所有进程

9、kill  id

杀进程

最后看看一些常用的adb 指令

同样的。我们需要在pc上完成对android 的控制,很多时候是需要使用到adb的。熟练掌握一些必要的adb命令也是逆向中基础的一步。这里也整理一些常用的出来

1、adb devices

这个指令用来显示当前连接的 设备列表,包括使用usb连接的真机以及运行中的虚拟机。 如果当前连接的有多个设备,在后面使用adb命名的时候是需要指定需要执行命令的设备的。

2、adb shell

这个命令是进入到设备的控制台。如果只有一个设备那么直接adb shell 就够了,但是如果有多个设备,就需要使用-s 参数指定,如下。

adb -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命令运行的设备

8、adb shell dumpsys activity top >C:\aa.txt

这个指令用来输出当前设备位于栈顶的activity信息。这里将输出保存到aa文件中,是为了方便查看。类似的很多指令会有很多打印输出,保存到文件可以让我们更方便查找需要关注的信息

9、 adb forward tcp:23946 tcp:23946

将手机中23946端口转发到本机的23946端口。23946是ida 的默认调试端口。在调试so层时候回用到。 

发布了24 篇原创文章 · 获赞 10 · 访问量 16万+

猜你喜欢

转载自blog.csdn.net/lin___/article/details/103471734