【问题标题】:Equivalent terms of LLVM IR for watermarking by renumbering?通过重新编号进行水印的 LLVM IR 的等效术语?
【发布时间】:2017-07-07 21:48:09
【问题描述】:

我想应用一种算法来添加水印,该算法基本上对编程语言的等效术语进行重新排序:

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 的等价术语,这样每个术语都可以替换为其他术语吗?还是只能在机器码级别做这种水印?

【问题讨论】:

    标签: security llvm obfuscation watermark llvm-ir


    【解决方案1】:

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

    【讨论】:

    • 谢谢乔基。什么是“后 RA”?我将如何编写机器指令通行证?这可能使用 LLVM 框架吗?你能给我指出如何做到这一点的方向吗?
    • post-RA 表示在寄存器分配之后。这是文档:llvm.org/docs/…;我建议您在 LLVM 代码库中搜索 MachineFunctionPass 以查看它的多个示例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-28
    • 1970-01-01
    • 2012-05-03
    • 1970-01-01
    相关资源
    最近更新 更多