Сейчас на форуме: subword, rtsgreg1989, zds, _MBK_ (+6 невидимых) |
eXeL@B —› Основной форум —› Объясните как паковать ДЛЛ |
Посл.ответ | Сообщение |
|
Создано: 06 декабря 2007 00:49 · Личное сообщение · #1 Все привет сабж Сделал небольшой пакер. Ехе пакует нормально. С ДЛЛ траблы. Точнее при обычном LoadLibraryA дллка прекрасно загружается и с ней можно работать Но вот при попытке инжекта ее в другой процесс - увы... Возникает фаулт. Посмотрел под отладчиком. Фаулт где-то в кернеле происходит, т.е. уже после того, как произошла инициализация... Все регистры сохраняются, стек не бьется. Может кто сталкивался с похожими траблами? |
|
Создано: 06 декабря 2007 01:05 · Личное сообщение · #2 |
|
Создано: 06 декабря 2007 01:11 · Поправил: LexxCracker · Личное сообщение · #3 sniperZ ВОт! Точно! С релоками все гуд. Первым делом обрабатывал. А на счет DllMain() Финт в том, что сама процедура DllMain() после распаковки смещается. А система вызывает DllMain() по старому адресу. Отсюда ацес виолэйшн. Вопрос, можно ли где-то перебить адрес длл-майн, чтобы система вызывала обработчик по новому адресу? |
|
Создано: 06 декабря 2007 01:27 · Личное сообщение · #4 |
|
Создано: 06 декабря 2007 01:34 · Личное сообщение · #5 |
|
Создано: 06 декабря 2007 01:58 · Поправил: LexxCracker · Личное сообщение · #6 Av0id Точка входа тут не при чем. Повторяю - полностью образ в памяти я восстанавливаю, т.е. включае РЕ-заголовок. Но. Все последующие вызовы длл-маин идут по старому адресу. Смотри. DllMain()<----вызов при LoadLibraryA После распаковки образа DllMain Сместилась. Заголовок я так же восстановил. Полностью. Но следующий вызов DllMain идет обратно по старому адресу, а не по адресу оригинальной процедуры. При чем такое происходит ТОЛЬКО при инжекте в чужие процессы. При обычной загрузке либа отрабатывает отлично. Я не пойму в чем трабл просто. ЗЫ: tnt17 давай не будем Краклаб форум превращать во второй васм, ок? Там уже форум в дерьме захлебнулся... Сплошной флуд и междуусобные разборки. Полчуить реальный совет там стало невозможно. Не будем превращать в коллектор и краклаб. Хочешь меня унизить - пиши в ПМ. Все ясно?? |
|
Создано: 06 декабря 2007 02:39 · Поправил: tnt17 · Личное сообщение · #7 LexxCracker У тебя старая точка входа(EP) заменяется на новую? Каким образом делаешь инжект либы? LexxCracker пишет: Заголовок я так же восстановил. Полностью. Что значит восстановил заголовок? У тебя же код лоадера вроде как приписывается к оригинальной дллке, у него свой заголовок, которым ты заменяешь оригинальный. Он то(лоадер) должен расшифровать что нужно, настроить релоки для твоей оригинальной длл, выполнить настройки таблицы импорта и просто, передать управление на оригинальную точку входа в дллку. (это в случае простого пакера). Скажи, нахера здесь восстанавливать заголовок оригинальной длл? LexxCracker пишет: Все ясно?? Знаешь, не все. Такие вопросы либо в раздел программирования, либо в "новички". Унизить?! Да низачто в жизни! ;) ----- – Почему ты работаешь по ночам ? – Так удобнее... В одну смену с чертями... |
|
Создано: 06 декабря 2007 10:05 · Личное сообщение · #8 LexxCracker При LoadLibraryA и отсутствии DLL в памяти DLL отрабатывается полностью загрузчиком, включая и твой пакер-лоадер,и у тебя работает новая DLL Main для твоего процесса. Часть инфы с "родного первичного" OptionalHeaders, включая точку входа запоминается в "недрах" ОС. На новый Headers ОС глубоко забить, это твое дело. ОС не отслеживает изменения в памяти. Не меняй точку вызова, если не усмеешь по-другому, и будет все ОК. |
|
Создано: 06 декабря 2007 10:25 · Личное сообщение · #9 |
|
Создано: 06 декабря 2007 11:06 · Поправил: UsAr · Личное сообщение · #10 EntryPoint надо поправить в списке модулей
|
|
Создано: 06 декабря 2007 11:21 · Поправил: S_T_A_S_ · Личное сообщение · #11 LexxCracker пишет: можно ли где-то перебить адрес длл-майн, чтобы система вызывала обработчик по новому адресу? Некоторые правят в PEB_LDR_DATA, но по-моему это ошибка иметь 2 разных энтри vitokop пишет: арбитром у ОС ВСЕГДА выступает image На диске Это не верно. ОС работает с объектом "секция" (MMF) и читает с диска только при подкачке. |
|
Создано: 06 декабря 2007 16:16 · Поправил: LexxCracker · Личное сообщение · #12 ecx <- ImageBase ebx <- New EntryPoint VA assume fs:nothing xor eax,eax
//-------------------------------------------------------------------- ------ Я конечно извиняюсь, но не всех структур нашел описание. Можнете указать смещения? Буду очень благодарен. |
|
Создано: 06 декабря 2007 16:37 · Поправил: tnt17 · Личное сообщение · #13
----- – Почему ты работаешь по ночам ? – Так удобнее... В одну смену с чертями... |
|
Создано: 06 декабря 2007 17:03 · Личное сообщение · #14 |
|
Создано: 06 декабря 2007 17:58 · Поправил: LexxCracker · Личное сообщение · #15 |
|
Создано: 06 декабря 2007 20:11 · Личное сообщение · #16 LexxCracker Высылаю свой старый PEB-TEB файл. TEB при загрузке DLL ОС будет всегда содержать данные Headers с диска. Для jстальных процессов, неявно подключающих DLL В TEB процесса (PEB) будут скопиролваны данные из PEB image DLLLexxCracker 521b_06.12.2007_CRACKLAB.rU.tgz - UnPebTeb.rar |
eXeL@B —› Основной форум —› Объясните как паковать ДЛЛ |