代码补丁点分析与反制-笔记
来源:互联网 发布:java api百度云盘 编辑:程序博客网 时间:2024/04/28 00:13
这是一篇笔记来自于我对论文的阅读:
《二进制比较与反二进制比较 ——对抗1day和0day》
代码相似度比较方法:
目的是获取漏洞所在点,研究某种类型壳程序的共同点。
- 通过符号文件区分函数,在此基础上进行计算校验值,不同级别使用不同的项目组合:寄存器,块地址,操作数,opcode指令等等。
- 节点数,边界数以及调用数作为特征生成签名。
- 基于函数call graph的同构比较。
- 基于同构,指令图形的同形匹配。
- 可执行文件的比较。
- 忽略内存地址和立即数
- 克服顺序依赖:判断指令间依赖关系,后按升序排列。互相依赖的指令为此原有顺序。用来防止优化指令序列带来的烦恼。
- 减少哈希碰撞:短的基本块或删除或与下个基本块关联。
- ……
反二进制比较
给用户安装补丁以抵御攻击争取更多时间。
- 改变符号:对函数名称的改变将使众多依赖符号的比较工具失效。
- 扰乱指令顺序
- 扰乱CFG:类似Bindiff工具依赖于每个函数的CFG签名。增加假的节点,边界或者调用来改变CFG,可以完全破坏CFG签名。eg:增加从来不会我执行的分支。也会影响同构分析。
- proxy调用:破坏CG,类如:call xxx外面包上一层空函数。当然可以在其中增加无用代码来避免反编译工具对空函数的识别。
- 调用不返回:本来是jz A,现在改成 call B {add esp,4 jzA}从来不返回的调用来破坏CFG达到阻碍基本块的分析。
- 共享基本块:类似于优化代码,此外当这个基本块有返回指令时,将会使得匹配非常困难。
- 同一个函数使用多个头:要使假的入口更难识别,构造基本块去调用假入口是个好主意。
以上的部分措施对代码的混淆并不会造成性能下降或者调试困难。用来隐藏补丁所在点的战斗不会停歇,拭目以待吧。
2016年10月14日星期五 1:56
1 0
- 代码补丁点分析与反制-笔记
- LLVM中的栈映射与补丁点
- Surf特征点检测与匹配代码分析
- Harris角点检测原理分析与代码解读
- Surf特征点检测与匹配代码分析
- 代码补丁
- Lucene原理与代码分析解读笔记
- 代码点与代码单元
- 代码点与代码单元
- 代码单元与代码点
- AM-Notebook 6.3 注册KEY分析 与内存补丁:
- Android热补丁原理简单分析与问题思考
- 《linux内核设计与实现》Chapter20补丁、风格、社区(笔记)
- 《python数据分析与挖掘实战》笔记-3.1代码问题
- 《python数据分析与挖掘实战》笔记-3.1代码问题
- 《代码虚拟与自动化分析》1-3章笔记
- 数据结构与算法分析笔记与总结(java实现)--链表问题面试笔试注意点
- Mahout笔记--代码分析
- 嵌入式按键驱动,支持短按、长按、双击(中断方式)
- hdu5544 - Ba Gua Zhen 按位贪心+xor性质
- Unity生成.assets
- javascript中的 事件的绑定 2
- 【搞事情】 学习如何写一个网页上的交互游戏 【计划篇】
- 代码补丁点分析与反制-笔记
- xmppconnection的login方法时报错
- javascript 鼠标拖拽盒子--基础功能版
- 实现TextView跑马灯效果
- C++静态库与动态库
- MDZZ
- 使用cocos2d-x c++ Android静态库
- qfs集群安装之二 chunk server安装
- Leetcode-95. Unique Binary Search Trees II