adb使用总结

admin 2022年1月6日01:10:00安全博客评论12 views5822字阅读19分24秒阅读模式

adb使用

adb连接

adb connect ip:5555
adb devices
adb -s device-id shell  //指定某个设备(插充电设备或USB网络时)
// 查看网络状态
adb shell netstat

// 通过 tcp/ip 连接,默认端口 5555
adb connect host:port

// 转发套接字连接
adb forward local remote

adb 截图发送到当前用户目录下

adb exec-out screencap -p > 1.png

adb文件导出/导入

从电脑上复制文件到设备

// 把 a.png 从电脑上拷贝到设备sd卡上
adb push ~/a.png /mnt/sdcard/

// 把 a.png 从电脑上拷贝到设备sd卡上并重命名为 b.png
adb push ~/a.png /mnt/sdcard/b.png

// 把 pic目录下所有文件从电脑上拷贝到设备sd卡上
adb push ~/pic/ /mnt/sdcard/

从设备复制文件到电脑

// 把 a.png 从设备sd卡上拷贝到电脑上
adb pull /mnt/sdcard/a.png ~/

// 把 a.png 从设备sd卡上拷贝到电脑上并命名为b.png
adb pull /mnt/sdcard/a.png ~/b.png

// 把pics目录下所有文件从设备sd卡上拷贝到电脑上
adb pull /mnt/sdcard/pics/ ~/pics/

一些基本命令

// 列出sd卡根目录下所有文件
adb shell ls /sdcard/

// 定位到 /sdcard/目录
adb shell cd /sdcard/

// 删除某文件
// -f 强制删除文件不需要确认
// -r 递归删除文件夹内文件
// -i 删除文件前需要确认
adb shell rm /sdcard/1.txt

// 创建目录
adb shell mkdir /sdcard/temp/
// 指定 -p 递归创建目录
adb shell mkdir -p  /sdcard/temp/test/abc/hello/

// 创建文件
adb shell touch /sdcard/1.txt

// 显示当前所在目录
adb shell pwd

// 拷贝文件1.txt到test目录
adb shell cp /sdcard/1.txt /sdcard/test/

// 移动文件,移动同一目录下文件相当于重命名文件
adb shell mv /sdcard/1.txt /sdcard/2.text

adb修改手机代理

全局代理

设置代理:
adb shell settings put global http_proxy 代理IP地址:端口号
如:
adb shell settings put global http_proxy 192.168.137.97:8888

移除代理:
adb shell settings delete global http_proxy
adb shell settings delete global global_http_proxy_host
adb shell settings delete global global_http_proxy_port

证书安装

手机获取Root权限后,直接把Base64文本格式的根证书文件复制到etc/security/cacerts文件夹里,然后到设置(Settings) – 安全(Security) – 受信任的凭据(Trusted credentials)里面,此时你要安装的根证书应该会显示已经安装好了。这样安装之后根证书是作为系统证书使用的,而不是按照方法一安装方式的用户证书。

.cer(非.crt)格式文件

http://wiki.cacert.org/FAQ/ImportRootCert

a. openssl x509 -inform DER -subject_hash_old -in CA_Name.cer    | head -1
得到类似字符串:9a5ba575
b.cat CA_Name.cer > 9a5ba575.0
c.openssl x509 -inform DER -text -in CA_Name.cer -out /dev/null >> 9a5ba575.0
d.放入/system/ca-certificates/files/
实际测试,可能会报错,报错后不管格式,DER 换成PEM 试试
编译到:/system/etc/security/cacerts/
e:烧录重启验证

http://wiki.cacert.org/FAQ/ImportRootCert

Fiddler默认是cer证书,如何转为pem呢?指令如下:

openssl x509 -inform der -in abc.cer -out out.pem

https://segmentfault.com/a/1190000017035564
解决只读文件无法写入的问题:

adb remount
adb shell
chmod 777 system

第三方apk

AndroidProxySetter工具可以帮助我们使用adb命令可以快速进行wifi代理的设置和清除
GitHub地址:https://github.com/jpkrause/AndroidProxySetter

下好apk后,安装到手机

adb install proxy-setter-debug-0.2.1.apk

设置代理:

adb shell am start -n tk.elevenk.proxysetter/.MainActivity -e host 代理IP地址 -e port 端口号 -e ssid WIFI名称 -e reset-wifi true -e key WIFI密码

如:

adb shell am start -n tk.elevenk.proxysetter/.MainActivity -e host 127.0.0.1 -e port 8888 -e ssid YOUR-WIFI-NAME -e reset-wifi true -e key YOUR-WIFI-PASSWORD

查看进程

// 列出进程列表 ,其中包含进程的 pid 等信息
adb shell ps

// 杀死指定pid的进程
adb shell kill pid

// 查看指定进程信息
adb shell ps -x pid 

apk管理

adb导出(手机apk到电脑)

1、adb shell pm list package
打印出来所有安装到手机上的APP包名
adb shell pm list package com.huawei.   //查找包含com.huawei的包

2、adb shell pm path com.xxx.xxx
找出安装后的包名应用的apk所在位置

3、adb pull path_apk  out_apk
path_apk为apk在手机上的目录,即2中的apk在手机中的目录,out_apk为导出apk的目标路径。

4、通过adb命令查看Android手机已安装应用的版本号versionCode和versionName
adb shell dumpsys package  [PackageName] | findstr versionCode
adb shell dumpsys package  [PackageName] | findstr versionName

日志输出

// 查看指定 tag 日志
adb logcat -s tag

// 清除log缓存
adb logcat -c

启动activity

// 启动应用
// -n 指定包名/包名+启动类的类名 ,启动类的类名必须是完整路径
adb shell am start -n package/package-activity

// 停止应用
adb shell am force-stop package

// 启动 service
adb shell am startservice [options] <INTENT>
举例:adb shell am startservice -a com.lt.test.action.ONESERVICE
举例:adb shell am startservice -n com.lt.test/.MyService

// 发送广播
adb shell am broadcast [options] <INTENT>
// 发送一个广播去关闭一个activity
adb shell am broadcast -a "action_finish" 
// 恢复出厂设置的方法,会清除内存所有内容
adb shell am broadcast -a android.intent.action.MASTER_CLEAR
adb shell am broadcast -n com.lt.test/.MyBroadcast

// 列举出所有包含<INTENT>的package
adb shell pm list packages [options] <INTENT>
adb shell pm list packages com.lt

管理安装包

adb shell pm
安装应用程序
adb install xxx.apk

// 覆盖安装(保留缓存和数据)
adb install -r xxx.apk

// 安装apk到sd卡
adb install -s xxx.apk

卸载应用程序
adb uninstall package

// 卸载时保留数据和缓存目录
adb uninstall -k package

列出设备上的所有权限
adb shell pm list permissions

列出设备上安装的所有app的包名
adb shell pm list packages

// 列出指定包名对应的apk路径
adb shell pm path com.android.search

// 清空指定包名对应的应用的数据和缓存文件,开发时很有用
adb shell pm clear com.android.search

列出设备上的所有feature
adb shell pm list features

adb安装证书

adb shell am start -n com.android.certinstaller/.CertInstallerMain -a android.intent.action.VIEW -t application/x-x509-ca-cert file:///sdcard/cacert.cer

参考:https://www.jianshu.com/p/f547b05a5335

查看系统信息

// 获取系统属性,可以获取到一大堆关于系统信息(键值对形式)
adb shell getprop 

// 获取系统属性并过滤出包含version的信息
adb shell getprop | grep version

查看 cpu 和 内存使用情况
// 每隔一秒会刷新一次 cpu 和 内存情况
adb shell top

// 查看占用内存前3的应用
adb shell top -m 3

// 刷新3次内存信息(不指定-n参数的话默认每秒会刷新1次数据):
adb shell top -n 3

// 查看占用内存前3的应用,刷新1次
adb shell top -m 3 -n 1

查看系统当前 cpu 使用情况
adb shell cat /proc/cpuinfo
adb shell cat /proc/stat

查看系统当前内存使用情况
adb shell cat /proc/meminfo

查看指定包名应用内存使用情况,各项信息具体说明
adb shell dumpsys meminfo package

查看 service
adb shell service list
adb shell cat /system/build.prop

电池相关
// 查看电量管理信息,其中可以知道当前那个应用持有WAKE_LOCK锁
adb shell dumpsys power

// 查看电池用量情况
adb shell dumpsys battery

// 查看电池使用日志
adb shell dumpsys batterystats
图形界面日志分析参考google提供的工具 https://github.com/google/battery-historian

查看当前activity

logcat | grep ActivityManager
adb shell dumpsys activity activities
adb shell dumpsys activity activities | findstr "应用包名" 

过滤字符串忽略大小写 : adb logcat | grep -i wifi ;

过滤固定字符串 : 只要命令行出现的日志都可以过滤, 不管是不是标签;

-- 命令 : adb logcat | grep Wifi ;

APP安全测试

组件安全

activity 是否可以被ddos

adb shell am start -S -n 包名/Activity名

BroadcastReceiver拒绝服务

查看AndroidManifest.xml是否存在Receiver导出
利用adb命令启动被导出的Receiver

adb shell am broadcast –n pachage_name/receiver_name

service拒绝服务

查看AndroidManifest.xml是否存在Service导出
利用adb命令启动被导出的Service

adb shell am start service –n pachage_name/service_name

Provider目录遍历

查看Provider是否导出
查看反编译代码,检查OpenFile函数中是否包含路径校验逻辑

Ptrace注入

检测方法一:

推送inject和libpayload.so到手机/data/local/tmp中
为inject添加执行权限
执行注入命令inject 进程名 /data/local/tmp/libpayload.so 任意字符串
adb logcat -s 360Inject抓取日志分析是否注入成功

检测方法二:

frida-trace -U -i "recv*"  -f 包名
cat /proc/PID/maps |grep frida

SharedPreferences明文保存敏感信息

跳转到app的数据目录

查看所有xml文件,检测是否包含敏感数据

adb shell
cd /data/data/package_name/hared_prefs/

查看所有xml文件,检测是否包含敏感数据

SQLite明文保存敏感信息

跳转到app的database目录

查看所有db文件,检测是否包含敏感数据

adb shell
cd /data/data/package_name/database/

查看所有db文件,检测是否包含敏感数据

log敏感信息检测

使用logcat命令抓取log

分析日志中是否包含敏感信息

shell adb logcat > logfile.log

分析日志中是否包含敏感信息

FROM :ol4three.com | Author:ol4three

特别标注: 本站(CN-SEC.COM)所有文章仅供技术研究,若将其信息做其他用途,由用户承担全部法律及连带责任,本站不承担任何法律及连带责任,请遵守中华人民共和国安全法.
  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年1月6日01:10:00
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                  adb使用总结 http://cn-sec.com/archives/721213.html

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: