用于重新编号水印的LLVM IR的等效术语?

时间:2017-02-18 09:56:43

标签: security llvm obfuscation watermark llvm-ir

我想应用一种水印算法,它基本上重新排序了编程语言的等价术语:

https://books.google.dk/books?id=mig-bH3u0Z0C&pg=PT595&lpg=PT595&dq=obfuscation+renumbering+register&source=bl&ots=b3vMhp-yTq&sig=RERdnDNewRqBi7ZmSNMlsnPy-Hw&hl=da&sa=X&ved=0ahUKEwiLw-zWrpnSAhWEHJoKHXCpAkMQ6AEIGTAA#v=onepage&q=obfuscation%20renumbering%20register&f=false

说,T1, T2,...,Tn是该语言的等效术语,然后水印是f的排列f(Ti) = Tj

在这种情况下,编程语言是LLVM IR,它是一种中间语言。

本书给出了通过应用置换重新编号寄存器的示例。但是,寄存器不在LLVM IR的范围内,因为它们是较低级别的细节?

我一直在考虑LLVM的等效术语,但无法想出一些。越多越好,因为这意味着更灵活的水印程度。

您能想到LLVM IR的等效术语,以便每个术语可以代替其他一些吗?或者只能在机器代码级别进行这样的水印?

1 个答案:

答案 0 :(得分:0)

即使您在IR级别执行此操作(并且您可以通过更改模式),您也不会走远,因为机器指令级别将重新洗牌。你最好写一个(可能是后RA)机器指令级别传递。