Сейчас на форуме: subword, rtsgreg1989, zds, _MBK_ (+6 невидимых)

 eXeL@B —› Основной форум —› Объясните как паковать ДЛЛ
Посл.ответ Сообщение

Ранг: 10.0 (новичок)
Активность: 0.010
Статус: Участник

Создано: 06 декабря 2007 00:49
· Личное сообщение · #1

Все привет
сабж

Сделал небольшой пакер. Ехе пакует нормально. С ДЛЛ траблы.

Точнее при обычном LoadLibraryA дллка прекрасно загружается и с ней можно работать

Но вот при попытке инжекта ее в другой процесс - увы... Возникает фаулт. Посмотрел под отладчиком.
Фаулт где-то в кернеле происходит, т.е. уже после того, как произошла инициализация...

Все регистры сохраняются, стек не бьется.

Может кто сталкивался с похожими траблами?



Ранг: 260.2 (наставник)
Активность: 0.190
Статус: Участник

Создано: 06 декабря 2007 01:05
· Личное сообщение · #2

LexxCracker
1. релоки обработай..
2. проверяй в длл мэйн на процесс аттач..



Ранг: 10.0 (новичок)
Активность: 0.010
Статус: Участник

Создано: 06 декабря 2007 01:11 · Поправил: LexxCracker
· Личное сообщение · #3

sniperZ
ВОт! Точно! С релоками все гуд. Первым делом обрабатывал.
А на счет DllMain()

Финт в том, что сама процедура DllMain() после распаковки смещается. А система вызывает DllMain() по старому адресу. Отсюда ацес виолэйшн.

Вопрос, можно ли где-то перебить адрес длл-майн, чтобы система вызывала обработчик по новому адресу?



Ранг: 516.1 (!), 39thx
Активность: 0.280
Статус: Участник

Создано: 06 декабря 2007 01:27
· Личное сообщение · #4

не совсем понятно как можно было написать пакер не зная об entrypoint'e




Ранг: 109.2 (ветеран)
Активность: 0.090
Статус: Участник
Cardinal

Создано: 06 декабря 2007 01:34
· Личное сообщение · #5

Av0id
Да там видимо пакер, как на большинстве пенчей висит.

-----
– Почему ты работаешь по ночам ? – Так удобнее... В одну смену с чертями...




Ранг: 10.0 (новичок)
Активность: 0.010
Статус: Участник

Создано: 06 декабря 2007 01:58 · Поправил: LexxCracker
· Личное сообщение · #6

Av0id
Точка входа тут не при чем.
Повторяю - полностью образ в памяти я восстанавливаю, т.е. включае РЕ-заголовок.

Но.
Все последующие вызовы длл-маин идут по старому адресу.

Смотри.

DllMain()<----вызов при LoadLibraryA
После распаковки образа DllMain Сместилась.
Заголовок я так же восстановил. Полностью.
Но следующий вызов DllMain идет обратно по старому адресу, а не по адресу оригинальной процедуры.

При чем такое происходит ТОЛЬКО при инжекте в чужие процессы. При обычной загрузке либа отрабатывает отлично.

Я не пойму в чем трабл просто.

ЗЫ:
tnt17 давай не будем Краклаб форум превращать во второй васм, ок? Там уже форум в дерьме захлебнулся... Сплошной флуд и междуусобные разборки. Полчуить реальный совет там стало невозможно. Не будем превращать в коллектор и краклаб. Хочешь меня унизить - пиши в ПМ.
Все ясно??




Ранг: 109.2 (ветеран)
Активность: 0.090
Статус: Участник
Cardinal

Создано: 06 декабря 2007 02:39 · Поправил: tnt17
· Личное сообщение · #7

LexxCracker
У тебя старая точка входа(EP) заменяется на новую?
Каким образом делаешь инжект либы?
LexxCracker пишет:
Заголовок я так же восстановил. Полностью.

Что значит восстановил заголовок? У тебя же код лоадера вроде как приписывается к оригинальной дллке, у него свой заголовок, которым ты заменяешь оригинальный. Он то(лоадер) должен расшифровать что нужно, настроить релоки для твоей оригинальной длл, выполнить настройки таблицы импорта и просто, передать управление на оригинальную точку входа в дллку. (это в случае простого пакера). Скажи, нахера здесь восстанавливать заголовок оригинальной длл?
LexxCracker пишет:
Все ясно??

Знаешь, не все. Такие вопросы либо в раздел программирования, либо в "новички".
Унизить?! Да низачто в жизни! ;)

-----
– Почему ты работаешь по ночам ? – Так удобнее... В одну смену с чертями...




Ранг: 17.6 (новичок)
Активность: 0.01=0.01
Статус: Участник

Создано: 06 декабря 2007 10:05
· Личное сообщение · #8

LexxCracker
При LoadLibraryA и отсутствии DLL в памяти DLL отрабатывается полностью загрузчиком,
включая и твой пакер-лоадер,и у тебя работает новая DLL Main для твоего процесса.
Часть инфы с "родного первичного" OptionalHeaders, включая точку входа
запоминается в "недрах" ОС. На новый Headers ОС глубоко забить, это твое дело.
ОС не отслеживает изменения в памяти.
Не меняй точку вызова, если не усмеешь по-другому, и будет все ОК.



Ранг: 17.6 (новичок)
Активность: 0.01=0.01
Статус: Участник

Создано: 06 декабря 2007 10:25
· Личное сообщение · #9

LexxCracker
А вообще арбитром у ОС ВСЕГДА выступает image На диске.
Фактически LoadrLibraryX заменяется NTDLL.LdrLoadDLL.
Если покопаться в ней, то можно найти все, в том числе и обращение
к дисковому образу DLL всегда и считыванию инфы о Headers и версии DLL.



Ранг: 66.8 (постоянный)
Активность: 0.030
Статус: Участник

Создано: 06 декабря 2007 11:06 · Поправил: UsAr
· Личное сообщение · #10

EntryPoint надо поправить в списке модулей

ecx <- ImageBase
ebx <- New EntryPoint VA

assume fs:nothing
xor eax,eax
mov eax,fs:[eax].TEB.Peb
mov eax,[eax].PEB.Ldr
lea eax,[eax].PEB_LDR_DATA.InLoadOrderModuleList
@@:

mov eax,[eax].LIST_ENTRY.Flink
cmp ecx,[eax].LDR_MODULE.BaseAddress
jnz @B
mov [eax].LDR_MODULE.EntryPoint,ecx
add [eax].LDR_MODULE.EntryPoint,ebx




Ранг: 163.7 (ветеран)
Активность: 0.070
Статус: Участник

Создано: 06 декабря 2007 11:21 · Поправил: S_T_A_S_
· Личное сообщение · #11

LexxCracker пишет:
можно ли где-то перебить адрес длл-майн, чтобы система вызывала обработчик по новому адресу?

Некоторые правят в PEB_LDR_DATA, но по-моему это ошибка иметь 2 разных энтри

vitokop пишет:
арбитром у ОС ВСЕГДА выступает image На диске

Это не верно. ОС работает с объектом "секция" (MMF) и читает с диска только при подкачке.



Ранг: 10.0 (новичок)
Активность: 0.010
Статус: Участник

Создано: 06 декабря 2007 16:16 · Поправил: LexxCracker
· Личное сообщение · #12

ecx <- ImageBase
ebx <- New EntryPoint VA

assume fs:nothing
xor eax,eax
mov eax,fs:[eax].TEB.Peb
mov eax,[eax].PEB.Ldr
lea eax,[eax].PEB_LDR_DATA.InLoadOrderModuleList
@@:

mov eax,[eax].LIST_ENTRY.Flink
cmp ecx,[eax].LDR_MODULE.BaseAddress
jnz @B
mov [eax].LDR_MODULE.EntryPoint,ecx
add [eax].LDR_MODULE.EntryPoint,ebx



//-------------------------------------------------------------------- ------
Я конечно извиняюсь, но не всех структур нашел описание.
Можнете указать смещения?
Буду очень благодарен.




Ранг: 109.2 (ветеран)
Активность: 0.090
Статус: Участник
Cardinal

Создано: 06 декабря 2007 16:37 · Поправил: tnt17
· Личное сообщение · #13


struct LIST_ENTRY
Flink dd ?
Blink dd ?
ends

struct UNICODE_STRING
Length dw ?
MaximumLength dw ?
Buffer dd ?
ends

struct PEB_LDR_DATA
Length dd ?
Initialized dd ?
SsHandle dd ?
InLoadOrderModuleList LIST_ENTRY ?
InMemoryOrderModuleList LIST_ENTRY ?
InInitializationOrderModuleList LIST_ENTRY ?
EntryInProgress dd ?
ends

struct LDR_MODULE
InLoadOrderModuleList LIST_ENTRY ?
InMemoryOrderModuleList LIST_ENTRY ?
InInitializationOrderModuleList LIST_ENTRY ?
BaseAddress dd ?
EntryPoint dd ?
SizeOfImage dd ?
FullDllName UNICODE_STRING ?
BaseDllName UNICODE_STRING ?
Flags dd ?
LoadCount dw ?
TlsIndex dw ?
HashTableEntry LIST_ENTRY ?
TimeDateStamp dd ?
ends

struct PEB
InheritedAddressSpace db ?
ReadImageFileExecOptions db ?
BeingDebugged db ?
Spare db ?
Mutant dd ?
ImageBaseAddress dd ?
LoaderData dd ?
ProcessParameters dd ?
SubSystemData dd ?
ProcessHeap dd ?
FastPebLock dd ?
FastPebLockRoutine dd ?
FastPebUnlockRoutine dd ?
EnvironmentUpdateCount dd ?
KernelCallbackTable dd ?
SystemReserved dd ?
AtlThunkSListPtr32 dd ?
ends


-----
– Почему ты работаешь по ночам ? – Так удобнее... В одну смену с чертями...




Ранг: 10.0 (новичок)
Активность: 0.010
Статус: Участник

Создано: 06 декабря 2007 17:03
· Личное сообщение · #14

Огромное спасибо Вам! респект!



Ранг: 10.0 (новичок)
Активность: 0.010
Статус: Участник

Создано: 06 декабря 2007 17:58 · Поправил: LexxCracker
· Личное сообщение · #15

ХХХаааа!!!! Заработало!!!!
ЕЩЕ РАЗ ОГРОМНЕЙШИЙ РЕСПЕКТ ВАМ!!!!!

тема закрыта



Ранг: 17.6 (новичок)
Активность: 0.01=0.01
Статус: Участник

Создано: 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 —› Основной форум —› Объясните как паковать ДЛЛ
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати