запутывание — C ++ # определение, которое получает строку

Я хочу создать ОЧЕНЬ основной метод запутывания, в основном я просто хочу xor каждая строка так зовет

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

Будет генерировать что-то вроде

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

Я записал в строку 1 в этом случае

0

Решение

Используя современный 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;
}

Запустите этот код в онлайн-компиляторе

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]