wbstack / watch breakpoint stack
wbstack/watch breakpoint stack/stackplz plus
基于eBPF实现硬件断点,支持栈回溯与上下文读取
需要 5.10+ 的 arm64 内核,如果不读取上下文,则要求内核至少开启CONFIG_HAVE_HW_BREAKPOINT
选项
执行命令前确保目标进程已经在运行,必须通过-p/--pid指定进程号
需要将软件放在/data/local/tmp
下使用,整体用法与stackplz类似:
小姿势:如果追踪的进程会fork出新进程,不妨增加-u/--uid选项
V3命令演示
v3版本支持了多个断点(最多6个),用法与原有uprobe hook命令类似,区别在于需要设置断点类型
如果要设置动态库,那么通过-l
选项指定,将尝试从对应的进程查找动态库base
此版本简化了原先的命令设置,不再使用--brk选项
./wbstack_arm64 -p `pidof com.sfx.ebpf` -l libnative-lib.so -w 0xf3a4:x -w 0x2888e:r[ptr,ptr:pc]
./wbstack_arm64 -p `pidof com.sfx.ebpf` -l libnative-lib.so -w 0xf3a4:x[str,ptr,buf:32:x0] -w 0x2888e:r --color --dumphex --reg pc
./wbstack_arm64 -p `pidof com.sfx.ebpf` -l libnative-lib.so -w 0xf3a4:x --kill SIGSTOP
./wbstack_arm64 -p `pidof com.sfx.ebpf` -w 0x73f7d123a4:x --kill SIGSTOP --stack
./wbstack_arm64 -p `pidof com.sfx.ebpf` -w 0x73f7d123a4:x[ptr] --stack --mstack
V2命令演示
./wbstack_arm64 -p `pidof com.sfx.ebpf` --brk 0x6dd9d563a4:x --stack
需要在命中硬件断点时读取上下文,则通过-w
设定读取参数类型:
./wbstack_arm64 -p `pidof com.sfx.ebpf` --brk 0x6dd9d563a4:x -w 0x0[str,ptr,buf:32:x0] --color --dumphex
支持 偏移 + 动态库 的形式指定硬断地址:
./wbstack_arm64 -p `pidof com.sfx.ebpf` --brk 0xF3A4:x --brk-lib libnative-lib.so -w 0x0[str,ptr,buf:32:x0] --color --dumphex --stack
支持在命中硬件断点时给进程发送信号,v2版本需要额外加上-w 0x0[ptr](如果是SIGSTOP,请按c回车恢复进程运行):
./wbstack_arm64 -p `pidof com.sfx.ebpf` --brk 0xF3A4:x --brk-lib libnative-lib.so -w 0x0[str,ptr,buf:32:x0] --color --dumphex --stack --jstack --kill SIGSTOP
下读取断点,并获取参数信息:
./wbstack_arm64 -p `pidof com.sfx.ebpf` --brk 0x2888E:r --brk-lib libnative-lib.so -w 0x0[ptr,ptr,ptr] --stack --kill SIGSTOP --brk-len 1
只有一条评论 (QwQ)
从佬的 redsock--》到 clash 防火墙抓包
认识了,mitmproxy++ ,
认识了,stackplz(肉丝没有更新完)
认识了,这个目前入门阶段留个脚印,终会用到
uni 折腾后才知道,unicorn的原理,--》a64dbg的原理-》 新人,---需要知道太多