Я пытаюсь отменить десериализацию приложения, и я в основном закончил, но я застрял в этой проблеме.Приложение по какой-либо причине декодирует 4-байтовые числа путем умножения его на ключ кодирования (или ключ декодирования в этом отношении)
int decoded_number = (encode_key * encoded_number);
Это работает для декодирования их номеров, однако меня больше интересуеткодирование чисел, поэтому я могу сериализовать данные.Я попытался кодировать число путем умножения декодированного числа на ключ кодирования
int encoded_number = (encode_key * decoded_number);
Однако, когда я сравниваю его с исходным закодированным числом, оно совершенно другое.Я также пытался закодировать число брутфорсом, и оно работает, но для его создания требуется вечность, что невозможно при сериализации большого числа чисел.
for (int i = INT_MIN; i < INT_MAX; i++){
if (i * encode_key == decoded_number)
return i; /* "i" is the encoded number */
}
На данный момент я понятия не имеючто еще попробовать.Мой код ниже:
#include <iostream>
using namespace std;
int encode_key = -381784151; /* Key I took from the application */
int encoded_numbers[2] = {-810310503, 1520670208}; /* Numbers I took from the app */
int bruteforce(int decoded_number){
for (int i = -2147483648; i < 2147483647; i++){ /* min and max int*/
if (encode_key * i == decoded_number){ /* brute comparison */
return i;
}
}
}
int main()
{
for (int i = 0; i < 2; i++){
int encoded_number = encoded_numbers[i];
int decoded_number = encode_key * encoded_number;
int attempt_encode = encode_key * decoded_number;
int brute_encode = bruteforce(decoded_number);
cout << "STARTING WITH NUMBER" << i+1 << "\n";
cout << "Encoded Number: " << encoded_number << "\n";
cout << "Decoded Number: " << decoded_number << "\n";
cout << "Attempt to Re-Encode (FAIL): " << attempt_encode << "\n";
cout << "Bruteforce Encode (SLOW!): " << brute_encode << "\n\n";
}
return 0;
}
Нажмите здесь, чтобы запустить код в вашем браузере