Reverse donkey
chacha20
强烈推荐各位朋友们隔两天做一次这个瑜伽,无论你是床不舒服导致睡眠差,还是常年久坐,都特别好使。不用瑜伽垫,在床上直接做
Encryption at Rest with SQLAlchemy - miguelgrinberg.com
https://blog.miguelgrinberg.com/post/encryption-at-rest-with-sqlalchemy
https://blog.miguelgrinberg.com/post/encryption-at-rest-with-sqlalchemy
毕业即失业。未来十年,将近 1.7 亿毕业生,50% 的失业率,8500 万失业人口,如何给这个群体提供价值,这是巨大的商机。 source
抹茶弟弟教我用 github.com/marin-m/vmlinux-to-elf.git ,好用,除了生成的 elf vaddr 有点小偏差,像是 PR 的好机会(
但是若是逆向 jitted bpf 就不行了,/boot/vmlinuz 不含 bpf prog,所以还是要手动 gdb dump memory + import symbols + import vmlinux.h 猴戏。但是逆向效果非常差,对照着源码 rename retype 都要麻,比如:
1. 72L 的这个栈变量要肉眼追溯到 66L 知道是 skb->cb[1] 然后对照源码才能知道业务变量名是 src_sec_id
2. 71L 的
3. 84L 更是重量级,就算有符号表知道这是 call trie_lookup_elem,想零背景知道这是在查哪个 bpf map 根本不可能。我标记 76L 的变量是 src_ip,再加上我正好在做相关工作非常熟悉这个数据结构,通过 77L-82L 的栈变量设置认出了这是 ipcache_key 结构体,才知道这是 ipcahe_map lookup。没有这层知识根本不可能快速了解这是什么业务逻辑。
感觉还不如用好 bpf prog annotation + bpf map btf 更有价值,盯着这堆玩意 debug 实在逆天,比我最近玩的 NFS14 警车 interceptor 任务还脑溢血
但是若是逆向 jitted bpf 就不行了,/boot/vmlinuz 不含 bpf prog,所以还是要手动 gdb dump memory + import symbols + import vmlinux.h 猴戏。但是逆向效果非常差,对照着源码 rename retype 都要麻,比如:
1. 72L 的这个栈变量要肉眼追溯到 66L 知道是 skb->cb[1] 然后对照源码才能知道业务变量名是 src_sec_id
2. 71L 的
skb->cb + 0x28 < skb_data + 0x22 需要有背景知识 __sk_buff->data_end 在 verifier 会被 jit 到 sk_buff->cb[5],然后还要口算一下 skb_data + 0x22 是偏移 sizeof(ethhdr) + sizeof(iphdr),才能理解这其实就是 skb->data_end < ip4 的指针安全性检查3. 84L 更是重量级,就算有符号表知道这是 call trie_lookup_elem,想零背景知道这是在查哪个 bpf map 根本不可能。我标记 76L 的变量是 src_ip,再加上我正好在做相关工作非常熟悉这个数据结构,通过 77L-82L 的栈变量设置认出了这是 ipcache_key 结构体,才知道这是 ipcahe_map lookup。没有这层知识根本不可能快速了解这是什么业务逻辑。
感觉还不如用好 bpf prog annotation + bpf map btf 更有价值,盯着这堆玩意 debug 实在逆天,比我最近玩的 NFS14 警车 interceptor 任务还脑溢血
最后一天倒计时超时后: