![]() |
eXeL@B —› Протекторы —› unpack securom |
<< . 1 . 2 . 3 . >> |
Посл.ответ | Сообщение |
|
Создано: 05 июля 2007 23:39 · Личное сообщение · #1 я создал тему в разделе для новичков http://exelab.ru/f/action=vthread&forum=5&topic=9277 пакер SecuROM 4.x.x.x - 5.x.x.x -> Sony DADC посмотрел секции: CWFR FWFR .asrc .ojff .apypwk .idata Говорят что это пакер по сложности не уступает Themida Знаю, на сайте есть две статьи про распаковк securom, но чт-то мне не очень понятно. Буду благодарен, если кто посмотрит exe-ник. http://ifolder.ru/2578939 ![]() |
|
Создано: 17 июля 2007 19:04 · Личное сообщение · #2 |
|
Создано: 17 июля 2007 22:42 · Поправил: overwriter · Личное сообщение · #3 |
|
Создано: 17 июля 2007 23:36 · Личное сообщение · #4 |
|
Создано: 18 июля 2007 01:13 · Личное сообщение · #5 Я не понимаю,что вы тут обсуждаете под таким громким названием топика?? Если у Mavlyudov'а нет возможности запустить защищённое приложение -- т.е. нет ни оригинального диска,ни рабочего образа -- то тогда снять протектор и получить распакованное приложение не удастся.Если кто-то знает статический метод снятия данного протектора(в чём я очень сильно сомневаюсь),то тогда другое дело. Вот и весь сказ. ----- the Power of Reversing team ![]() |
|
Создано: 18 июля 2007 08:06 · Личное сообщение · #6 |
|
Создано: 18 июля 2007 10:55 · Личное сообщение · #7 |
|
Создано: 18 июля 2007 20:40 · Личное сообщение · #8 Cigan пишет: Вся распаковка 4-5 версий проходит без диска. Диск используеться только когда начинает строиться ВМ. ...это интересно как??Протектор же откажется расшифровывать секцию кода,если проверка подлинности диска окончится неудачей.Или ты хочешь патчить проверку?? И при чём тут ВМ??Что ты понимаешь в данном случае под этим словом?? ----- the Power of Reversing team ![]() |
|
Создано: 18 июля 2007 22:05 · Личное сообщение · #9 |
|
Создано: 18 июля 2007 23:20 · Личное сообщение · #10 |
|
Создано: 19 июля 2007 01:08 · Личное сообщение · #11 overwriter Вот тутор, по которому я пробую распаковать ifolder.ru/2713493 Вот файл, который я распаковываю: ifolder.ru/2713509 (2.6 мб) Итак, я поставил бряк( в ollydbg ) на GetDriveTypeA (bp GetDriveTypeA) Насколько я знаю, эта функция определяет тип диска, с которого загружается прога. (т.е если ее запустить, она потребует диск - проверял!) Хм..теперь я в секции библиотек.. 7C4EA6B4 > 837C24 04 00 CMP DWORD PTR SS:[ESP+4],0 7C4EA6B9 0F84 ABD00200 JE kernel32.7C51776A 7C4EA6BF FF7424 04 PUSH DWORD PTR SS:[ESP+4] 7C4EA6C3 E8 F1CCFFFF CALL kernel32.7C4E73B9 7C4EA6C8 85C0 TEST EAX,EAX 7C4EA6CA 0F84 92D00200 JE kernel32.7C517762 7C4EA6D0 8B40 04 MOV EAX,DWORD PTR DS:[EAX+4] 7C4EA6D3 50 PUSH EAX 7C4EA6D4 E8 CEC0FFFF CALL kernel32.GetDriveTypeW 7C4EA6D9 C2 0400 RETN 4 Возвращаюсь по RETN 4 Кажется, я тут: 006AF8A1 64:A1 00000000 MOV EAX,DWORD PTR FS:[0] 006AF8A7 50 PUSH EAX Дальше я застрял. Нужна помощь... ![]() |
|
Создано: 19 июля 2007 19:10 · Личное сообщение · #12 |
|
Создано: 19 июля 2007 23:41 · Личное сообщение · #13 Попробовал еще по-другому. Ставлю bp GetDriveTypeA Потом Memory map ставлю memory breakpoint on access по адресу 00401000. Address=00401000 Size=00111000 (1118208.) Owner=EGU 00400000 Section=CWFR Type=Imag 01001002 Access=R Initial access=RWE Запускаю F9 и останавливаюсь на 7C4EA6B4 > 837C24 04 00 CMP DWORD PTR SS:[ESP+4],0 Далее трассирую до ret 4 и я тут 20001129 66:8945 F8 MOV WORD PTR SS:[EBP-8],AX Дальше не знаю как. Где-то рядом должна быть ОЕР... В статье она в этом куске кода (кусок кода из тутора): 00582EB6 B8 A0704600 MOV EAX,START.004670A0 00582EBB 90 NOP 00582EBC 90 NOP 00582EBD 50 PUSH EAX 00582EBE EB 08 JMP SHORT START.00582EC8 00582EC0 58 POP EAX 00582EC1 A1 38946100 MOV EAX,DWORD PTR DS:[619438] 00582EC6 -FFE0 JMP EAX !!!!!!!!!!!!!!! (Это кажется точка входа) ![]() |
|
Создано: 20 июля 2007 01:28 · Поправил: DillerInc · Личное сообщение · #14 В общем,оригинальный диск и корректно снятый образ рулят! OEP находится с помощью точки останова на функцию CreateEventA. У меня tempOEP равно 001ED230(без Imagebase). Но что же мы видим по этому адресу...это самый настоящий UPX,т.е. файл сначала был запакован UPX'ом,а потом накрыт пятым securom'ом. С пакером всё элементарно.Настоящая точка входа есть 00153258(без imagebase). А там уже Borland Delphi 6.0-7.0. Никаких переходников протектора в секции кода я не обнаружил.Собственно логически откуда им там взятся,если файл,прежде чем быть обработаным протектором,был пожат UPX'ом... Распакованный файл запускается без диска.Единственно я не смог нормально вырезать секции протектора из середины файла,потому как за ними лежит директория импорта в секции idata.И я почему-то не нахожу хорошего варианта,как можно перестроить эту директорию,переместив её в другое место(на место первой секции протектора).Можно ли как-то настроить ImpRec,чтобы он автоматом всё сделал?? EDIT Всё.Разобрался вроде бы. В ImpRec'е убираем галку с "Add new section",вписываем в окошко адрес,где мы хотим разместить директорию импорта и жмём "Fix dump".Далее в WinHex'е просто выкидываем всё лишнее и чуть-чуть подправляем файл. IAT имеет смещение 0016421C и размер 0A88h. ----- the Power of Reversing team ![]() |
|
Создано: 20 июля 2007 12:55 · Личное сообщение · #15 DillerInc пишет: вписываем в окошко адрес,где мы хотим разместить директорию импорта и жмём "Fix dump". Как я понял, чтобы найти этот адрес, нужно найти строку типа CALL DWORD PTR DS:[ ] Далее идти по этому колу и искать прыг JMP EAX, который указывает на правильный импорт.... Что-то ImpRec не может Получить импорт, я ввожу ОЕР=3258 Size=0000A88h и еще нужно указать RVA, который доступен после снятья галочки "Add new section" ![]() |
|
Создано: 20 июля 2007 13:28 · Личное сообщение · #16 Mavlyudov пишет: Как я понял, чтобы найти этот адрес, нужно найти строку типа CALL DWORD PTR DS:[ ] Далее идти по этому колу и искать прыг JMP EAX ...нет.Я говорю тут про тот RVA,который становится доступным после снятия галки "Add new section". Ты по-видимому путаешь директорию импорта и IAT.Последняя содержит адреса импортируемых функций.Директория импорта же характеризуется в первую очередь массивом структур IMAGE_IMPORT_DESCRIPTOR.В общем,учи матчасть. Я вписывал тот адрес,который был мне удобен - 001F7000 - начало первой секции протектора.Я же хотел сократить размер файла,выкинув ненужные секции. Mavlyudov пишет: Что-то ImpRec не может Получить импорт, я ввожу ОЕР=3258 Size=0000A88h ...я же указал смещение оригинальной IAT в предыдущем посте.Вводи его,также размер и жми "Get imports". Да и где ты всё это пытаешься проделывать??Ты дошёл до реального OEP?? ----- the Power of Reversing team ![]() |
|
Создано: 20 июля 2007 14:05 · Личное сообщение · #17 DillerInc пишет: Ты дошёл до реального OEP?? Нет, не смог. там сначала иде временный ОЕР, но я и его не смог найти.... У меня было два варианта: ставлю bp GetDriveTypeA и трассирую возврат RET 4 или ставлю bp GetDriveTypeA , ставлю memory breakpoint on access по адресу 00401000 и трассирую ДО RET 4, потом будет переход. Далее ищу JMP EAX ... и там должен быть ОЕР, но я его НЕ смог найти. Ты ставишь бряк на CreateEventA. Кстати почему? и соответственно я не знаю что делать после того как поставил туда бряк... ![]() |
|
Создано: 20 июля 2007 15:08 · Личное сообщение · #18 Mavlyudov Ты сначала скажи: ты раздобыл оригинальный диск или образ??Потому как мне удалось достать лицензию. Cigan предлагает версию,что секция кода расшифровывается до самой проверки диска,но я хочу возразить,что это не так.Я ставил брейкпоинты на WriteProcessMemory и GetDriveTypeA,запускал без биска и до самого последнего момента,когда уже вылетало сообщение о неверности диска,точка входа,где сидит UPX,оставалась нерасшифрованной. Команда перехода на OEP находится примерно по адресу 00632265 (с imagebase).Но на неё мы походу никогда не попадём,не имея в наличии оригинального носителя или рабочего образа. Метод с точкой останова на CreateEventA описан в статье Rascal'a,которая находится в разделе "RAR-статьи". ----- the Power of Reversing team ![]() |
|
Создано: 22 июля 2007 22:25 · Поправил: Mavlyudov · Личное сообщение · #19 DillerInc пишет: Ты сначала скажи: ты раздобыл оригинальный диск или образ??Потому как мне удалось достать лицензию. Да. я нашел ПРАВИЛЬНО снятый образ. Его удалось съэмулировать и щапустить. Но на диск записать не удалось (всмысле снять копию диска). Но дело не в этом. Мне интересна сама распаковка это проги. И поэтому я продолжаю ее ковырять.... DillerInc DillerInc пишет: OEP находится с помощью точки останова на функцию CreateEventA Решил еще прочтать статью Cigan'a. Я попробовал найти ОЕР немного по-другому: поставил брейкпоинт на WriteProcessMemory, Запускал F9 и Ctrl+F9 до RET из процедуры, затем F7 и я в коде основной программы. Запомнил адрес и т.д. пока не запустится прога и не выдаст диалог.... Запомнил 3 адреса: 005F7E11, 005F8291, 005F8583..Прогу не закрыл.. иду по коду. Ты говорил, что прога на делфи написана. ОТкрыл в другом отладчике незапакованную прогу на делфи.. Вижу: 0045920C > $ 55 PUSH EBP 0045920D . 8BEC MOV EBP,ESP 0045920F . 83C4 F0 ADD ESP,-10 00459212 . B8 2C904500 MOV EAX,Project1.0045902C Значит и я должен искать PUSH EBP, чтобы найти ОЕР. Но таких мест окаалось несколько: 005F85A0 55 PUSH EBP 005F85A1 8BEC MOV EBP,ESP 005F85A3 53 PUSH EBX 005F85A4 56 PUSH ESI 005F85A5 57 PUSH EDI 005F85A6 BF 00104000 MOV EDI,EGU.00401000 005F85AB BE AA204000 MOV ESI,EGU.004020AA 005F85B0 5F POP EDI 005F85B1 5E POP ESI 005F85B2 5B POP EBX 005F85B3 5D POP EBP И чуть ниже: 005F85C0 55 PUSH EBP 005F85C1 8BEC MOV EBP,ESP 005F85C3 81EC C80B0000 SUB ESP,0BC8 005F85C9 53 PUSH EBX 005F85CA 56 PUSH ESI 005F85CB 57 PUSH EDI 005F85CC 6A 04 PUSH 4 005F85CE E8 855D0B00 CALL EGU.006AE358 Т.е подозрение падает на два адреса 005F85A0, 005F85C0. Ни один из них не совпадает с тем временным адресом, что ты сказал (005ED230). Значит где-то я ошибся. Тем более я ставил только один брейкпоин (на CreateEventA не ставил) ![]() |
|
Создано: 22 июля 2007 23:17 · Личное сообщение · #20 Mavlyudov пишет: на CreateEventA не ставил ...дык,поставь.Обычно третье срабатывание.Более точно определяется по четвёртому параметру,которым является указатель на строку: "EV_APPL_STARTED". Далее немного трассируешь и доходишь до команды: JMP EAX ; EAX = 005ED230 Теперь забудь про всякие названия типа "временный OEP". Просто то,что ты обнаружишь по адресу 005ED230 будет UPX'ом.Код будет начинаться с команды PUSHAD(как и положено для этого пакера).Прокручиваешь окно кода вниз пока не увидишь команду POPAD(это конец всех работ пакера),ставишь на неё брейкпоинт.После этой команды будет переход на настоящий OEP программы.Вот там уже будет Borland Delphi.Прямо на переходе на OEP можно зациклить и снять дамп. ----- the Power of Reversing team ![]() |
|
Создано: 23 июля 2007 01:29 · Личное сообщение · #21 DillerInc Ставлю бряк на CreateEventA. Проделываю всё то же самое что и с WriteProcessMemory. Получаю два адреса 006193D7 и 00625E08, на последнем из которых прога запускается. Перезахожу (Ctrl+F2) и ставлю бряк на 00625E08, чтобы было удобнее трассировать. После запуска останавливаюсь тут. 00625E08 A3 8C387B00 MOV DWORD PTR DS:[7B388C],EAX Трассирую далее по коду, нигде не видно JMP EAX ; EAX = 005ED230 Видать, я где-то ошибся....Завтра еще буду пробовать.. ![]() |
|
Создано: 23 июля 2007 02:37 · Личное сообщение · #22 |
|
Создано: 23 июля 2007 22:47 · Поправил: Mavlyudov · Личное сообщение · #23 DillerInc Думал, смогу сегодня дойти до ОЕР и снять дамп...но не вышло. Не пойму в чем моя ошибка. Вот, привожу ниже мои рассуждения... Итак, с самого начала: bp CreateEventA Жму F9 и я тут: 7C4F4CEA > 55 PUSH EBP Запускаю до RET Ctrl+F9 7C4F4D0C C2 1000 RETN 10 Иду туда F7 006193D7 A3 D8B17900 MOV DWORD PTR DS:[79B1D8],EAX Далее F9 7C4F4CEA > 55 PUSH EBP и опять жму Ctrl+F9 7C4F4D0C C2 1000 RETN 10 Жму F7 00625E08 A3 8C387B00 MOV DWORD PTR DS:[7B388C],EAX F9 и запустилась Перезапускаю Ctrl+F2 и ставлю бряк bp 00625E08, чтобы было удобнее трассировать Запуск F9 и я останавливаюсь там же 00625E08 A3 8C387B00 MOV DWORD PTR DS:[7B388C],EAX Трассирую без входа в call F8 до тех пор пока не произойдет запуск. Запуск произошел на строке: 00625FF3 E8 080D0300 CALL EGU.00656D00 Опять перезапускаю Ctrl+F2 И ставлю только этот бряк bp 00625FF3 Запуск F9. Остановка на 00625FF3 E8 080D0300 CALL EGU.00656D00 Вижу call. Это наводит на мысль, что нужно зайти по нему. Жму F7 и я тут: 00656D00 55 PUSH EBP Странно, ты говорил, что ОЕР примерно по адресу 00632265.. А я уже дальше Может надо было поставить hardware breakpoint ? ![]() |
|
Создано: 24 июля 2007 12:55 · Личное сообщение · #24 Mavlyudov Я,честно говоря,даже и не знаю... Обычно происходит так: после старта программы два раза срабатывает брейкпоинт.Потом появляется характерный значок Securom'а(крутящийся диск),что говорит о происходящей в данный момент проверке диска,и после этого третий раз срабатывает брейкпоинт -- это уже то,что нам надо. Может просто протектор в нужный момент палит вашу ольку,я-то отлаживаю в основном в SoftICE. Версия протектора точно пятая?? Mavlyudov пишет: Странно, ты говорил, что ОЕР примерно по адресу 00632265.. А я уже дальше ...не OEP,а переход на него.Неужели сложно посмотреть,что находится по этому адресу??Поставь в крайнем случае туда точку останова -- хоть обычную,хоть аппаратную -- лишь бы сработала. ----- the Power of Reversing team ![]() |
|
Создано: 24 июля 2007 16:24 · Личное сообщение · #25 |
|
Создано: 24 июля 2007 18:55 · Личное сообщение · #26 overwriter пишет: SafeDisk вроде проще с него начни ...не проще.Моё мнение,что вторая и третья версии SafeDisc'а превосходят по сложности четвёртую и пятую версии Securom'а. Насчёт последних версий протекторов сказать трудно.Единственно только,что четвёртый SafeDisc(даже Advanced версию) я умею снимать,а седьмой Securom нет. ----- the Power of Reversing team ![]() |
|
Создано: 24 июля 2007 21:18 · Личное сообщение · #27 DillerInc пишет: ...не OEP,а переход на него.Неужели сложно посмотреть,что находится по этому адресу?? Посмотрел 00632265 58 POP EAX 00632266 A1 58CE7A00 MOV EAX,DWORD PTR DS:[7ACE58] 0063226B FFE0 JMP EAX 0063226D A3 58CE7A00 MOV DWORD PTR DS:[7ACE58],EAX 00632272 E9 1B000000 JMP EGU.00632292 00632277 B8 774B6D47 MOV EAX,476D4B77 ![]() |
|
Создано: 24 июля 2007 21:58 · Личное сообщение · #28 |
|
Создано: 24 июля 2007 22:07 · Личное сообщение · #29 |
|
Создано: 24 июля 2007 22:30 · Личное сообщение · #30 |
|
Создано: 27 июля 2007 21:46 · Поправил: Mavlyudov · Личное сообщение · #31 Всё никак не могу найти ОЕР, зато кое-что стало чуть более ясным. Прочита еше раз эту страницу, и понял, что только с одним exe-файлом трудно распаковать...а я именно это и пытался... Открыл файл с неправильно снятого образа - и тоже самое, что и с одним exe-шником. Взял ПРАВИЛЬНО сняты образ и кое-что другое вышло. Приведу целиком мои действия. ОТКРЫЛ в Олли: 006B0635 > 55 PUSH EBP bp CreateEventA F9 77E8B217 > 55 PUSH EBP ctrl+f9,f7 0061E530 A3 08FA7700 MOV DWORD PTR DS:[77FA08],EAX f9 77E8B217 > 55 PUSH EBP ctrl+f9, f7 00630D3D A3 6C777900 MOV DWORD PTR DS:[79776C],EAX F9 и закрутился диск 77E8B217 > 55 PUSH EBP ctrl+f9, f7 0064F9EC A3 24FC7700 MOV DWORD PTR DS:[77FC24],EAX f9 77E8B217 > 55 PUSH EBP ctrl+f9, f7 0040EECB 8946 10 MOV DWORD PTR DS:[ESI+10],EAX F9 77E8B217 > 55 PUSH EBP ctrl+f9, f7 0040EEDB 8946 14 MOV DWORD PTR DS:[ESI+14],EAX F9 77E8B217 > 55 PUSH EBP ctrl+f9, f7 0040EECB 8946 10 MOV DWORD PTR DS:[ESI+10],EAX F9 77E8B217 > 55 PUSH EBP ctrl+f9, f7 0040EEDB 8946 14 MOV DWORD PTR DS:[ESI+14],EAX F9 77E89B01 E9 D2030300 JMP kernel32.77EB9ED8 ctrl+f9, f7 00422199 33C0 XOR EAX,EAX f9 77E89B01 E9 D2030300 JMP kernel32.77EB9ED8 ctrl+f9, f7 00422199 33C0 XOR EAX,EAX f9 и ОШИБКА: The application or DLL D:\WINNT\System32\FLASH.OCX is not a valid Windows image. Please check this against your installation diskette. 77E8B217 > 55 PUSH EBP ctrl+f9, f7 7745D25C 3BC3 CMP EAX,EBX 77E8B217 > 55 PUSH EBP Запустилась, но окно как будто до конца не загрузилось, в полуподвешенном состоянии. Похоже на то что выполнилась только одна из команд TranslateMessage(Msg); DispatchMessage(Msg). Скорее всего первая ))) ctrl+f9, f7 66002F66 8366 68 00 AND DWORD PTR DS:[ESI+68],0 F9 77E8B217 > 55 PUSH EBP ctrl+f9, f7 775803CE 3BC7 CMP EAX,EDI f9 77E8B217 > 55 PUSH EBP ctrl+f9, f7 660122C6 ^EB DE JMP SHORT MSVBVM60.660122A6 F9 И окончательно загрузилась…. Я так понял, что если код расшифровывается на основе каких-то данных с диска, то нужен для распаковки НЕ только один EXE-файл, или я ошибаюсь???? Ни на tempOEP 001ED230, ни на 00632265, ни на JMP EAX ; EAX = 005ED230 я не вышел. И первые три адреса. 0061E530, 00630D3D, 0064F9EC отличаются от тех что были раньше 006193D7, 00625E08 (я дошел до первыз двух), 00641DCF (этот мне сказал DillerInc) И прога запустилась не с 3-его раза, а не пойми с какого ![]() |
<< . 1 . 2 . 3 . >> |
![]() |
eXeL@B —› Протекторы —› unpack securom |