Синхронизированный рандом
Так как добрый день писать тут нельзя, он автоматически удаляется за ненадобностью, сразу приступлю к сути вопроса. Есть шаблонный класс ксора указателей, который сохраняет оригинальный адрес указателя и возвращает его с помощью операции ксора. Есть способы усложнить обход этой меры защиты от реверс инженерии и есть вещи способные заставить реверсера выстрелить себе в голову при попытке анализа. Суть в том, что у меня есть 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 ) + рандомное_число_сгенерированное_при_компиляции_) );
}