Як декодувати зашифрований через wrap код pl

При наявності деякої інформації зробити це виявилося до смішного просто, незважаючи на те, що я витратив на свій online unwrap багато часу.

Для початку скажу, що мова йде про Oracle 10-12 версії, тобто відповідно до цієї темою, на початку коду має бути

CREATE OR REPLACE FUNCTION SomeFunc wrapped
a000000
ab
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
8
1a2 12c
Sh + 9JFcaiH9SAzc5qQFSernIHO0wgwHIAMvWfHQCmPFekSaibNtEdebgxQw6NfSIfaN / fPXe
vp2rEQ4m / PpCkpt + nUhL8VCTHFl1bwAki0M9JMH420KT50MU8AC4oHph5jyJiRgDZj2ea5Lp
.

можете не намагатися декодувати наведене вище, це сміття для прикладу. Можете витягти будь-який необхідний код за допомогою цього.

Далі, спускаємося до рядка 1a2 12c. У найпростішому випадку беремо друге число 12с, що в перекладі в 10-ю систему числення дорівнює 300 і є довжиною рядка, яку необхідно взяти для декодування. Зверніть увагу, що це довжина рядка з урахуванням переносів рядків, яких в декодіруемой рядку бути не повинно, а всіх рядках необхідно робити trim! Я мало не здався, поки знайшов цю гидоту. Алгоритм простий, беремо наступну за "1a2 12c" рядок, якщо її довжина менше 300 (в нашому випадку), то додаємо до неї наступну за нею рядок і т.д. поки не отримаємо необхідну довжину рядка, не забуваючи, що кожна додається рядок у нас довше на один символ розриву рядків.

У підсумку виходить довга рядок, очевидно, що зашифрована в Base64. Відповідно, треба її декодувати назад Base64-> UTF-8.

Виходить досить цікавий сміття, який ми усічений до 20го символу, відсікаючи інформацію SHA-1, і отримуємо рядок, яку треба перекодувати відповідно до таблиці підстановки, замінюючи одні символи на символи в таблиці. Я її знайшов у відкритому доступі, відповідно, ніщо не завадить це ж зробити і вам.

Після цього залишається розпакувати рядок через ZIP (я скористався звичайним zlib_decompress) і вуа-ля, отримали чистий вихідний код.

При декодуванні використовувався дуже цікавий і, на жаль, занедбаний блог.