C++ #define 获取一个字符串

标签 c++ obfuscation xor pre-compilation

我想创建一个非常基本的混淆方法,基本上我只是想xor每个字符串这样调用

printf("%s\n", OBF("Test"));

会生成类似的东西

printf("%s\n", unxor("\x65\x54\x42\x45"));

在这种情况下,我用 1 对字符串进行异或运算

最佳答案

使用现代 C++,您可以在没有任何宏的情况下编写它,如下所示:

#include <iostream>
#include <array>
#include <utility>
#include <cstddef>

constexpr const char key_byte{'1'};

template<::std::size_t VArrayItemsCount, ::std::size_t... Is> constexpr auto
obf_impl
(
    ::std::index_sequence<Is...>
,   char const ( & sz_text )[VArrayItemsCount]
)
-> ::std::array<char, VArrayItemsCount>
{
    return(::std::array<char, VArrayItemsCount>{static_cast<char>(sz_text[Is] ^ key_byte)..., '\0'});
}

template<::std::size_t VArrayItemsCount> constexpr auto
obf
(
    char const ( & sz_text )[VArrayItemsCount]
)
-> ::std::array<char, VArrayItemsCount>
{
    return
    (
        obf_impl<VArrayItemsCount>
        (
            ::std::make_index_sequence<VArrayItemsCount - ::std::size_t{1}>()
        ,   sz_text
        )
    );
}

int main()
{
    constexpr const auto hello{obf("hello")};
    ::std::cout << hello.data() << ::std::endl;
    return 0;
}

Run this code in online compiler

关于C++ #define 获取一个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47079080/

相关文章:

c++ - boost::process::std_out 没有返回,因为它试图打开一个 fifo

c++ - 从数组中存储和读取字符串

C++ 启动失败。找不到二进制文件

c# - 我怎样才能混淆我的 C# 代码,所以它不能那么容易地被混淆?

mysql - 多重异或查询

c++ - 用线程产生旋转效果

android - 生成带混淆的签名 apk 时应用程序崩溃 (NoSuchMethodError)

javascript - javascript混淆对移动浏览器的速度有什么影响?

java - 交换单个字母单词的大小写

c++ - 如何求解异或方程组?