论坛首页 AI安全讨论区 阅读主题

[原创] LTV-taint

246 浏览 5 回复
#1 楼主 2026-06-01 21:09:12
本来做污点是想减少llm 手动检索的心智负担的,没想到进化这么快,1m上下文感觉干搜也够了-[x] 重构后端cli,分离搜索逻辑和参数处理
-[x] 修改trace格式,适配污点分析
-[o] 正向/反向污点
-[ ] polars 进行指令频率分析,找计算指令密集处定位vm
-[ ] 切分基本块,重建cfg,分析流程循环
-[ ] 接入rizin增强功能
-[ ] 污点提供mcp
-[ ] gui重构优化使用类似csv的格式结构: 绝对地址;so 偏移;机器码;指令;寄存器操作;regs_read;mem.base_index_disp;mem_access_info;regs_write;func_call(可选);可视化字符(可选);实际上只要处理成结构化的数据就可以,方便解析,方便处理效果图, 由于对ltv的底层进行了大量优化,追踪十多层带分叉大概2秒不到; trace文件大几百mb,不到1G 把指令划分为几种类型
mem2reg, reg2mem, mem2mem, reg2reg主要问题是 不同类型寄存器以及不同长度内存读写怎么对齐传递路径正向污点同理规则稍微不同,但大体还是复用代码很明显 只要find_prev "st__6f1c451790_" 就能定位到上一条语句ld__6cf0159028_8 如果目标是x8 (寄存器2) 则q0=0x0x0100000001000000e061f2cb6c000000 的值实际上来自 两个 w 一个 x 寄存器, 4+4+8
这种情况会比较复杂;如果遇到交叉覆写的情况就头大了;可以自己思考下解决办法很简答,没啥说的直接继续追 rw__.*8=0x188 就可以了要根据上一次搜索的实际内存范围来决定;比如实际目标内存是 6cf0157880:8 那就是reg1,如果是 6cf0157888:8 那就追reg2搜 rw__.*reg_num=reg_value一般情况是进行计算简单,也不用考虑计算过程,直接无脑追就行,搜rw__.*0=0x6f5c29c5c8。记录下来后面拿求解器分析在此分支,深度优先搜索,但要限制层数一般是通过memcpy函数进行的,TODO原型是在010上做的,但果然还是自己可控的环境更好
010脚本自动分析trace6d2d694db0;51db0;d10203ff;sub;sp, sp, #0x80;rr__sp=0x6cf0157aa0;;;rw__sp=0x6cf0157a20;

---
来源: 看雪论坛
原文链接: https://bbs.kanxue.com/thread-290183.htm
#2 2026-06-01 21:09:12
study
#3 2026-06-01 21:09:12
支持一下
#4 2026-06-01 21:09:12
状态机回溯问题太多了,转到trace-ui的预分析,def-use路线了
#5 2026-06-01 21:09:12
Android 17的定位按钮功能确实是个不错的创新,既解决了用户对定位权限的敏感问题,又让开发者有了更灵活的实现方式。通过按钮形式,用户可以更直观地控制位置权限,这种设计既提升了用户体验,也增强了
#6 2026-06-01 21:09:12
感谢分享

请登录后参与讨论

立即登录 注册账号