ADB
- 查看FocusedActivity(顶部activity)
adb shell dumpsys activity | findstr "mFoc"
adb shell dumpsys activity activities | findstr "cmp="
- 查看activity信息
adb shell dumpsys activity---------------查看ActvityManagerService 所有信息
adb shell dumpsys activity activities----------查看Activity组件信息
adb shell dumpsys activity services-----------查看Service组件信息
adb shell dumpsys activity providers----------产看ContentProvider组件信息
adb shell dumpsys activity broadcasts--------查看BraodcastReceiver信息
adb shell dumpsys activity intents--------------查看Intent信息
adb shell dumpsys activity processes---------查看进程信息
- 安装/卸载 APK
# 安装APK
adb install <apkfile> //比如:adb install baidu.apk
# 指定平台安装APK
adb install --abi armeabi-v7a <apkfile>
# 保留数据和缓存文件,重新安装APK
adb install -r <apkfile> //比如:adb install -r baidu.apk
# 安装apk到sd卡
adb install -s <apkfile> // 比如:adb install -s baidu.apk
# 卸载APK
adb uninstall <package> //比如:adb uninstall com.baidu.search
# 卸载APK但保留数据和缓存文件
adb uninstall -k <package> //比如:adb uninstall -k com.baidu.search
- 带su执行
//带su执行
# 不是所有的机型都适用
adb shell "su -c ./data/local/tmp/frida/frida_server"
# 带su顺序执行多条命令
adb shell "su -c ' cd /data/local/tmp/frida;ls -l'"
- 查看信息(进程/内存/属性)
// 查看信息
# 查看设备cpu和内存占用情况
adb shell top
# 查看占用内存前6的app
adb shell top -m 6
# 刷新一次内存信息,然后返回:(adb shell top --help)
adb shell top -n 1
# 查询各进程内存使用情况
adb shell procrank
# 查看进程列表:
adb shell ps
# 查看指定进程状态:
adb shell ps -x [PID]
# 查看Android系统的属性
adb shell prop
# 查看当前内存占用
adb shell cat /proc/meminfo
- 查看信息(进程/内存/属性)
# 启动应用程序:
adb shell am
-a: 指定action
-D: enable debugging
-N: enable native debugging
eg: adb shell am start -a android.intent.action.CALL -d tel:10086
adb shell am start -a android.intent.action.VIEW -d http://google.com
//打开微信
adb shell am start com.tencent.mm/com.tencent.mm.ui.LauncherUI
//打开支付宝
adb shell am start com.eg.android.AlipayGphone/.AlipayLogin
# 杀死一个进程:
adb shell kill [pid]
//杀死支付宝
adb shell am force-stop com.eg.android.AlipayGphone
- 事件模拟
// 事件模拟
# 点击事件
adb shell input tap 500 500
# home键
adb shell input keyevent 3
# 返回键
adb shell input keyevent 4
# 截图(保存到SDCard)
adb shell /system/bin/screencap -p /sdcard/screenshot.png
# 从SD卡导出到电脑
adb pull /sdcard/screenshot.png /Users/lzy/Desktop
# 录屏
adb shell screenrecord /sdcard/test.mp4
adb pull /sdcard/test.mp4 /Users/dhht/Desktop/test.mp4
# 亮屏
adb shell input keyevent 26
# 上下滑动
adb shell input swipe 700 2000 700 1000
# 左右滑动
adb shell input swipe 100 1000 1000 1000
# 解锁
adb shell input keyevent 82
# 锁定
adb shell input keyevent 26
# 输入密码,并回车:
adb shell input text 123456 && adb shell input keyevent 66
# 屏幕长亮
adb shell svc power stayon true [true|false|usb|ac|wireless]
# 打开wifi/关闭wifi
adb shell svc wifi enable
adb shell svc wifi disable
# 打开蓝牙/关闭蓝牙
adb shell service call bluetooth_manager 6
adb shell service call bluetooth_manager 9
//
# 关机重启
adb reboot
adb shell reboot
adb shell reboot -p
//
# 获取屏幕分辨率
adb shell wm size
adb shell wm density
Frida
//Frida相关使用
# 修改默认端口
./fd_server -l 0.0.0.0:6666
adb forward tcp:27042 tcp:6666
# 查看进程pid
frida-ps -U
# 跟踪native方法
//-i 筛选函数名 -I 指定hook该库所有函数(frida-trace -U -I linker com.lzy.t)
frida-trace -U -i dlopen <PkgName>
# 跟踪native方法(Spawn)
frida-trace -U -i dlopen -f <PkgName>
# 运行时候附加
frida -U <PkgName> -l <ScriptPath>
# Spawn方式启动
frida -U -f <PkgName> -l <ScriptPath> --no-pause
# 附加顶层应用,可以使用lamda表达式
frida -FU --runtime=v8 <ScriptPath>
Objection
- 启动
# 直接Hook
objection -g <packageName> explore
# Spawn方式Hook
objection -g packageName explore --startup-command 'android hooking watch xxx'
- Hook Java
//Hook Java
# Hook Java类(快速定位方法调用)
android hooking watch class com.xxx.xxx
# Hook Java方法
android hooking watch class_method com.xxx.xxx.methodName --dump-args --dump-backtrace --dump-return
# 设置返回值(只支持bool类型)
android hooking set return_value com.xxx.xxx.methodName false
# 列出所有Activity
android hooking list activities
# 获取栈顶Activity/Fragment
android hooking get current_activity
- 启动指定Activity
android intent launch_activity com.xxx.xxx.MainActivity
android intent launch_service com.xxx.xxx.MainService
- 枚举activity/services/receivers/classes/class_methods
android hooking list activities
android hooking list services
android hooking list receivers
android hooking list classes
android hooking list class_methods
- Hook代码快捷生成
//Hook代码快捷生成
# 生成简洁的hook代码
android hooking generate simple com.xiaojianbang.app.MainActivity
# 生成详细的hook代码
android hooking generate simple com.xiaojianbang.app.MainActivity
- Memory
memory list modules //枚举当前进程模块
memory list exports [lib_name] //查看指定模块的导出函数
memory list exports libart.so --json /root/libart.json //将结果保存到json文件中
memory search --string --offsets-only //搜索内存
- Root检测模拟
# 尝试关闭app的root检测
android root disable
# 尝试模拟root环境
android root simulate
- Activity Heap (方法主动调用)
//Activity Heap (方法主动调用)
# 堆内存中搜索指定类的实例, 可以获取该类的实例id
search instances search instances com.xx.xx.class
# 直接调用指定实例下的方法
android heap execute [ins_id] [func_name]
# 自定义frida脚本, 执行实例的方法
android heap execute [ins_id]
- 内存漫游
# 列出内存中所有的类
android hooking list classes
# 在内存中所有已加载的类中搜索包含特定关键词的类
android hooking search classes [search_name]
# 在内存中所有已加载的方法中搜索包含特定关键词的方法
android hooking search methods [search_name]
# 直接生成hook代码
android hooking generate simple [class_name]
- 任务管理器
# 查看任务列表
jobs list
# 关闭任务
jobs kill [task_id]
- 关闭app的ssl校验
android sslpinning disable
- 监控系统剪贴板
# 获取Android剪贴板服务上的句柄并每5秒轮询一次用于数据。 如果发现新数据,与之前的调查不同,则该数据将被转储到屏幕上。
help android clipboard
- 执行命令行
help android shell_exec [command]
Dwarf
# 直接Hook
dwarf -t android 6094
# Spawn方式Hook
dwarf -t android <packageName>
# ios android local
dwarf -t android/ios/local
jnitrace (JNI函数跟踪)
# 基础使用
jnitrace -l libxxx.so <packageName>
# 显示详细的堆栈日志 -b <fuzzy|accurate|none> 默认accurate
jnitrace -b fuzzy -l libnative-lib.so com.lzy.t
# 启动模式 -m <spawn|attach> 默认spawn
jnitrace -m attach -l libnative-lib.so com.lzy.t
# 包含(include)-i <regex> 不包含(exclude)-e <regex>
jnitrace -i NewStringUTF -e GetEnv libnative-lib.so com.lzy.t
# -I 指定函数内的jni调用 -E 排除指定函数内的jni函数打印
jnitrace -I JNI_Onload -E Java_com_lzy_t_MainActivity_test libnative-lib.so com.lzy.t
# -o path/output.json 指定控制台文本保存到本地(注意 / 的使用)
# -p path/to/script.js 指定jnitrace 启动前需要执行的js脚本
# -a path/to/script.js 指定jnitrace 启动后需要执行的js脚本
# --hide-data-用于减少控制台中显示的输出数量。此选项将隐藏显示为十六进制转储或字符串取消引用的其他数据。
# --ignore-env -使用此选项将隐藏应用程序使用JNIEnv结构进行的所有调用。
# --ignore-vm -使用此选项将隐藏应用程序使用JavaVM结构进行的所有调用
IDA调试SO
# 调试模式启动APP
adb shell am start -D -n 包名/类名
# 启动IDA Server
./android_server -p23946 -p参数用来修改端口号(23946是默认端口号)
# 开启端口转发
adb forward tcp:23946 tcp:23946
# 断点三项
Suspend on process entry point
Suspend on thread start/exit
Suspend on library load/
# 调试器连接(DDMS查看端口号)
jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=端口号
AS调试Smali
//AS调试Smali
# apktool反编译apk(d反编译,b回编译)
apktool d xxx.apk
# AS安装插件smalidea
https://bitbucket.org/JesusFreke/smali/downloads/
# 找到进程PID
linux : adb shell ps | grep xxx
windows : adb shell ps | findstr xxx
# 转发控制权到JDWP指定的TCP端口
adb forward tcp:8888 jdwp:xxxx<PID>
# as中配置操作
配置Remote指定端口8888
# 最后Attach
JEB调试Smali
1.apktool修改debuggable
2.apk拖进JEB
3.调试模式启动APK:adb shell am start -N -D com.xxx.xxx/.MainActivity
4.JEB->调试器->开始->附加
------------- 快捷键 -------------
Ctrl+B 设置/移除 断点
Ctrl+R 运行到光标位置
Ctrl+F6 步进
F6 步过
F7 跳出
F8 运行
------------- jdwp -------------
info : Display basic information about the debuggee
libs|modules [name-filter] : Display information about the target modules
resume [tid] : Run or resume the target, a thread, or the default thread (tid 0)
pause : Pause the target
detach : Detach the target (if possible)
kill|terminate : Kill the target (unstable)
threads : List the process threads
thread [tid] : Set or get the default thread
step|stepi : Step "into" one instruction in the default thread
stepo : Step "over" one instruction in the default thread
stepu : Step "up"/"out" (run until return) in the default thread
b|bp [address] : Set or list breakpoints
bc [index] : Clear one or all breakpoints
classes : List the classes loaded by the VM
signature|sig [OPTION]... cid : Information about a specific class
fields [OPTION]... cid : List the fields of a type
methods [OPTION]... cid : List the methods of a type
call|invoke [OPTION]... cid method : invoke a method.
read|get [OPTION]... objectId : Read an object or array.
set [OPTION]... objectId new_value : Set a method variable or parameter as a typed-value
pull remotePath localPath : adb-pull on steroid
get v0:string
网友评论