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
已有 2 条评论
从佬的 redsock--》到 clash 防火墙抓包
认识了,mitmproxy++ ,
认识了,stackplz(肉丝没有更新完)
认识了,这个目前入门阶段留个脚印,终会用到
uni 折腾后才知道,unicorn的原理,--》a64dbg的原理-》 新人,---需要知道太多
大佬,请教一下,我尝试使用
bpf_program__attach_perf_event(skel->progs.profile, perf_event_fd);
去挂载bpf程序
SEC("perf_event")
int profile(void *ctx) {...}
perf_event_attr参数如下:attr.type = PERF_TYPE_BREAKPOINT; attr.size = sizeof(struct perf_event_attr); attr.config = PERF_COUNT_HW_CPU_CYCLES; attr.bp_type = HW_BREAKPOINT_X; attr.bp_len = HW_BREAKPOINT_LEN_8; attr.bp_addr = 0x7A0D927C64;但是却触发不了bpf里面的程序.
而我使用你的wbstack,却可以.
我看了一下你挂载在kprobe上
{ "id": 357, "type": "kprobe", "name": "kprobe_perf_output_begin_forward", "tag": "8bee6270073595aa", "gpl_compatible": true, "loaded_at": 1728719219, "uid": 0, "orphaned": false, "bytes_xlated": 14184, "jited": true, "bytes_jited": 12508, "bytes_memlock": 16384, "map_ids": [1984,1979,1989,1985,1992,1980,1975,1976,1986,1990,1981,1983,1978,1982 ], "btf_id": 2392 }可以指导一下吗,感谢.