Сейчас на форуме: yashechka (+5 невидимых) |
eXeL@B —› Крэки, обсуждения —› Распаковка AsPack 2.1 |
Посл.ответ | Сообщение |
|
Создано: 15 апреля 2005 21:32 · Личное сообщение · #1 Не могу распаковать прогу WebTransporter 3.30. PeId говорит AsPack 2.1. Останавливаюсь как обычно 011A14EB 0BC9 OR ECX,ECX 011A14ED 8985 3B3E4400 MOV DWORD PTR SS:[EBP+443E3B],EAX 011A14F3 61 POPAD 011A14F4 75 08 JNZ SHORT WebTrans.011A14FE 011A14F6 B8 01000000 MOV EAX,1 011A14FB C2 0C00 RETN 0C 011A14FE 68 5C875A00 PUSH WebTrans.005A875C <=здесь 011A1503 C3 RETN <= типа на ОЕП Жму F7 2 раза попадаю на 005A875C 55 PUSH EBP <= Типа ОЕП 005A875D 8BEC MOV EBP,ESP 005A875F B9 06000000 MOV ECX,6 005A8764 6A 00 /PUSH 0 005A8766 6A 00 |PUSH 0 005A8768 49 |DEC ECX Дамплю, восстанавливаю импорт в ImpRec в оеп пишу 1а875с он в ответ говорит что оеп не верный и ни чего не находит. Вопрос: Кто знает в чём проблема? |
|
Создано: 15 апреля 2005 21:37 · Личное сообщение · #2 |
|
Создано: 15 апреля 2005 21:37 · Личное сообщение · #3 |
|
Создано: 15 апреля 2005 21:41 · Личное сообщение · #4 |
|
Создано: 15 апреля 2005 21:41 · Личное сообщение · #5 |
|
Создано: 15 апреля 2005 21:51 · Личное сообщение · #6 |
|
Создано: 15 апреля 2005 22:03 · Личное сообщение · #7 |
|
Создано: 15 апреля 2005 22:12 · Личное сообщение · #8 |
|
Создано: 15 апреля 2005 22:15 · Личное сообщение · #9 |
|
Создано: 15 апреля 2005 22:23 · Личное сообщение · #10 alex111 пишет: Плз поподробней! Мля, читай статьи, статью МozgС в частности. В поле OEP в ImpRec'e вводим 82C2C, жмем IAT Autosearch и видим радостную табличку с заголовком Found Something! Жмем Get Imports! Однако, что такое? В списке импортируемых dll и использующихся из них функций, мы видим всего одну строчку, напротив которой написано NO. Это значит, что что-то не то. Видим, что размер таблицы адресов импорта (поле Size) на этот раз всего 1C, но такой маленькой таблица импорта быть не может. Обычно размер таблицы адресов импорта составляет от 200h до 1000h. Нажав по плюсику слева от этой строки, в конце которой написано "NO", мы видим, что не определено ни одной функции. А обычно в раскрывающемся списке каждая строка содержит в себе название какой-либо функции. Мы окончательно убеждаемся, что адрес таблицы импорта и ее размер определены импреком неверно! Ну не беда, будем искать таблицу импорта сами! Я обычно в подобных случаях нахожу адрес таблицы импорта одним из трех способов. В процессе написания статьи я посоветовался с несколькими новичками, и они помогли мне выбрать на их взгляд более простой способ. Его я вам сейчас и опишу. Итак, чтобы найти адрес начала таблицы импорта, давайте сначала порассуждаем. Мы знаем, что таблица импорта находится в программе, и при запуске программы она заполняется адресами используемых функций. Если сдампить запущенную программу, то и таблица импорта сохранится на диск внутри сдампленного файла. Теперь следите за мыслью ВНИМАТЕЛЬНО, обдумывая каждое мое предложение. В таблице импорта находятся адреса импортируемых функций, так? Есть функции, которые используются в каждой программе, так? Адрес одной из таких часто используемых функций тоже окажется в таблице импорта, правильно? В нашем дампе (dumped.exe) где-то должна быть таблица импорта, заполненная адресами используемых функций, так? А значит и адрес одной из часто используемых функций будет в этой таблице импорта, т.е. внутри нашего дампа, ведь так? Что если мы возьмем и посмотрим адрес одной из часто используемых Windows API функций и попробуем найти этот адрес в дампе!? Ведь если мы его найдем, то мы сможем узнать примерное начало таблицы импорта, ведь этот адрес должен лежать внутри этой таблицы! Сейчас все рассмотрим на примере. Тут нет ничего сложного. Значит так, сперва нам надо выбрать какую-нибудь часто встречающуюся API функцию. Функция GetModuleHandleA встречается в 99%+ программ для Windows. Давайте узнаем адрес этой функции в системе. ВНИМАНИЕ, этот адрес может быть у всех разным. Для того, чтобы узнать адрес функции GetModuleHandleA в софтайсе наберем команду "exp GetModuleHandleA" и в ответ увидим следующее: KERNEL32 001B:77E79F93 GetModuleHandleA Это говорит о том, что адрес функции GetModuleHandleA - 77E79F93. У вас этот адрес может быть другим (У меня Windows XP Professional, без сервис-паков). Теперь нам нужно найти этот адрес в дампе (dumped.exe). Воспользуемся для этого одним из Hex-редакторов. Я использовал HexWorkshop, чего и вам советую. Открываем файл в hex-редакторе и делаем поиск шестнадцатеричного значения (в HexWorkshop'e жмем F3 и выбираем Type -> Hex Values). Внимание! В строке поиска вы НЕ должны прямо вписывать адрес функции GetModuleHandleA! Этот адрес нужно вписывать в обратном порядке по байту. Т.е. я буду вписывать 939FE777. Если у вас адрес этой функции равен например 78123456, то вы в строке поиска пишите 56341278. В общем написали и жмем ОК для начала поиска. Первое совпадение у меня нашлось в файле по адресу 867D8 от начала файла, второе по адресу 86858, третье - 86940, четвертое - E961С, пятое EB310. У вас адреса могут не совпадать. Как же узнать, какой из этих адресов функции действительно находится внутри таблицы импорта, а какие к таблице импорта не относятся? Давайте внимательно посмотрим на первый найденный адрес по смещению 867D8 от начала файла. Вот как выглядит это место в шестнадцатеричном редакторе: 0086760: 52950800 40780800 00000000 00000000 0086770: 00000000 00000000 00000000 7532F577 0086780: 00E3F777 1FE2F777 0899E777 349EE777 0086790: 0A98E777 459AE777 8198E777 1A75E777 00867A0: FC02E877 86C4E777 C47CE777 C578E777 00867B0: EF77E777 44F0E777 2499E777 CE7CE777 00867C0: 7246E777 EF3BE777 B805E877 217FE777 00867D0: 7A17E677 FDA5E777[939FE777]99A0E777 00867E0: 3C51E777 38C9E777 1806E877 9E5DE777 00867F0: AA8EE777 B55CE777 493CE777 37ACE777 Не буду вас мучать, скажу, что это есть начало таблицы адресов импорта. Все эти числа (в моем примере начинающиеся с 7532F577 и заканчивающиеся 37ACE777) - это адреса функций, записанные в обратном порядке. (Большинство Windows API функций в Windows XP начинаются с адреса 77хххххх, и в таблице импорта их адреса находятся вместе, последовательно друг за другом. Поэтому я и сделал вывод, что именно первый найденный адрес функции GetModuleHandleA лежит внутри таблицы импорта). Первый адрес функции записан по адресу 8677С (выше идут нули) - это и есть начало таблицы импорта. На всякий случай, если не верите, можете прокрутить вверх - ничего похожего на записанные адреса функций вы там не увидите. Запомним адрес 8677С - это смещение от начала файла, а нам нужно узнать, какой адрес в памяти будет ему соотвествовать. Запускаем LordPE, жмем PE Editor, затем выбираем наш dumped.exe и в появившемся окне жмем FLC, кликаем по кнопке offset и вводим напротив число 8677C, после чего жмем DO. В поле напротив кнопки RVA видим адрес 8717C - это и будет RVA начала таблицы импорта в памяти. Для восстановления импорта запускаем упакованный PCMedik.exe, и вслед за ним ImpRec. Как всегда в ImpRec'е выбираем PCMedik.exe, в поле OEP вводим 82C2C. В поле RVA мы бы должны были написать 8717C - найденное нами (пока еще только предполагаемое) начало таблицы импорта, но я обычно ввожу несколько ранний адрес, на тот случай, что таблица импорта начинается все-таки раньше и я мог пропустить ее начало. Поэтому округлим в меньшую сторону и введем в поле RVA значение 87000 и в поле Size - 1000. Почему 1000? Да потому что мы не знаем точного размера таблицы импорта, но обычно он не превышает 1000h. Жмем Get Imports (а не Iat Autosearch, т.к. мы уже убеждались что автопоиск нам ничего не даст, поэтомы мы и нашли нужные значения сами и теперь сразу нужно жать Get Imports) и ... И видим много строк, заканчивающихся на NO, что свидетельствует о плохом результате. А ну ка давайте прокрутим вниз! В середине списка мы увидим целую кучу строк с именами dll, в конце которых написано YES! "Косячные" строки с NO на конце присутствуют из-за того, что мы неточно ввели начало таблицы импорта и ее размер, но ImpRec выделил нам нужные строки словом YES на конце, остальные же мы можем удалить! Выделяем все строки с NO на конце, тыкаем правой кнопкой и в меню выбираем Delete Thunk(s). Должны остаться только строки с YES на конце. Теперь, когда мы получили правильную таблицу импорта, ее осталось вживить в файл - жмем Fix Dump! Указываем наш dumped.exe и радуемся удачной распаковке PE Compact! Eсли это вам показалось трудным - не расстраивайтесь, все-таки это ваша первая распаковка. Буквально еще немного практики и на PE Compact у вас будет уходить не больше 5 минут! Но хватит о PE Compact, нас ждет распаковка ExeStealth'а ! |
|
Создано: 15 апреля 2005 22:41 · Личное сообщение · #11 |
|
Создано: 15 апреля 2005 22:42 · Личное сообщение · #12 |
|
Создано: 15 апреля 2005 23:06 · Личное сообщение · #13 |
|
Создано: 15 апреля 2005 23:19 · Личное сообщение · #14 |
|
Создано: 16 апреля 2005 11:25 · Личное сообщение · #15 |
|
Создано: 16 апреля 2005 11:30 · Личное сообщение · #16 |
|
Создано: 16 апреля 2005 11:43 · Личное сообщение · #17 |
|
Создано: 16 апреля 2005 14:34 · Личное сообщение · #18 |
|
Создано: 16 апреля 2005 14:40 · Личное сообщение · #19 совет: также попробуй указать RVA, rva=addr.image_import_descriptor-imagebase (image_import_descriptor ищется достаточно просто, доходишь до какого-нибудь системного вызова в программе, смотришь адрес в дампе, если есть поинтеры на системные вызовы выше то переходи выше, обычно до пустого места, это примерно и будет descriptor) |
|
Создано: 17 апреля 2005 00:24 · Личное сообщение · #20 |
|
Создано: 18 апреля 2005 06:58 · Личное сообщение · #21 |
|
Создано: 18 апреля 2005 06:59 · Личное сообщение · #22 |
|
Создано: 18 мая 2005 09:20 · Личное сообщение · #23 Ara пишет: читай статьи, статью МozgС в частности Ara Спасибо за приведенную статью, полезная вещь. Когда-то уже читал, но поверхностно, а сейчас -вник и разобрался. Видимо придется заняться повторением пройденного материала, кое-что перечитать, используя уже полученные знания. ----- Сколько ни наталкивали на мысль – все равно сумел увернуться |
eXeL@B —› Крэки, обсуждения —› Распаковка AsPack 2.1 |