【问题标题】:What is the difficulty/advantage to obfuscate a multi-thread program?混淆多线程程序的困难/优势是什么?
【发布时间】:2014-01-18 21:07:40
【问题描述】:
据我所知,有几种混淆策略被广泛使用(或至少在学术上有所描述),例如:
-
复杂的控制流程
- 插入伪造的控制流
- 控制流扁平化
- 跳转分支函数
- 数组别名中的不透明值
-
不透明的谓词
- 来自指针别名的不透明谓词
-
动态混淆
- 自修改状态机
- 代码作为关键材料
从他们在介绍这些混淆方式时给出的例子来看,多线程程序并没有被提及。
所以我想知道这些策略在多线程程序中是否可行(甚至可行,但不是很实用)?
【问题讨论】:
标签:
multithreading
obfuscation
deobfuscation
【解决方案1】:
为什么它们不适用?
混淆基本上试图使分析变得困难。我想您可以添加更多基于多线程的技术,以利用其已经难以理解的性质:
* obfuscated synchronization, esp. conditional or multiple waits
* bogus fork/joins
* things that look like data races
就难度而言:一旦您知道自己想要做什么,并且您拥有操纵源代码的良好机制,混淆就相对容易了。 (后者是困难的部分,而不是前者)。