root与adb

root

root就是指linux内核中的最高权限,与linux下完全同
我们所说的越狱或者ROOT,就是把su安装到手机里面 /system/bin目录下,并把它的权限设置为4755,那么某些程序需要ROOT权限的时候,就可以通过su切换到ROOT身份,然后去执行
adb需要root,但是adb没有root权限
无法一般获取原因:
su负责获取root权限;但是该程序位于/system/bin下。android为了安全去掉了linux这个命令。而想要将su拷贝到Android手机底层命令的执行目录(/system/bin)下并赋予执行权限。但是这里有一个问题,拷贝到系统目录下的操作,和在系统目录下更改权限的操作,只有root权限才可以做这个操作。这就是一个死锁。

因此。需要漏洞。系统漏洞
计划于linux系统熟实后解决rop,看漏洞战争与安卓那本漏洞书进入漏洞研究。

有俩方案:

  1. 系统漏洞方案
    主旨思想是查找系统漏洞,让本身具有root权限的进程执行打开root权限的操作。
  2. 重烧eng boot.img方案
    Android版本有user版本和eng版本的区别,其中eng版本可以用于开发调试,所以本身可以开启root权限。通过重烧eng boot.img版本来获取root权限。

adb

https://www.jianshu.com/p/3bacaeab06b2

  1. adb devices 获取手机设备序列号和连接状态
  2. adb get-serialno 获得设备序列号
  3. 如果有多个模拟器或者Android设备同时连接上adb,那么可以通过命令来选择指定的目标设备。在执行adb命令时 在一般命令前再加入 –s <序列号>即可。adb -s XXXX shell(命令)
  4. 只有一个设备时命令任意执行
  5. adb shell为进入shell模式
  6. adb install APK路径 安装apk
    adb install -r APK路径 保留数据和缓存文件,重新安装APK
    adb install -s APK路径 安装apk到sd卡
    adb root 以root权限重启adb服务
  7. adb tcpip 5555让设备在 5555 端口监听 TCP/IP 连接
  8. adb connect device-ip-address 通过ip adb
  9. aadb pull sdcard/pull.txt d:\导出
  10. adb push d:\push.txt sdcard/导入
  11. adb forward tcp:主机端口 tcp:androd端口 转发主机端口到android端口

原理

1)adb client(客户端)
client是运行在PC端的,该组件发送命令,可以通过发出adb命令从命令行终端调用客户端。每当我们发起一个adb命令的时候,就会开启一个client程序。当然,当我们开启DDMS或者ADT的时候,也会自动创建client。当我们开启一个client的时候,它首先会去检测后台是否已经有一个server程序在运行着,否则会开启一个adb-server进程。所有的client都是通过5037端口与adb-server进行通信的。

2)adb daemon(adbd后台程序)
Daemon,该组件作为一个后台进程运行在模拟器/真实Android设备中,在设备上运行命令。daemon使用端口的范围是5554-5585,每个模拟器/设备连接到PC端时,总会开启这样一个后台进程,并且为其分配了两个连续的端口,比如:
Emulator1, console: 5554
Emulator1, adb: 5555
因为每个设备都分一组两个端口,所以adb连接手机的最大数量为16。
端口的作用,在这两个端口中,其中偶数端口是用于server与设备进行交互的,可以让server直接从设备中读取数据,而奇数端口是用来与设备的adbd进行连接通信的。

3)adb server(服务器)
Server,该组件管理客户端和后台程序之间的通信,作为一个后台的程序运行在PC端。当一个server开启的时候,会自动绑定并且监听5037端口,接收client通过该端口发送过来的命令。同时server还会对5555-5585间的奇数端口进行扫描,进行对已连接设备的定位。