eXeL@B —› Основной форум —› пропатчить upx |
. 1 . 2 . >> |
Посл.ответ | Сообщение |
|
Создано: 30 июля 2006 20:08 · Личное сообщение · #1 статических анпакеров для Upx нет, окромя самого upx -d.. но если какой нибудь слишком хитрый девелопер чуток исправит файлик - upx начинает ругаться, типа CantUnpackException: file is possibly modified/hacked/protected; take care! кто нибудь пробывал пропатчить upx.exe что бы он не обращал на это внимание и распаковывал прогу? |
|
Создано: 30 июля 2006 20:24 · Поправил: YoriCH · Личное сообщение · #2 |
|
Создано: 30 июля 2006 20:29 · Личное сообщение · #3 |
|
Создано: 30 июля 2006 20:39 · Личное сообщение · #4 YoriCH пишет: но до конца не описано, то что ты хочешь. Описано до конца и предложены методы как исправить заголовок, чтобы статическая распаковка стала невозможной. Также выложены уже пофиксеные upx.exe для 2х предпоследних версий и утиль для восстановления сигнатуры. Последнюю версию я не смотрел, но, скорее всего, изложеные в статье методы применимы и к ней. |
|
Создано: 30 июля 2006 20:44 · Личное сообщение · #5 |
|
Создано: 30 июля 2006 20:52 · Личное сообщение · #6 Quantum Если у ж вы начинаете придираться к словам. В статье например не было указано место где можно удалить сравнение имени первой секции. Я понимаю, что это можно сделать и без него. Но ведь это не было указано? Поэтому я и не стал утверждать что там рассказано до конца и полностью про пропатчивания UPX.exe для отключения проверки валидности файла. ----- Есть вопросы ко мне? В личку! |
|
Создано: 30 июля 2006 21:13 · Личное сообщение · #7 |
|
Создано: 30 июля 2006 21:42 · Личное сообщение · #8 YoriCH В черновике это упоминалось. Кажется (точно уже не помню), Володя посчитал, что тривиальные вещи лучше не описывать, ведь статья ориентировалась на продвинутую аудиторию. Проверка имени секции в сорсах UPX буквально сразу бросается в глаза. Придираться к словам намерений не было. Nitrogen См. исходники. Если ключевые куски кода (которые упоминаются в статье) не изменились (а почему они должны были измениться?), можешь патчить. Если же полной уверенности нет, то можешь сначала потренироваться на собственноручно скомпилированной версии UPX, ведь сишный код патчить проще, чем машинный. и потерта сигнатура Если потёрта с умом, то восстановить её будет не так просто. |
|
Создано: 30 июля 2006 22:02 · Поправил: Nitrogen · Личное сообщение · #9 Quantum медетирую над кодом: .text:0040D8BD cmp eax, [ebx+28h] ; C_adler comparing
что-то никак не соображу как пропатчить а на счет сигнатуры - потерта начисто параметры пытаюсь восстановить подглядываю в другой запакованый wince .exe-шник, ну и recover upx |
|
Создано: 31 июля 2006 00:02 · Личное сообщение · #10 |
|
Создано: 31 июля 2006 01:01 · Личное сообщение · #11 |
|
Создано: 31 июля 2006 02:03 · Личное сообщение · #12 |
|
Создано: 31 июля 2006 02:33 · Поправил: YoriCH · Личное сообщение · #13 |
|
Создано: 31 июля 2006 07:18 · Личное сообщение · #14 slip ну наверно не нужно быть семи пядей во лбу что бы догнать до это. ты меня за дауна держишь? меня вообще-то интересовал вопрос: Функции вместо new_len нужно подсунуть адрес ph.u_len Quantum перепаковал кучу покетовых прог - фильтр всегда равен 0x5000 YoriCH ну на вопрос о замене new_len на u_len я там так и не нашел ответ - именно этот код как и был в первоначальном виде.. как от результата 0xFFFFFF37 избавиться.. а те джампы что правятся - ну это и ребенку понятно что именно нужно править.. или ты там написал просто то место где нужно править? так я его и сам нашел повторюсь - я не понял что на что нужно поменять. еще раз повторяю - никакого скармблера НЕТУ .ехе вообще написан под WinCE (Pocket PC), по причине отсутствия софта типа импрека и лордпе, мне и требуется статическая распаковка |
|
Создано: 31 июля 2006 08:11 · Личное сообщение · #15 Nitrogen Сорри не догнал сути вопроса. По аналогии со статьей насколько я понял вместо new_len нужно подсунуть адрес ph.u_len: .text:0040D8C7 mov eax, [ebx+1Ch] .text:0040D8CA push dword ptr [ebx+14h] .text:0040D8CD mov [ebp-10h], eax .text:0040D8D0 lea eax, [ebp-10h] ; надо lea eax, [ebx+1Ch] .text:0040D8D3 push eax .text:0040D8D4 push esi .text:0040D8D5 push dword ptr [ebx+20h] .text:0040D8D8 push edi .text:0040D8D9 call _upx_decompress по адресу 0040D8D0 вместо 8D45F0 пропатчить 8D431C Вопрос только нужно ли это там делать? ----- Есть вопросы ко мне? В личку! |
|
Создано: 31 июля 2006 08:33 · Личное сообщение · #16 |
|
Создано: 31 июля 2006 08:49 · Личное сообщение · #17 |
|
Создано: 31 июля 2006 08:54 · Личное сообщение · #18 |
|
Создано: 31 июля 2006 09:06 · Личное сообщение · #19 Nitrogen В статье: ... Что до u_len и c_len, то проверку валидности данных полей вы уже отключили но, в отличии от адлеров, выбор значений u_len и c_len налагает некоторую ответственность. Дело в том, что UPX резервирует два буфера в памяти: один размером с u_len для временного хранения распакованного файла, другой размером с c_len для чтения запакованного содержимого файла. Понятно, что если задать слишком маленькое значение для u_len, то распакованный файл просто не поместится в буфер. С другой стороны, слишком большое значение заставит UPX потреблять больше динамической памяти. Для u_len вполне подойдёт значение 000FFFFF (FFFF0F00 в little endian) для большинства упакованных экзешников. С c_len чуть сложнее. Опять же, слишком маленькое значение вызовет конфликтную ситуацию с динамической памятью, но слишком большое, кроме излишнего расхода памяти, отрицательно воздействует на сам процесс распаковки. Иначе говоря, фокус с 000FFFFF не пройдёт. ... так по идее там нужно для них выставить значения. ----- Есть вопросы ко мне? В личку! |
|
Создано: 31 июля 2006 18:24 · Личное сообщение · #20 Nitrogen пишет: перепаковал кучу покетовых прог - фильтр всегда равен 0x5000 Это зависит от алгоритма сжатия, размера файла и ещё от чего-то. Nitrogen пишет: ну именно здесь распаковщик возвращает ошибку А чем ты правишь заголовок UPX? Если ручками, то не забудь восстановить CRC. Обычно upx допускает некоторую неточность в значении c_len, причём, если c_len меньше правильного значения - вылетает одно исключение, а если больше - другое. |
|
Создано: 31 июля 2006 20:05 · Личное сообщение · #21 |
|
Создано: 31 июля 2006 20:09 · Личное сообщение · #22 |
|
Создано: 31 июля 2006 20:13 · Личное сообщение · #23 |
|
Создано: 31 июля 2006 21:18 · Личное сообщение · #24 Nitrogen Quantum Обычно upx допускает некоторую неточность в значении c_len, причём, если c_len меньше правильного значения - вылетает одно исключение, а если больше - другое. Опять же интересно, а возможно залезть в процедуру проверки c_len, где происходит смена исключений в зависимости от размера и границу их смены(размер при котором не наступает ни одно из исключений) сообщать пользователю? А u_len просто задать больше предполагаемого размера распакованного файла. (хр.. со временем обработки). ----- Есть вопросы ко мне? В личку! |
|
Создано: 31 июля 2006 21:33 · Личное сообщение · #25 |
|
Создано: 31 июля 2006 21:41 · Личное сообщение · #26 |
|
Создано: 31 июля 2006 21:48 · Личное сообщение · #27 |
|
Создано: 31 июля 2006 21:58 · Личное сообщение · #28 |
|
Создано: 31 июля 2006 22:19 · Личное сообщение · #29 |
|
Создано: 31 июля 2006 22:24 · Поправил: ev1l_4 · Личное сообщение · #30 |
. 1 . 2 . >> |
eXeL@B —› Основной форум —› пропатчить upx |