
这是《【软件与系统安全】笔记与期末复习》系列中的一篇
攻击者: 位于终端,对终端计算资源有最高控制权限
攻击对象:安装在受控终端上的软件程序
攻击目的: 获悉、篡改软件的内部逻辑

目标:阻止对软件实施非授权的逆向分析
核心方法: 语义保留的程序变换
借鉴密码学算法的安全模型。目标:可证明安全性


然而,“虚拟黑盒”式的混淆器真的可以实现吗?
研究结论: 不可能
核心因素: 程序执行与Oracle访问有着本质区别
代码混淆的实际能力
较强的构造方法:基于3SAT问题 通过3SAT证明支配集是NPC问题 | 骑士的个人主页 (samjjx.github.io)

方法:
单向函数

利用分析技术弱点


利用神经网络



胎记”的实际含义
软件胎记的广义安全价值
构造形式分类
静态构造举例:基于JAVA的栈行为模式
动态构造1:基于执行路
动态构造2:基于程序内的系统调用
不懂呀
目标:在软件中嵌入用于标识其版权归属的秘密信息
软件水印的应用形式
软件水印的形式分类
静态构造举例:基本块重排序

静态构造举例:寄存器占用重分配

传统动态构造1:基于动态生成的图对象

传统动态构造2:基于执行路径上的分支行为

传统动态构造3:基于多线程的同步

传统动态构造的问题1:
一个特别的设计:基于抽象解释的水印


改进动态构造1:利用返回导向编程



改进动态构造2:利用代码混淆


传统动态构造的问题2:

改进动态构造3:利用神经网络

软件水印仍然存在的不足之处
目标:
意义: 阻止对软件的破解
方法:
内省自检(introspection)

Oblivious Hashing 未察觉的哈希

新场景:对抗app重打包