Я уже некоторое время занимаюсь реверс-инжинирингом функции XXTea. И я заметил различия, но я не уверен, являются ли они различиями в коде. Или сгенерированные компилятором отличия от стандартного XXTea https://pastebin.com/vcPKE1WR - это функция Iтакже есть сборка, но это PowerPC, так что сложнее собрать. У меня даже есть ключи и параметры, используемые для функции, но у меня все еще есть проблемы. И файлы зашифрованы этим. И расшифрованные аналоги. Но не правильная функция для преобразования их между собой.
Я пытался перенести псевдокод непосредственно в тест C ++, который не сработал. Я также попытался перенести различия в стандартную функцию XXTea для C, но это также не сработало.
#define MX(z, y, sum, key, p, e) (((z>>5^y<<2) + (y>>3^z<<4)) ^ ((sum^y) + (key[(((p&3)^e) << 2)] ^ z)))
void btea(uint32_t *v, int n, uint size, uint32_t *key) {
uint64_t y;
uint32_t z, sum;
int64_t roundSizeCalc;
unsigned p, rounds, roundsAndSum, e;
roundSizeCalc = size >> 2;
if (n > 1) { /* Coding Part, Still not modified */
//rounds = 6 + 52 / n;
rounds = 6 + 52 / roundSizeCalc;
sum = 0;
z = v[n - 1];
do {
sum += DELTA;
e = (sum >> 2) & 3;
for (p = 0; p < n - 1; p++) {
y = v[p + 1];
z = v[p] += MX;
}
y = v[0];
z = v[n - 1] += MX;
} while (--rounds);
} else if (n < -1) { /* Decoding Part */
n = -n;
rounds = 6 + 52 / roundSizeCalc;
sum = rounds * DELTA;
y = v[0];
y = (y >> 24) | ((y << 8) & 0x00FF0000) | ((y >> 8) & 0x0000FF00) | (y << 24);
do {
e = (sum >> 2) & 3;
for (p = roundSizeCalc - 1; p > 0; p--) {
//for (p = 0; roundSizeCalc - 1 > p; p++) {
z = v[p];
z = (z >> 24) | ((z << 8) & 0x00FF0000) | ((z >> 8) & 0x0000FF00) | (z << 24);
uint32_t properV = uint32_t(v[p - 1]);
y = v[p] -= MX(z, y, sum, key, p - 1, e);
}
z = v[p - 1];
y = v[0] -= MX(z, y, sum, key, p - 1, e);
sum -= DELTA;
} while (--rounds);
}
}
При передаче правильно зашифрованных данных. Он никогда не расшифровывается должным образом и вместо этого оказывается более испорченным. При необходимости у меня есть как зашифрованный файл, так и расшифрованный аналог из памяти.