本节将会介绍一些在Android逆向过程中常用的命令,有些是Linux通用的命令,有些是Android特有的命令(比如adb命令)。
(1)cat命令
功能: 该命令用于在Shell中方便地查看文本文件的内容。
示例:
bullhead:/sdcard/Chap02 # cat 1.txt roysue1
(2)echo和touch命令
功能: touch命令可以创建一个空文件;echo命令通过配合“>”或者“>>”对文件进行写操作,其中“>”为覆盖写操作、“>>”为扩展写操作。
示例:
(3)grep命令
功能: 该命令用于在shell中过滤出符合条件的输出。
示例:
(4)ps命令
功能: 该命令可输出当前设备正在运行的进程。在Android 8之后,ps命令只能打印出当前进程,需要加上-e参数才能打印出全部的进程。
示例:
(5)netstat命令
功能: 该命令输出App连接的IP、端口、协议等网络相关信息,通常使用的参数组合为-alpe。netstat -alpe用于查看所有sockets连接的IP和端口以及相应的进程名和pid,配合grep往往有奇效。
示例:
当前目的进程org.sfjboldyvukzzlpp正在进行https连接,对应的pid为21312。
(6)lsof命令
功能: 该命令可以用于查看对应进程打开的文件。
示例:
可以看到,进程pid为21312,所打开的数据库文件为cache_video.db及其对应的路径。
这里的文件不仅仅指常见的普通文件。在Linux系统中有一种说法叫“万物皆文件”,其实网络中建立的连接也可以叫作文件,因此lsof命令也可以用于与netstat命令相同的操作。
示例:
(7)top命令
功能: 该命令用于查看当前系统运行负载以及对应进程名和一些其他的信息,和之前讲的htop作用一样,只是相对来说htop更加人性化。
adb(Android Debug Bridge,Android调试桥)是一种功能多样的命令行工具,可用于与设备进行通信。adb命令可用于执行各种设备操作(例如安装和调试应用)。
常用的adb命令主要有以下几种。
(1)adb shell dumpsys activity top
功能: 查看当前处于前台的Activity。
示例:
通常,上述命令会与grep命令一同使用,输出很多信息。
(2)adb shell dumpsys package <package-name>
功能: 查看包信息,包括四大组件信息以及MIME等相关信息。
示例:
可以看到,包名为org.sfjboldyvukzzlpp的入口类以及权限等相关信息都列出来了。
(3)adb shell dbinfo <package-name>
功能: 用于查看App使用的数据库信息,包括执行操作的查询语句等信息都会被打印出来。
示例:
与lsof命令打印出来的信息完全一致。
(4)adb shell screencap -p <path>
功能: 用于执行截图操作,并保存到<path>目录下。
(5)adb shell input text <text>
功能: 用于在屏幕选中的输入框内输入文字,可惜不能直接输入中文。
(6)adb shell pm命令
功能: pm命令是Android中packageManager的命令行,是用于管理package的命令,比如通过pm list packages命令可以列出所有安装的APK包名。
示例:
root@VXIDr0ysue:~/Chap02# adb shell pm list packages package:com.google.android.carriersetup package:com.android.cts.priv.ctsshim package:com.google.android.youtube ...
pm install命令用于安装APK文件,只是这里的APK文件不是在主机目录下,而是在Android手机目录下。
示例:
bullhead:/sdcard # ls | grep apk network-debug.apk root@VXIDr0ysue:~/Chap02# adb shell pm install /sdcard/network-debug.apk Success
pm命令还有很多其他用法,比如pm uninstall命令,用于卸载Android上的应用。这里仅以pm list和pm install为例,更多用法留待读者自行探索。
(7)adb shell am命令
功能: am命令是一个重要的调试工具,主要用于启动或停止服务、发送广播、启动Activity等。在逆向过程中,往往在需要以Debug模式启动App时会使用这个命令。
对应命令格式为adb shell am start-activity -D -N <包名>/<类名>。
示例:
此时App就以Debug模式启动了,界面中会显示Waiting For Debugger,如图2-10所示。
am命令就介绍到这里,其他用法请读者自行研究。
图2-10 Debug模式启动App
其实以上所有命令也可以通过执行adb shell进入Android的shell中直接执行,只需要将开始的adb shell去掉就行。以Debug模式启动App为例,其结果是一样的。
另外,还有一些关于主机和Android交互相关的adb命令,比如:
示例:
root@VXIDr0ysue:~/Chap02# adb install ./network-debug.apk Performing Streamed Install Success
示例: