Сейчас на форуме: (+7 невидимых) |
![]() |
eXeL@B —› Протекторы —› EXECryptor (Туторы, скрипты, плагины, ...) |
<< 1 ... 9 . 10 . 11 . 12 . 13 . 14 . 15 . 16 . 17 . 18 . 19 ... 25 . 26 . >> |
Посл.ответ | Сообщение |
|
Создано: 20 сентября 2006 18:14 · Поправил: Модератор · Личное сообщение · #1 |
|
Создано: 30 сентября 2007 09:25 · Личное сообщение · #2 |
|
Создано: 30 сентября 2007 09:36 · Личное сообщение · #3 vnekrilov пишет: Возникает вопрос, почему возникают проблемы с запуском распакованных программ на машинах с другими версиями OS? гы, у меня пока таких проблем не возникало. хотя были, но привится занулением указателя на GetModuleHandleA. причины описал kioresk. ![]() r99 пишет: vnekrilov пишет: Естественно, что когда имеется восстановленная таблица IAT, программа не будет использовать код пакера, связанного с определением реальных адресов APIs, отнюдь ога... ![]() ![]() |
|
Создано: 30 сентября 2007 16:03 · Поправил: kioresk · Личное сообщение · #4 vnekrilov, при упаковке программы криптор вычисляет хеш для каждой функции, основанный на ее имени и небольшом преобразовании и сохраняет заксоренные названия используемых библиотек. Часть импорта защищается статически: 1. хеши сохраняются в определенном месте в полиморфе 2. при запуске криптор проходит по импорту 3. вычисляет адреса функций для ячеек c индексами (0, 1, 2 и т.д.) 4. заменяет вычисленными адресами эти ячейки А часть — динамически: 1. вместо адресов вставляются переходники в полиморф, где вычисляется адрес функции 2. хеши сохраняются в коде, т.е. присваиваются определенному регистру 2а. переходник заменяется адресом и в будущем адрес функции заново не вычисляется 2б. переходник не заменяется В общих чертах адрес функции вычисляется следующим образом: 1. Расксориваем имя библиотеки 2. Проверяем загружена ли она (GetModuleHandle) 3. Если нет, то загружаем ее (LoadLibrary) 4. Переходим по адресу библиотеки в памяти 5. Идем в директорию экспорта 6. Получаем адрес где хранятся названия функций 7. Берем имя 1-й функцию, вычисляем хеш 8. Сравниваем с сохраненным по определенному адресу хешем 9. Если не совпали, то переходим к следующей функции и т.д. пока не совпадут По поводу работы дампа, ты рассматриваешь импорт программы и забываешь, что у криптора еще и свой импорт есть, который после инициализации естественно не будет работать на других машинах/системах. Как пример — GetModuleHandle как раз относится к внутреннему импорту. Домашнее задание Посмотреть как криптор работает с ординалами. ![]() ![]() |
|
Создано: 30 сентября 2007 16:27 · Личное сообщение · #5 |
|
Создано: 30 сентября 2007 16:31 · Личное сообщение · #6 kioresk пишет: Посмотреть как криптор работает с ординалами. GetProcAddress, т.к. криптор не умеет работать с ординалами ![]() Хотя в принципе можно реализовать и самостоятельную их обработку перечислением. ----- "Пусть видят, что мы не шутим. Стволы для понта, ножи для дела" Lock, Stock & Two Smoking Barrels ![]() |
|
Создано: 30 сентября 2007 16:48 · Поправил: pavka · Личное сообщение · #7 kioresk Удивительно у тебя ловко получаеться персказываешь тутор Пекила, а вроде как твои мысли и все как в первый раз это слышат ;) Из тутора И так как же устроен враппер? На самом деле врапперов здесь 3. При вызове API враппер проверяет есть ли у него указатель на нужную DLL, если нет, то он пытается получить его посредством функции GetModuleHandleA. Если функция вернула 0, то вызывается LoadLibraryA. Затем из этой DLL враппер получает название первой функции и из нее получает хэш. Далее он сравнивает хэш с тем, который необходимо получить и если не равны, то берет название следующей функции, и т.д. После того как хэш получен враппер вычисляет адрес этой функции и затем переходит на нее. Является дополнением к первому. Автор криптора не дурак и понимает что такой вызов функций приведет к диким тормозам и продажи криптора резко упадут. Поэтому часть врапперов после вычисления адреса АПИ шифруют этот адрес и помещают во внутреннюю IAT. Затем при повторном вызове функции враппер проверяет есть ли уже адрес и если есть, то расшифровывает его и вызывает функцию. Этот враппер самый простой. Он один в один как первый враппер, но после вычисления адреса АПИ он не шифрует ее, а пропатчивает адрес враппера в ИАТ адресом АПИ функции, при повторном вызове функции враппер уже не вызывается........... ![]() |
|
Создано: 30 сентября 2007 17:36 · Личное сообщение · #8 |
|
Создано: 30 сентября 2007 18:10 · Личное сообщение · #9 kioresk пишет: По поводу работы дампа, ты рассматриваешь импорт программы и забываешь, что у криптора еще и свой импорт есть, Действительно, у криптора имеется свой импорт в виде API ExitProcess, GetModuleHandleA, GetProcAddress, LoadLibraryA и MessageBoxA. Эти API находятся во второй секции, созданной криптором после секции .rsrc. Эти API нужны для работы пакера при прохождении на OEP. Как правило, после распаковки программ, я записываю импорт на его родное место, в секцию .idata, и удаляю последние две секции криптора, в том числе и ту, которая содержит внутренний импорт. После их удаления, программа запускается как обычная неупакованная программа. Здесь пока я не могу удалить первую секцию криптора, которая расположена сраэу после секции .rsrc. На нее идет масса переадресаций из кода программы. Сейчас я разбираюсь с эмуляцией инструкций, которые украл пакер, и перенес их в эту секцию. Вроде бы я нашел некоторые закономерности, но они еще нуждается в серьезной проверке. После такой доработки дампа распакованной программы, внутренний импорт криптора больше не используется, а используется родная таблица IAT, которая выполняется без каких-либо переадресовок. Поэтому у меня и возник вопрос, который я задал выше. ![]() |
|
Создано: 30 сентября 2007 18:45 · Личное сообщение · #10 |
|
Создано: 30 сентября 2007 19:03 · Личное сообщение · #11 sniperz, нет, LoadLibrary относится к внутреннему импорту криптора и вычисляется по аналогичному принципу. Только занулять надо не ячейку, которая хранит адрес GetModuleHandle, а место где хранится указатель на эту ячейку. Smon, За выполненное ДЗ — пять. ![]() Хотя зря так быстро раскрыл стратегическую тайну, и так исследованием сабжа почти никто не занимается. vnekrilov, Кроме этих функций криптор еще кучу функций использует, которые как раз и относятся к его внутреннему импорту (например, GlobalAlloc, GlobalHandle, _lopen, и т.д.). Просто они не открыто хранятся, а разбросаны по секции криптора и сдвинуты (shr по-моему) на различные значения, плюс адреса начала библиотек, по которым криптор вычисляет эти функции. Если, к примеру, в дампе проинициализирован адрес библиотеки и он запускается на другой ОС, то при вычислении адреса функции произойдет ошибка. Тоже самое когда адрес какой-то внутренней функции проинициализирован. Если разбором полиморфа заинтересовался, то посмотри для начала (если еще не успел) статью softworm'а «EXECryptor 2.2.66 VM incomplete analysis» (http://bbs.pediy.com/showthread.php?t=17763). ![]() |
|
Создано: 30 сентября 2007 19:32 · Поправил: vnekrilov · Личное сообщение · #12 kioresk пишет: Кроме этих функций криптор еще кучу функций использует, которые как раз и относятся к его внутреннему импорту (например, GlobalAlloc, GlobalHandle, _lopen, и т.д.). Я распаковал программу PrevedSMS, в которой удалил две последние секции, а таблицу IAT записал по ее родному месту (эту программу я взял для туториала по распаковке ExeCryptor v2.3.9). Она интересна тем, что здесь использована разнообразная защита. Уже написано две части (поиск OEP, восстановление IAT и удаление лишних секций). Осталось написать две части - работа программы на разных OS, и анализ полиморфного кода. В основу анализа полиморфного кода заложена запись криптором в свою секцию основных данных, которые необходимы для обеспечения дальнейшей работы программы. Этот код оказался весьма стандартным, и повторяется при выполнении каждой украденной инструкции. Это, по моему мнению, дает возможность восстановить украденный код в нормальном виде. Но это - пока мое предварительное мнение. Так вот, при запуске этого дампа, я не обнаружил вызов API из оставшейся секции пакера. Все API вызываются только из секции кода. А вопрос этот я задал потому, что боюсь, что что-то пропустил. И, естественно, хочу подстраховаться при завершении написания туториала. ![]() |
|
Создано: 30 сентября 2007 22:05 · Поправил: sniperZ · Личное сообщение · #13 |
|
Создано: 30 сентября 2007 22:16 · Личное сообщение · #14 vnekrilov, Сделай, к примеру, на Дельфи болванку и накрой полиморфом определенную процедуру. Потом защити ее несколько раз, меняя уровень виртуализации (0, 10, 20 и т.д.). Пройдись по коду в этих вариантах и сравни как трансформируется оригинальный код. Иначе у тебя будет неполное представление о структуре полиморфа и используемых паттернах. ![]() |
|
Создано: 30 сентября 2007 23:54 · Личное сообщение · #15 Других инструкций,кроме опкод прыжка,обращений в иат,в дельфовых вроде нет. В этом дампе можно смело всё крошить ![]() ![]() Оставшиеся вызовы в секции криптора,кажись касаются условий регистрации,мну на их полиморф поклал ![]() ![]() Единственно,чего не разобрал(из-за наличия плуга Дероко:s1 ![]() //Вообще с утилей RCI,намного легче стало реверсить криптор. //А сабжик действительно интересный материал для статьи. ----- Чтобы юзер в нэте не делал,его всё равно жалко.. ![]() |
|
Создано: 01 октября 2007 00:03 · Личное сообщение · #16 |
|
Создано: 01 октября 2007 00:24 · Личное сообщение · #17 |
|
Создано: 01 октября 2007 01:11 · Личное сообщение · #18 //Пока помидорами не закидали,каюсь ![]() Сборка не моя,базовой была от Hacnho. Мну покилял,на свой взгляд чо не нужно ![]() ![]() //На последних версиях криптора,хайдить обязательно,пока только HideToolz-ом. ----- Чтобы юзер в нэте не делал,его всё равно жалко.. ![]() |
|
Создано: 01 октября 2007 07:50 · Личное сообщение · #19 sniperZ пишет: я пытался разбирать морф криптора. очень геморно и тяжело. имхо овчинка не стоит свеч... Согласен, что овчинка не стоит свеч, поскольку эта секция практически не мешает. Но все-таки интересно... Bronco пишет: //Вообще с утилей RCI,намного легче стало реверсить криптор. Утилита RSI - очень неплохая для работы. За эту утилиту - ему большой респект. Bronco пишет: На последних версиях криптора,хайдить обязательно,пока только HideToolz-ом. Кстати, при распаковке PrevedSMS, с использованием доработки Olly от Hacnho, можно HideToolz не использовать. В доработанном коде отладчика уже предусотрено скрытие Olly. Но HideToolz не помешает. А настройку плагинов bronco проделал замечательную. Ему за это - большой респект. ![]() |
|
Создано: 01 октября 2007 10:16 · Личное сообщение · #20 MilitaryMan пишет: Господа, ничего не могу поделать вот с этой прогой: --> Link <-- пытался использовать и туторы разные, но успехов не добился. Может кто помочь в ломке ее, родной? ога, у меня тоже не получается заставить работать дамп. данные такие: OEP=00436483 IAT_STAR=0044C000 IAT_END=0044C378 треды сыпятся кучей. пытался в треды писать retn, а в WFSO 0 пихать. один хер вылетает. ![]() |
|
Создано: 01 октября 2007 18:55 · Поправил: Rainbow · Личное сообщение · #21 kioresk пишет: RSI, http://www.dandan.us/Tools/dir=PACK/Protectors/EXECryptor/ http://www.dandan.us/Tools/dir=PACK/Protectors/EXECryptor/ — EXECryptor 1.5.3 — EXECryptor 2.0.34 — EXECryptor 2.1.1 — EXECryptor 2.1.4 — EXECryptor 2.1.6 — EXECryptor 2.1.9 — EXECryptor 2.1.15 — EXECryptor 2.1.17 — EXECryptor 2.1.20 — EXECryptor 2.1.21 — EXECryptor 2.2.5.1 — EXECryptor 2.2.6.Cr — EXECryptor 2.2.6 — EXECryptor 2.3.0 — EXECryptor 2.3.4 — EXECryptor 2.3.7 — EXECryptor 2.3.9 — EXECryptor 2.4.rc1.b2 А ключика от версии 2.3.9 у тебя нигде не завалялось? ![]() ![]() |
|
Создано: 01 октября 2007 20:39 · Личное сообщение · #22 |
|
Создано: 02 октября 2007 01:26 · Личное сообщение · #23 |
|
Создано: 02 октября 2007 03:04 · Личное сообщение · #24 sniperZ пишет: ключики тока у реганых юзерах, а на паблике тока 2.2.6... Хм... Я так понял ты про ту что в разделе файлов тут лежит?. Я его когда-то качал и он у меня с ошибкой вылетал когда протектить нажимал... Ща попробую ещё разок слить, только мне кажется всё это безрезультатно... Поэтому посвежей версию попростл. ![]() |
|
Создано: 02 октября 2007 09:50 · Личное сообщение · #25 |
|
Создано: 02 октября 2007 14:01 · Личное сообщение · #26 |
|
Создано: 02 октября 2007 14:03 · Личное сообщение · #27 |
|
Создано: 02 октября 2007 14:07 · Личное сообщение · #28 |
|
Создано: 02 октября 2007 16:05 · Личное сообщение · #29 |
|
Создано: 02 октября 2007 20:25 · Личное сообщение · #30 |
|
Создано: 02 октября 2007 21:36 · Личное сообщение · #31 |
<< 1 ... 9 . 10 . 11 . 12 . 13 . 14 . 15 . 16 . 17 . 18 . 19 ... 25 . 26 . >> |
![]() |
eXeL@B —› Протекторы —› EXECryptor (Туторы, скрипты, плагины, ...) |