Сейчас на форуме: (+9 невидимых) |
eXeL@B —› Крэки, обсуждения —› снова распаковка длл. |
Посл.ответ | Сообщение |
|
Создано: 17 декабря 2004 03:08 · Личное сообщение · #1 ДЛЛ упакована UPX-ом 0035C894 . 01F0 ADD EAX,ESI 0035C896 . 8903 MOV [DWORD DS:EBX],EAX 0035C898 .^EB E2 JMP SHORT libraryd.0035C87C 0035C89A > 24 0F AND AL,0F 0035C89C . C1E0 10 SHL EAX,10 0035C89F . 66:8B07 MOV AX,[WORD DS:EDI] 0035C8A2 . 83C7 02 ADD EDI,2 0035C8A5 .^EB E2 JMP SHORT libraryd.0035C889 0035C8A7 > 61 POPAD 0035C8A8 >-E9 0F8BFFFF JMP libraryd.003553BC => Здесь ставлю бряк. Потом запускаю *.exe под Olly жму F9 и прерываюсь в ДЛЛ-ке жму F8 и по идее я на OEP. 008353BC 55 PUSH EBP => здесь (OEP?) 008353BD 8BEC MOV EBP,ESP 008353BF 83C4 C4 ADD ESP,-3C 008353C2 B8 24538300 MOV EAX,libraryd.00835324 008353C7 E8 24C6FFFF CALL libraryd.008319F0 008353CC E8 1FC2FFFF CALL libraryd.008315F0 008353D1 8D40 00 LEA EAX,[DWORD DS:EAX] делаю дамп , Imprec говорит оеп не правильный.( по идее 8353BC-400000=4353BC<=RVA OEP) Без восстановления импорта тоже не пашет. ПОДСКАЖИТЕ!! Что я делаю не так. |
|
Создано: 17 декабря 2004 03:34 · Поправил: nice · Личное сообщение · #2 alex111 пишет: по идее 8353BC-400000=4353BC<=RVA OEP 400000 - Что это такое знаешь???? Это ImageBase и он не обязательно = 400000(читай про формат РЕ) Для Длл он может быть каким угодно! в данном случае предполагаю = 800000. alex111 пишет: Без восстановления импорта тоже не пашет. ПОДСКАЖИТЕ!! Что я делаю не так. Без импорта программа это то же самое как авто без движка. Например, идет в твоей программе вывод на экран текста: Hello russian! Обычно это делают с помощью АПИ ф-ии TextOut или MessageBox, эти ф-ии лежат в библиотеках системных: user32.dll, kernel32.dll, gdi32.dll и т.п. программа что бы получить адреса этих АПИ обращается к таблице импорта и вызывает эти ф-ии. Так зачем нам импорт? Для того, что адреса этих ф-ий разные на разных ОС с разными сервис паками и эта табличка даёт нам универсальность и гибкость. Загрузчик её заполняет записывая в неё адреса Запарился писать ----- Подписи - ЗЛО! Нужно убирать! |
|
Создано: 17 декабря 2004 03:47 · Личное сообщение · #3 |
|
Создано: 17 декабря 2004 04:05 · Личное сообщение · #4 |
|
Создано: 17 декабря 2004 04:16 · Личное сообщение · #5 |
|
Создано: 17 декабря 2004 05:42 · Личное сообщение · #6 |
|
Создано: 17 декабря 2004 05:45 · Поправил: nice · Личное сообщение · #7 |
|
Создано: 17 декабря 2004 07:41 · Личное сообщение · #8 Cigan пишет: Запускаешь PETOOLS.... nice пишет: Петулза тут ни при чем!!!! П О В Т О Р Я Ю: длл может грузиться как угодно и ImageBase у неё скачет в памяти!!! nice пишет: Если в Ольке, жмешь alt+e и смотришь перед длл циферки Попробовал, в списке нет той длл-ки!!Там только системные (типа User32 и т.п. |
|
Создано: 17 декабря 2004 07:45 · Личное сообщение · #9 |
|
Создано: 17 декабря 2004 07:57 · Личное сообщение · #10 |
|
Создано: 17 декабря 2004 08:37 · Личное сообщение · #11 Очень древняя статья Dr.Golova, сейчас всё делается намного проще ;) Форум Исследователей Программ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ How to unpack dll manually. ~~~~~~~~~~~~~~~~~~~~~~~~~~~ Small essay by Dr.Golova ~~~~~~~~~~~~~~~~~~~~~~~~ Типа попробовал я распаковать длл, ничего сложного, но подход несколько другой. Я, значить, запаковал wz32.dll (от WinZip) с помощью ASPack 2.1 Все работает. 1) Открываем эту длл в ProcDump (и не надейтесь им побыстрому все распаковать, он длл не поддерживает и все придется делать ручками). Находим адрес точки входа, и открываем ее в hiew. 2) Запоминаем, какой был там байт (у меня был 60h - popad), и пишем вместо него ССh - int3. Я по инерции еще изменил свойство секции .text на Е0000020. Сохраняем файл и выходим. 3) В SoftICE включаем слежение за 3-им прерыванием (i3here on) и запускаем основную программу, т.е. ту, из которой это длл вызывается. Не пройдет и секунды, как мы окажемся в Айсе. 4) Мы на точке входа в длл, там, где вставили CCh. Возвращаемся на 1 шаг назад (r eip eip-1) и восстанавливаем измененную нами инструкцию. Начинаем плавно нажимать на F10 - трассируем. 5) Далее идет до боли знакомый код распаковщика ASPack. В окошко данных выведем адрес таблицы импорта (первым делом надо было на бумажку записать все секции и их свойства). Пока ее нету, после в ней появится какой-то мусор, а вот потом после выполнения 2-х команд repnz movsb (или типа такой), появится правильная таблица импорта (крупные циклы можно перескакивать с помошью бряков). Самое время ее сдампить (pagein d <адрес секции> <размер секции> <имя файла>). А иначе чуть позжее подлый ASPack изгадит таблицу импорта так, что ею сможет пользоваться только винда. Едем дальше... 6) Дошли до конца распаковки (кто не помнит там popad, потом push OEP, потом ret). Запишем OEP! 7) А теперь срежем весь модуль из памяти сразу! Как начальный адрес возмем Image Base (у меня был 10000000h, только помните, что у длл он не фиксированный, но зная точку входа не распаковщик, его не трудно вычислить), а размер - RVA последней секции + ее размер. Дампим - pagein d <имя дампа>. Не экономично (захватили много мусора), но практично. 8) Получили почти рабочую длл, даже заголовок на месте (кто-то заявлял, что он не остается в памяти - это не правда, иначе как ASProtect определяет изменение свойства секции не вызывая ни GetModuleFileName(), ни CreateFileA()). 9) Теперь открываем дамп в ProcDump (dll не видно в окошке открытия файла, надо писать правильное имя). Правим точку входа на ОЕР, всем секциям пишим в PSize пишем размер VSize, а Offset такой же, как и RVA. В Directory пишем RVA и Size для Import Table, взятые из свойств секции .idata. 10) Теперь в любом шестнадцатеричном редакторе вставляем сдампленную секцию .idata на место поврежденной. 11) Для нормализации размера длл прогоняем ее через Rebuild PE в ProcDump. Типа все. Dll распакована. ASPack опять побежден. Бурные апплодисменты, зановес. У меня все прекрасно работало. Секцию .aspack и пустую .data лучше не удалять из кода. Надеюсь, все это понятно и легко. У меня заняло все около 20 мин. (еще раз скажу, что ни разу до сегодняшнего дня я длл не распаковывал). Если будет нужда, могу оформить эту галимотью как статью, только тогда хочу кого-нибудь напрячь написать программу-пустышку и dll к ней. Желательно на асме (чтоб была меньше). Могу и сам, но я очень ленивый, да и кодить совсем не умею Надеюсь, что помог кому-нибудь, и мне тоже хоть раз скажут "спасиба дарагой, да". (c) by Dr.Golova |
|
Создано: 17 декабря 2004 08:57 · Личное сообщение · #12 Вау!! Asterix вот это ответ!! Круто !! [u][/u] Спасибо большое . А если оформишь как статью и выложишь где-нибудь здесь то такие чайники как я тебе все спасибо скажут. А по поводу напряч написать программу пустышку, так есть же готовые. Я где-то здесь скачал Crackme (правда не помню точно где) так там как раз такая фигня юзается. Только не аспак а upx. Всё 13 KB . Если хочешь оставь мыло я скину. |
|
Создано: 17 декабря 2004 09:02 · Личное сообщение · #13 |
eXeL@B —› Крэки, обсуждения —› снова распаковка длл. |