我发现本文搜索有关C ++模板元编程的链接。我是C ++中安全性和模板的新手,我希望有人可以指出我正确的方向。我没有其他理由感到它激起了我的兴趣,而且我想了解更多。
以下是论文:https://www.cisuc.uc.pt/publication/showfile?fn=1357250736_metaobfv3.pdf
或者只是搜索名称:通过C ++模板元编程实现二进制代码混淆
我似乎无法弄清楚程序员将如何使用它。他们是通过模板创建类型,然后在原始代码中使用这些类型吗?以下是一些使用的代码:
struct uint32 {
unsigned int x_;
uint32(unsigned int x) : x_(x) {}
uint32(const uint32 &oth) : x_(oth.x_) {}
uint32 &operator=(const uint32 &oth) { x_ = oth.x_; return *this; }
operator unsigned int() const { return x_; }
};
static inline uint32 operator+(const uint32 &a, const uint32 &b) {
return uint32(ObfuscatedAdder<unsigned int>::eval(a.x_, b.x_));
}
这是第6页的一小部分。我试图弄清楚程序员如何使用他们的技术创建...让我们说一个算法......然后对它进行模糊处理。
这将是我假设的额外混淆。我怎么会这样说:
unsigned int foo = 5 + 7;
在代码中并使用模板将其混淆为更复杂的身份?
答案 0 :(得分:1)
unsigned int foo = 5 + 7;
不会被混淆,因为它属于constant folding
。并且在编译时将简单地用unsigned int foo = 12;
替换。
该技术对于像。
这样的表达式特别有用uint32 a = 5;
uint32 b = 7;
unsigned int foo = a + b;