Синхронизированный рандом

Так как добрый день писать тут нельзя, он автоматически удаляется за ненадобностью, сразу приступлю к сути вопроса. Есть шаблонный класс ксора указателей, который сохраняет оригинальный адрес указателя и возвращает его с помощью операции ксора. Есть способы усложнить обход этой меры защиты от реверс инженерии и есть вещи способные заставить реверсера выстрелить себе в голову при попытке анализа. Суть в том, что у меня есть 150 зашифрованных таким образом указателей и мне нужно для каждого из них сгенерировать рандомное число, которое должно быть синхронизировано в генерации ключей и в функции Xor. Нужно сгенерировать 150 случайных чисел во время компиляции и использовать их для генерации ключей и функции Xor. Еще раз, хочу обратить внимание на то, что при генерации ключей и функции Xor, числа должны быть одинаковые, функция ксор вызывается в почти каждой строке кода моей программы. Код класса и генерации ключей ниже:

template< typename T>
class C_DynamicXorPtr
{
public:
    uint64_t m_XorKey_0;
    uint64_t m_XorKey_1;

    __forceinline T& Xor( )
    {
        return *reinterpret_cast< T* >( ( m_XorKey_0 ^ m_XorKey_1 ) - рандомное_число_сгенерированное_при_компиляции );
    }
};

Создание ключей:

template< typename T >
VOID CreateXorPtr( C_DynamicXorPtr< T >* pXorPtr, void* pOriginalPtr )
{
    pXorPtr->m_XorKey_0 = RandomHash( );
    pXorPtr->m_XorKey_1 = ( pXorPtr->m_XorKey_0 ^ ( ( uint64_t )( pOriginalPtr ) + рандомное_число_сгенерированное_при_компиляции_) );
}

Ответы (0 шт):