Всем привет! Запустил небольшой курс, как можно ревёрсить программы, в конце курса дойдём до самых сложных примеров, которые накрыты VMP и множеством других протекторов. Весь курс предназначен на нативные приложения, курс будет для "чайников" в плане ревёрс-инженерии, без знаний C/C++ будет очень тяжело для понимания Ну что же, начнём! МОЯ ТЕМА С РАЗРАБОТКОЙ/КРЯКАМИ НА ЗАКАЗ(КЛИК) МОЯ ТЕМА С РАЗРАБОТКОЙ/КРЯКАМИ НА ЗАКАЗ(КЛИК) МОЯ ТЕМА С РАЗРАБОТКОЙ/КРЯКАМИ НА ЗАКАЗ(КЛИК) Приведение псевдокода в читабельный или как спиздить функционал с другого софта На примере у нас будет Raccoon ******* Предварительный анализ Загружаем билд в ida pro x32 Перед нами такая картина: Жмем f5, чтобы ида декомпилировала в псевдокод Сразу видим много непонятных вещей, строчек и прочее Подробный анализ Открываем самую первую функцию - sub_40100B Подробный анализ Исходя из моих знаний я сразу понял что это Ракун ******* использует механизм скрытого импорта Если мы зайдем в графу Imports, то не увидим там почти что ничего Такой механизм используют для меньшего обнаружения антивирусами Получается функция sub_40100B в динамике подгружает все нужные ей библиотеки, так ее и назовем hidden_import Чтобы что-нибудь переименовать в Иде надо нажать на элемент и нажать на клавиатуре кнопку N Поставим галочку mark as decompiled, чтобы ида пометила этот адрес другим цветом для удобства Но как нам понять, что именно наш экземпляр подгружает? везде используются глобальные переменные и функция sub_40AEC4 Зайдя в нее мы увидим лютый понос Из опыта могу сказать, где есть такой символ ^, значит это функция в 99% это xor шифрование такое шифрование используют для того, чтобы усложнить жизнь реверсерам и антивирусам в статическом анализе Переименовываем эту функцию в xor_decryption В этом уроке я покажу как работать с дебаггером, расшифровки через скрипты тут не будет, все постепенно! Дебажим дебажим Открываем x32dbg, загружаем туда наш файлик Видим самый первый вызов - наша функция скрытого импорта по адресу 40100B, как нам и показывала IDA жмем ctrl G, вводим 40100B, чтобы нас перекинуло на адрес, где начинается эта функция и тут у нас наша функция скрытого импорта вот ты можешь увидеть частые вызовы 0040AEC4, это наш xor, справа от асм инструкций есть строки, это зашифрованные строки, они попадают в функцию расшифровки и получаются расшифрованные строки (наши импортируемые функции и библиотеки), ебать тавтология переходим к функции расшифровки(0040AEC4) с помощью ctrl g ставим точку оставы, нажав на точку слева от адреса, теперь когда мы запустим программу, то каждый выход из функции у нас будет останавливать программу, до того момента, пока мы ее не продолжим, мы так увидим в памяти на что у нас расшифровалось зашифрованное значение Запускаем прогу и видим справа зашифрованное и расшифрованное значение то-есть 5c672b67685b24a6 расшифровалось в inetGetErrorTextW переходим в иду, переименовываем эту переменную в расшифрованное значение и так короче много раз По итогу у нас должно получиться что-то типо такого тут короче на скрине еще и сами строки расшифрованы, но это я сам сделал скриптом, вам еще не надо этого знать, главное, что все названия переменных стали понятны, и вы научились ставить брекпоинты в дебаггере Продолжаем анализ возвращаемся в функцию start и смотрим как у нас преобразился код Продолжаем анализ короче некоторые функции уже тут отревершенные, это я случайно и скрин проебал, где я еще не лазил в них и тут мы видим как уже все становится +- понятнее проверяется, создаётся Mutex, он используется много где, но в данном случае, чтобы не открыть ******* больше одного раза потом видим какую-то херню, куда помещается тоже зашифрованная строка Ида нам сама назвала переменную, к которой присваивается значение функции (lpLibFileName) но если мы попытаемся открыть ее, то нам ида даст ошибочку это косяк иды, просмотрев в асме тоже видим оператор xor смело переименовываем функцию в xor_decryption2 идем дальше, видим еще какую-то херню заходим , видим там тоже что то связанное с расшифровкой, функция тоже не декомпилируется, в асме там есть xor называем функцию xor_decryption3 а функцию, где это все вызывается назовем decrypt_all_data ну и дальше уже можно вести Гайд сколько угодно, заходим в каждую функцию, смотрим что она делает - переименовываем, для удобства Примеры проверка на привилегирированный процесс Примеры парсинг паролей Всем удачи в начинаниях! Всем пока! Предыдущие уроки: [Гайд] Ревёрсинг для чайников #1[By Grizzly] - Форум социальной инженерии zelenka.guru [Гайд] Ревёрсинг для чайников #2[By Grizzly] - Форум социальной инженерии zelenka.guru [Гайд] Ревёрсинг для чайников #3[By Grizzly] - Форум социальной инженерии zelenka.guru [Гайд] Ревёрсинг для чайников #4[By Grizzly] - Форум социальной инженерии zelenka.guru [Гайд] Ревёрсинг для чайников #5[By Grizzly] - Форум социальной инженерии zelenka.guru
Думал что-то интересное будет, мб софт/плагин который анализ улучшает, ну а так дефолт. Я ничего нового не узнал. Смешно, кстати, что кодер *******а использует api getprocaddress, вместо собственной реализации.