![]() |
eXeL@B —› Вопросы новичков —› Помогите разобраться с защитой :: UPX, Markus & Laszlo [Overlay] и ещё много-много страшных слов |
. 1 . 2 . >> |
Посл.ответ | Сообщение |
|
Создано: 23 мая 2009 14:50 · Поправил: EST2000 · Личное сообщение · #1 Доброго вам времени суток, уважаемые! Программа генерирует COFF файл для Proteus. (Тем кто не знает - это из области электроники) Ограничения: максимум генерация файла в два кб. Смотрим: PEID: UPX 0.89.6 - 1.02 / 1.05 - 1.24 -> Markus & Laszlo [Overlay] - Снимаем... UPX -d сотрудничать отказался (закриптован/модифицирован) Ручная распаковка, QUnpack, PEiD Generic Unpacker дают одинаковый результат - дамп запускается. Смотрим дальше: PEID: Borland Delphi 6.0 - 7.0 Olly упорно твердит, что OEP вне кода, анализ кода тоже помощи не дает. Криптор ? Смотрим Strings - такому письму позавидуют даже китайцы. Смотрим саму программу - вроде бы всё в порядке, за исключением нескольких мелочей. Во первых программа запускается без автоматического выбора вкладки (не работает OnFormActivate ?), несколько строк - буквы мешаются с русскими (прога на англ.), вобщем - что-то с ресурсами. PE Explorer - в принципе всё в порядке, видим компонент IceLicense с защитой от отладки, монитора и криптованием кода. Ну и ещё заметил: секция ресурсов вроде как отдельно и существует, но фактически ресурсы начинаются в предыдущей секции. От Res.Binder тоже толку мало, всё остается по старому. А вот теперь, то, чего я никак не могу понять, не спрашивайте как я на это вышел, не помню. Открываем файл в WinHex, допишем 1 нулевой байт в конец файла, смотрим: строчки которые шли в перемешку с русскими буквами оправились, но не все. Допишем ещё 1 байт: все строчки читабельны, за исключением всё того-же выбора первой вкладки при запуске программы. PEiD уже показывает Borland Delphi 6.0 - 7.0 [Overlay]. Некоторые строчки уже появляются в Olly, но всё равно недостаточно для работы. Дописываем ещё 1 байт, и сразу же всё приходит в такойже искореженный вид как и сразу после распаковки. Объясните мне, новичку, почему так происходит, кто в этом виноват и как это убрать. Чувствуется, что "истина где-то рядом" но что-то не пойму куда копать, ICELicense по идее не так и страшен как его малюют, и кажется что здесь ещё что-то сидит. Хотя я могу и очень ошибаться. Тема не есть запрос на кряк, интересно понять и убрать защиту с вашей помощью. Прога + 2 образца для теста (из компл. и второй более 2 кб) rapidshare.com/files/236296481/CM4.32.rar.html ![]() |
|
Создано: 23 мая 2009 15:28 · Личное сообщение · #2 |
|
Создано: 23 мая 2009 16:02 · Поправил: EST2000 · Личное сообщение · #3 ClockMan пишет: Надо в файле правильно выставить Size of Codeи Base of Code Знать бы ещё что выставить ![]() Такое ведь возможно, каким-то модификатором или даже вручную сделать, чтобы запутать анализаторы и таких как я ![]() ![]() |
|
Создано: 23 мая 2009 17:36 · Личное сообщение · #4 |
|
Создано: 23 мая 2009 18:10 · Личное сообщение · #5 |
|
Создано: 23 мая 2009 20:06 · Личное сообщение · #6 |
|
Создано: 23 мая 2009 20:53 · Личное сообщение · #7 LIZARD пишет: распаковал в ручную и олька не ругается ни разу, да и со строками вроде все нормально вот посмотри sderni.ru/34007 У меня не запускается, и олька тоже самое твердит SVLab пишет: А почему PE Explorer'ом не распаковывал. Ему пофиг обфускация UPX, и секции нормальные будут. А вот я как-то и не знал даже ![]() ![]() Распакованный PE Explorer-ом файл действительно не покореженный, секции красиво смотрятся, дописывать ничего не надо, видимо уже всё дописанно. PEiD говорит: Borland Delphi 6.0 - 7.0 [Overlay] Такой вариант был после "дописывания" байтов. Как-то вот непонятно мне это. Может действительно всё дело в искареженных секциях, не знаю, на ум ничего не приходит. И опять же, куда пропадает стартовая вкладка ? (OnFormActivate) ![]() |
|
Создано: 23 мая 2009 22:08 · Личное сообщение · #8 Возможно, все дело в этом overlay, в смысле, на него завязана какая-нибудь проверка, потому и вкладка не активируется (ну и последующие глюки возможны). Это два байта в конце нераспакованного файла, которые как-бы отсутствуют, вернее в заголовке файла сказано, что файл заканчивается до этих байт, они не входят в последнюю секцию. Pe Explorer их тоже дописывает, а при ручной распаковке они, естественно, теряются. Но у меня, что вручную распакованный (без этих байт), что експлорером, работают одинаково, без твоих "страшных" глюков ![]() ![]() ![]() |
|
Создано: 23 мая 2009 23:31 · Поправил: EST2000 · Личное сообщение · #9 SVLab пишет: Но у меня, что вручную распакованный (без этих байт), что експлорером, работают одинаково Получается - что у меня фигня какая-то получается ![]() SVLab пишет: получишь еще один вариант работы программы Вот я чего и боюсь, программа генерирует отладочный код, если она его будет генерить так же, как я: "а не дописать ли мне ещё 2 байта ?" - то дело плохо ![]() Хотя, по идее, если дамп запускается и не вылетает спустя время - проверки целостности кода нет, т.е. подменив прыжок на OEP (прога уже будет висеть в памяти распакованная) я могу прыгнуть на свободный участок, где пропатчу нужное место, а затем как и задумывалось прыгну на OEP, то вобщем больше ничего и не надо. Но всё же интересно остается про 2 байта ![]() ![]() ![]() |
|
Создано: 24 мая 2009 04:13 · Личное сообщение · #10 EST2000 пишет: UPX 0.89.6 - 1.02 / 1.05 - 1.24 -> Markus & Laszlo [Overlay] EST2000 пишет: Открываем файл в WinHex, допишем 1 нулевой байт в конец файла В конец фало надо дописать в бинарном виде 99A0 это оверлей по которому скорей всего идёт расшифровка ресурсов файла ![]() ----- Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли. ![]() |
|
Создано: 25 мая 2009 01:13 · Поправил: EST2000 · Личное сообщение · #11 ClockMan пишет: В конец фало надо дописать в бинарном виде 99A0 А "ткните пальцем" пожалуйста, куда смотреть. Очень уж интересно именно разобраться в подробностях. SVLab пишет: Но у меня, что вручную распакованный Коротко опишите процесс распаковки, если не сложно. Я распаковывал как по статье Распаковка UPX-Scrambler - нет ничего проще. И получил далеко не лучший вариант. По такому же принципу работают и Generic Unpacker и QUnpak (и на выходе файл один-в-один) Вобщем-то я уже сломал её, но онтересны именно мелочи. Слом такой (ориг. файл, не распакованный): Code:
Code:
Первая строка - меняем байты в распакованном коде с 2 на 0FA000, и получаем вместо 2кб - 64мб (куда уж больше ![]() Вторая строка - прыжок на OEP. Все комментарии, замечания и критика приветствуются, ибо новичек, до советов - голодный. ![]() ![]() |
|
Создано: 25 мая 2009 02:53 · Личное сообщение · #12 Ну, вообще-то, я соврал немного, оказывается. После твоего поста посмотрел в About, - также без оверлея "Пи license". С оверлеем нормальное "No license". А распаковать UPX как-то не так надо еще умудриться, не думаю, что файлы у нас получились разные. Посмотри, если хочешь rapidshare.com/files/236871780/Dumped1.rar.html Процесс для UPX (неважно, скрэмблированный или нет): В Оле идем в конец секции кода (по Олиной интерпретации) и ставим брейкпойнт на последний JMP. Запускаем. После прерывания еще один шаг и мы на OEP. Дамп, импорт, правка заголовка дабы Оля не ругалась, прикручивание оверлея (если есть). Вроде всё. По поводу "ткните пальцем", уже ведь тыкали - в конце нераспакованного файла. По твоему инлайну, а зачем такой длинный прыжок аж на 595еее? ![]() |
|
Создано: 25 мая 2009 04:27 · Поправил: ClockMan · Личное сообщение · #13 EST2000WinHex и PeTools тебе в руки ![]() Открываешь упакованный файл в ре редакторе на вкладке секций смотришь последнию секцию а именно значение RawOffset и Raw Size складываешь их вместе и запоменаешь это число,открываешь этот фаый в WinHex и идёшь по этому адресу точто начинается с этого адреса это оверлей в твоём случае это 99A0 ![]() ----- Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли. ![]() |
|
Создано: 25 мая 2009 10:37 · Личное сообщение · #14 |
|
Создано: 25 мая 2009 11:06 · Личное сообщение · #15 SVLab пишет: По твоему инлайну, а зачем такой длинный прыжок аж на 595еее? Пробовал недалеко от прыжка делать - перестал запускаться, может проверка пакера какая-то, а может нужно это место для чего, пробовал отследить на запись, результатов не получил, не стал дальше копать - спустился почти под конец файла и всё заработало. ClockMan пишет: начинается с этого адреса это оверлей в твоём случае это 99A0 Точно! ![]() ![]() |
|
Создано: 25 мая 2009 11:36 · Личное сообщение · #16 Archer пишет: Сходу вопрос: поставить галку в QuickUnpack для обработки оверлея не пробовал? Если дело в нём, должно прокатить. прокатило, а почему раньше не сделал - QUnpack ещё 1.5 без галочки этой был (ступил ![]() ![]() Неужели придется трейсить и сравнивать потом киллометры трейс-лога ?! ![]() ![]() |
|
Создано: 25 мая 2009 12:20 · Личное сообщение · #17 |
|
Создано: 25 мая 2009 16:29 · Поправил: Jupiter · Личное сообщение · #18 файл можно распаковать при помощи upx -d для этого нужно исправить имена секций (на UPX0 и UPX1) и подкорректировать данные для распаковки UPX по шагам: 1. Имя первой секции: UPX0 2. Имя второй секции: UPX1 3. На позиции файла 3E0h вписать данные значения: Code:
после чего файл будет распакован по команде Code:
----- EnJoy! ![]() |
|
Создано: 25 мая 2009 19:12 · Личное сообщение · #19 |
|
Создано: 25 мая 2009 21:06 · Личное сообщение · #20 |
|
Создано: 25 мая 2009 22:44 · Личное сообщение · #21 |
|
Создано: 25 мая 2009 23:07 · Личное сообщение · #22 tihiy_grom пишет: это не оригинальный способ это правильный способ Век живи, век учись ![]() ![]() Jupiter пишет: это способ, который я пробую первым: он экономит время За описание данного способа - спасибо ![]() Также выражаю огромную благодарность всем, за помощь, комментарии и потраченное (надеюсь не совсем зря) время. Спасибо! Тему пока не закрываю, всё интересно всё же про панельки узнать, в принципе мелочь-мелочью, любопытно отчего так происходит (получается из-за распаковки). по идее это есть часть кода, которая перестала работать, интересно почему, а главное - нет ли где ещё таких участков "кривых". Наверное надо всё же трейсить и сравнивать. Но если есть у кого какие мысли или догадки - пишите ![]() ![]() |
|
Создано: 26 мая 2009 00:26 · Личное сообщение · #23 |
|
Создано: 26 мая 2009 18:47 · Поправил: EST2000 · Личное сообщение · #24 tihiy_grom пишет: рекомендую порыться тут ;) 0050FC5D |. E8 4E57F8FF CALL CofMaker.004953B0 и сразу станет всё понятно Точно!!! Проверка на размер файла! tihiy_grom - ты молодец! Образец размера файла франится в самом же файле: Code:
При запуске - текущий размер записывается сюда: Code:
В следствии дальнейших матем. манипуляций по адресу 0051A2F0 будет запись 00 00 (размер совпадает), либо значения не равные 00 00 (не совпадает). Насколько правильно я понял - в функции по дресу 004933C4 происходит загрузка компонентов формы, где и "всплывает" это значение. В зависимости от значения 0051A2F0 процес будет происходить по разному. Открываем WinHex, идем на смещение 122078h и меняем 02 E4 07 00 на 02 A0 18 00. Теперь вроде бы всё в порядке. С запакованным файлом таких проблем нет, т.к. хоть он и пропатченный, но размер от этого не изменился. ![]() |
|
Создано: 26 мая 2009 20:09 · Поправил: Valemox · Личное сообщение · #25 |
|
Создано: 26 мая 2009 21:25 · Поправил: SVLab · Личное сообщение · #26 |
|
Создано: 27 мая 2009 02:01 · Поправил: Valemox · Личное сообщение · #27 |
|
Создано: 27 мая 2009 07:10 · Поправил: SVLab · Личное сообщение · #28 |
|
Создано: 27 мая 2009 10:57 · Поправил: Valemox · Личное сообщение · #29 SVLab пишет: Вариант EST2000'а более надежный и правильный, т.к. проверяется не только здесь. Спорить не буду, но на мой вариант, покупается эта проверка. А где ты нашел еще проверку, которая не прокатывает? Если быть до конца точным, то вариант предложенный EST2000'ом можно упростить до замены 1-го байта по адресу 00513479 с E4 на A0, но он привязан к размеру файла (что не есть камильфо). ![]() |
|
Создано: 27 мая 2009 11:57 · Поправил: EST2000 · Личное сообщение · #30 SVLab пишет: Вроде там должно оставаться 01 00, а нули должны оставаться в 51а2е8 Очень может быть, я другие функции не проверял, ограничился тем, что функции сравнивают размер, и все берут его из одного места. Следовательно дав им понять, что размер действительно правильный - остальное должно идти правильно (теоретически) ![]() Valemox пишет: А где ты нашел еще проверку, которая не прокатывает? Я например нашел два места: Code:
Поэтому и решил исправить сам размер, чтобы не отлавливать все запросы на сравнение. А вот ещё вопрос: Если бы не эта самая вкладка, которая не открывалась, и не подсказка tihiy_grom может никогда и не узнал бы, что есть проверка на размер файла. Может быть там и проверка CRC есть ? Если пропатчивание файла не идет в разрез с его размером, то уж точно идет поперек CRC. Может такая проверка тоже есть, и тоже не видна "глазом" ? Как вообще можно определить такую проверку ? Как писал Jupiter "это способ, который я пробую первым", кто какой способ пробует первым для определение таких проверок ? ![]() |
. 1 . 2 . >> |
![]() |
eXeL@B —› Вопросы новичков —› Помогите разобраться с защитой :: UPX, Markus & Laszlo [Overlay] и ещё много-много страшных слов |