![]() |
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс |
Новичку | Ссылки | Программирование | Интервью | Архив | Связь |
Распаковка UPX-Scrambler - нет ничего прощеОбсудить статью на форумеМассу крэкерских инструментов, видеоуроков и статей вы сможете найти на видеокурсе от нашего сайта. Подробнее здесь. Автор: ARCHANGEL <crazyangel88@mail.ru> ВступлениеОбычно все тьюторы начинаются с описания софта, который крэкер облюбовал для взлома: вначалеидёт рассказ о том, где взять ту или иную софтину, зачем она нужна, почему именно она и т.д. Или же всё начинается с текста, суть которого звучит приблизительно так:"Вам всё равно, что ломать, так давайте посмотрим, что сломал я". Но эта история будет иметь абсолютно другое начало. Как-то одним летним вечером я обнаружил, что у меня есть масса свободного времени и решил его потратить на прочтение чего-нибудь познавательного. В качестве "чего-нибудь" была выбрана небезызвестная статья: "Об упаковщиках в последний раз" Многие люди рекомендовали мне её прочитать, да и я сам хотел узнать побольше о распаковке. Одолев первую часть, я, наконец, принялся за переваривание второй. Всё шло более-менее гладко, пока я не дошёл до практической части. Практика начиналась с UPX (что, в общем, и понятно), но, по словам авторов данной статьи "Мы предпочтем рассмотреть вопрос "почему", а не вопрос "как" несложно понять, что руководства по распаковке этого пакера мы здесь не найдём. Тогда что найдём? Здесь мы в изобилии найдём инфу о неких скрамблерах. Если быть более точным, то только о двух: UPX-SCRAMBLER и HidePX. Если вам не довелось по каким-либо причинам прочитать эту статью, то поясню, что скрамблеры (если всё так жёстко обобщить и сделать вывод, то звучать он будет именно так:) применяются для предотвращения распаковки UPX. И всё бы ничего, но по идее, в этой статье должно было быть описание, как побороть эти скрамблеры, тем не менее, вместо этого авторы предлагают скачать модифицированный UPX и плагин для PeTools, которые вкупе будут автоматически распаковывать вышеперечисленные скрамблеры. И если в статье ещё имеется солидный кусок теории, посвящённый HidePX, то UPX-SCRAMBLER просто блекнет в лучах его славы:). Конечно, многие скажут, что, типа, UPX-SCRAMBLER не такой уж крутой, чтоб про него ещё и писать, ведь он распаковывается на раз-два и т.д. и т.п. Но ведь статья "Об упаковщиках в последний раз" писалась для людей, которые учились искусству распаковки с нуля, или я не прав? Без сомнения, люди, распаковавшие арму или аспр последних версий, уж смогут что-то придумать со скрамблерами, но если человек только начинает осваиваться в искусстве распаковки, то этот тьютор как раз может упростить задачу. Можете рассматривать его как приложение к вышеупомянутой статье, ведь именно так он и был создан. Но хватит уже болтовни, пора начинать... НачалоСтоит заметить, что скрамблеры вообще встречаются нечасто. А даже если и встречаются, томы вполне можем не обратить на них внимания. Почему? Да потому, что попросту разожмём такой файл с помощью какого-то крутого распаковщика - и делу конец. Или же распакуем вручную. Дело в том, что UPX-SCRAMBLER и HidePX являются самыми мощными из скрамблеров, но есть и другие. Так вот, эти другие нельзя распаковать с помощью UPX, зато распаковка вручную может ничем не отличаться от стандарта. Но UPX-SCRAMBLER (а именно его мы и будем рассматривать) отличается от стандарта, и здесь всё не будет проходить по накатанной схеме. (Ну, будет, но не всё:). Для начало определимся, какие инструменты нам понадобятся: 1. OllyDebug v1.10 + CommandBar 2. PeID v 0.93 и старше 3. ImpRec 1.6 final 4. Resource Binder 2.0 5. Сюрприз - Protection ID v 5.0 6. Pe Tools v 1.5 Xmas Edition Мне кажется, не стоит обьяснять, зачем нужен каждый из этих инструментов. Скажу только, что два анализатора нам понадобятся, что обнаружить скрамблер. Дело в том, что PeID не считает скрамблер такой уж защитой. Я, в принципе, с ним согласен, но в учебных целях придётся использовать Protection ID. Ах, да - совсем забыл познакомить вас с нашей мишенью. Мишенью у нас будет, как это ни странно, генератор рег.ключей для WinRar, написанный неизвестным крэкером. Почему именно он? Это всё, что мне удалось найти из запакованного скрамблерами. Ну, начнём. Первым делом эксперимента ради натравим на него PeID. На что PeID ответит: UPX 0.89.6 - 1.02 / 1.05 - 1.24 -> Markus & Laszlo Как видите, произошло то, о чём я предупреждал выше. Ну и ладно, давайте посмотрим на секции с помощью Pe Tools, в часности, нас интересуют имена секций: code text .rsrc Как видите, нет стандартных UPX0 и UPX1, значит перед нами скрамблированный UPX. Тперь самое время натравить на запакованный файл Protection ID: > Ready Scanning -> D:\Program files\WinRAR\keygen.exe File Type : Exe, Size : 6144 (01800h) Bytes [!] UPX Scrambler detected ! --------- ну, что я говорил? [!] UPX [unknown / modified] ! - Scan Took : 0.984 Seconds Вот мы и убедились, что имеем дело со скрамблером, теперь попробуем его отковырять:) Грузим это дело в отладчик. Стоим здесь: 00406F40 > $ 61 POPAD 00406F41 . BE 00604000 MOV ESI,keygen.00406000 00406F46 . 8DBE 00B0FFFF LEA EDI,DWORD PTR DS:[ESI+FFFFB000] 00406F4C . 57 PUSH EDI 00406F4D . 83CD FF OR EBP,FFFFFFFF Как видите, вместо pushad, которые так свойственны upx, первой инструкцией является popad. Код явно нетипичный для upx. Что же будет дальше? Для начала найдём OEP, здесь не будем придумывать ничего нового, а просто в отладчике поставим бряк: hr esp-4 Вы спросите, почему мы поставили Hardware Breakpoint? Потому что Hardware работают быстрее, чем Memory. Нажмём F9 и прервёмся где-то в таком месте, которое ну никак не напоминает OEP. Нажмём ещё раз F9 и ещё раз. Такими темпами мы будем долго идти до OEP, лучше сделаем так: зажмём F9 и будем держать до тех пор, пока программа не подаст какие-либо признаки жизни (в нашем случае мы увидим информационный MessageBox), а когда это произойдёт, посмотрим, на каком месте последний раз сработал наш бряк. Сказано - сделано. Такими шаманскими приёмами мы оказались здесь: 0040175F 55 PUSH EBP 00401760 8BEC MOV EBP,ESP МЕСТО ПОСЛЕДНЕГО СРАБАТЫВАНИЯ 00401762 6A FF PUSH -1 00401764 68 E0204000 PUSH keygen.004020E0 00401769 68 E0184000 PUSH keygen.004018E0 ; JMP to MSVCRT._except_handler3 0040176E 64:A1 00000000 MOV EAX,DWORD PTR FS:[0] 00401774 50 PUSH EAX 00401775 64:8925 00000000 MOV DWORD PTR FS:[0],ESP 0040177C 83EC 68 SUB ESP,68 0040177F 53 PUSH EBX 00401780 56 PUSH ESI 00401781 57 PUSH EDI 00401782 8965 E8 MOV DWORD PTR SS:[EBP-18],ESP 00401785 33DB XOR EBX,EBX 00401787 895D FC MOV DWORD PTR SS:[EBP-4],EBX 0040178A 6A 02 PUSH 2 0040178C FF15 64204000 CALL DWORD PTR DS:[402064] ; MSVCRT.__set_app_type 00401792 59 POP ECX 00401793 830D E4324000 FF OR DWORD PTR DS:[4032E4],FFFFFFFF 0040179A 830D E8324000 FF OR DWORD PTR DS:[4032E8],FFFFFFFF 004017A1 FF15 68204000 CALL DWORD PTR DS:[402068] ; MSVCRT.__p__fmode 004017A7 8B0D E0324000 MOV ECX,DWORD PTR DS:[4032E0] 004017AD 8908 MOV DWORD PTR DS:[EAX],ECX 004017AF FF15 6C204000 CALL DWORD PTR DS:[40206C] ; MSVCRT.__p__commode Ну как, присмотритесь повнимательнее, где-то рядом должна быть OEP. Хотя, почему рядом, мы и так практически на OEP, ведь это - стандартное начало программ, написанных на C++ шестой версии. А если поднимемся на одну команду вперёд - то это и будет наша OEP:). Для тех, кто ещё не понял: VA OEP составляет 0040175F. Теперь с помощью Pe Tools определим ImageBase - оно сотавляет 00400000. Отсюда: VA-ImageBase=RVA 0040175F-00400000=0000175F Вот и наша OEP, которое мы будем вписывать в ImpRec. Сейчас нам нужно поставить на адрес 0040175F Hardware Breakpoint on execution (он будет обозначен номером 2), снять бряк под номером 1 и перезапустить прогу под отладчиком. Опять жмём F9, прерываемся на OEP и дмапим процесс с помощью Pe Tools. Перед этим в настройках помечаем галочкой такие пункты: Full Dump: Fix Header Full Dump: Paste Header from Disk Dump Fix Wipe relocation Rebuild PE Validate PE Вписали эти настройки и сделали дамп? Отлично, идём дальше. Теперь восстановим таблицу импорта. Этот процесс не будет отличаться чем-то особенным - просто запустим ImpRec,выберем из всех процессов наш keygen.exe, в поле OEP впишем 0000175F, нажмём IAT AutoSearch, после чего ImpRec сообщит нам, что таблица импорта найдена. Далее жмём Get Imports и получаем валидную таблицу импорта, т.е. напротив каждой библиотеки отображается количество найденых функций и светится надпись Yes. Отлично, теперь ставим галочку напротив Add new section и жмём Fix dump. В появившемся меню выбираем наш дамп, и всё восстанавливаем. Да, не забудьте перед этим в настройках ImpRec указать Fix EP to OEP. Следующим этапом будет обычный Rebuild Pe, который мы выполним с помощью Pe Tools. И после этого файл, в принципе, можно считать уже распакованным. Во всяком случае, именно так поступает Quick Unpack v1.0 beta 5 - один из самых мощных на сегодня распаковщиков скрамблированных файлов. Если вы с его помощью попытаетесь распаковать данный файл, то он выполнит все вышеперечисленные действия, и это - неплохо, но есть одно НО: как же быть с ресурсами, ведь из за скрамблера они до сих пор не доступны для редактирования, а вы сами знаете, как иногда хотелось бы что-то там подправить:)Для этого мы не будем особо париться, а просто запустим Resource Binder 2.0. Далее снимем галку с пункта "Оптимизировать секции..." (пункт второй), так как он этого нормально делать не умеет, натравим его на наш распакованный ехе и нажмём "Восстановить". Всё, теперь открывая прогу через Restorator, мы сможем насладиться вволю модифицированием ресурсов. (Следует заметить, что Quick Unpack v1.0 beta 5 распаковывает скрамблеры по настроению, не знаю, от чего это зависит, но файл, который прекрасно распаковывался вчера, сегодня может как партизан не выдавать свою ОЕР:(, особенность неприятная, поэтому умение ручной распаковки никак не будет лишним:) Кстати, помните, при нахождении OEP я говорил, что мы, якобы, при остановке на последнем бряке попали почти на OEP С++ шестой версии? Давайте проверим, не обманул ли я вас. Натравим на распакованный файл PeID, и вот что он нам выдаст: Microsoft Visual C++ 6.0 Что и требовалось доказать. Так мы с вами только что побороли UPX-Scrambler. ПоясненияВ конце статьи хотелось бы дать некоторые пояснения к вышеописанному процессу и дать несколькополезных ссылок. Откровенно говоря, скрамблеры - не протекторы, здесь мы не увидим ни антиотладки, ни сокрытия таблицы импорта (и антидампов уж точно не будет:). Основная фишка скрамблера - сокрытие ОЕР, но, как видите, абсолютно стандартный приём, про который уже сотни раз говорилось (hr esp-4) снова показал себя. Хотя, с другой стороны, представьте, что вы хотите распаковать скрамблер при помощи Soft-Ice. Тогда задача немного усложнится, но вспомните свою первую распаковку UPX, самого обычного, нескрамблированного. Вспомнили? А теперь представьте, что вам в этот момент попадается скрамблер. Ну как, впечатляет? Так вот чтоб этого не произошло, я и написал данный тьютор. Ещё в качестве особо ценного материала по искусству распаковки хотелось бы отметить тьютор "Распаковка? Это легко!!!" - автор Bit-h@ck Там вы найдёте ответы на многие вопросы, и (что особенно мне понравилось) стандартный вид ОЕР некоторых популярных компиляторов. Удачи вам в нелёгком деле распаковки:) "Великим критикам" посвящаетсяПочему-то вдруг вспомнилась ОООчень бородатая цитата:"Критиковать - значит объяснять автору, что он делает не так, как делал бы критик, если бы умел" PE_Kill, намёк понял?:) БлагодарностиСпасибо CrackLab, респект Bit-h@ck'у за тьтютор про распаковку, конечно, спасибо авторамстатьи "Об упаковщиках в последний раз" (скорее, спасибо за идею:), ну и тем, кто это всё добро прочитал, тоже спасибо. Комментарии к статье: Распаковка UPX-Scrambler - нет ничего проще Материалы находятся на сайте https://exelab.ru ![]() |
Вы находитесь на EXELAB.rU |
![]() |