Сейчас на форуме: Slinger, Rio (+6 невидимых)

 eXeL@B —› Основной форум —› пропатчить upx
. 1 . 2 . >>
Посл.ответ Сообщение


Ранг: 124.7 (ветеран)
Активность: 0.070
Статус: Участник

Создано: 30 июля 2006 20:08
· Личное сообщение · #1

статических анпакеров для Upx нет, окромя самого upx -d..
но если какой нибудь слишком хитрый девелопер чуток исправит файлик - upx начинает ругаться, типа CantUnpackException: file is possibly modified/hacked/protected; take care!
кто нибудь пробывал пропатчить upx.exe что бы он не обращал на это внимание и распаковывал прогу?




Ранг: 108.4 (ветеран)
Активность: 0.060
Статус: Участник

Создано: 30 июля 2006 20:24 · Поправил: YoriCH
· Личное сообщение · #2

Nitrogen
По моему как раз этим вопросом занимались в статье Об упаковщиках в последний раз. Часть вторая /06.11.03/ http://wasm.ru/article.php?article=packers2#8
там частично изложены методы, но до конца не описано, то что ты хочешь.

-----
Есть вопросы ко мне? В личку!




Ранг: 17.8 (новичок)
Активность: 0.010
Статус: Участник

Создано: 30 июля 2006 20:29
· Личное сообщение · #3

ИМХО единственный способ борьбы со скремблером - это динамическая распаковка ибо алго распаковки просто лаганет и ничего не распакует. я думаю что если чел захотел чтобы upx -d не сработал он найдет способ обламать алго. UPX к счастью не протектор, и сдампить его без проблем.



Ранг: 29.5 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 30 июля 2006 20:39
· Личное сообщение · #4

YoriCH пишет:
но до конца не описано, то что ты хочешь.

Описано до конца и предложены методы как исправить заголовок, чтобы статическая распаковка стала невозможной. Также выложены уже пофиксеные upx.exe для 2х предпоследних версий и утиль для восстановления сигнатуры. Последнюю версию я не смотрел, но, скорее всего, изложеные в статье методы применимы и к ней.




Ранг: 124.7 (ветеран)
Активность: 0.070
Статус: Участник

Создано: 30 июля 2006 20:44
· Личное сообщение · #5

у меня прога запакованая под WinCE, скрамблером и не пахнет, просто переименованы секции (фигня), и потерта сигнатура (из-за этого и не идет распаковка)




Ранг: 108.4 (ветеран)
Активность: 0.060
Статус: Участник

Создано: 30 июля 2006 20:52
· Личное сообщение · #6

Quantum
Если у ж вы начинаете придираться к словам.

В статье например не было указано место где можно удалить сравнение имени первой секции. Я понимаю, что это можно сделать и без него. Но ведь это не было указано? Поэтому я и не стал утверждать что там рассказано до конца и полностью про пропатчивания UPX.exe для отключения проверки валидности файла.

-----
Есть вопросы ко мне? В личку!





Ранг: 124.7 (ветеран)
Активность: 0.070
Статус: Участник

Создано: 30 июля 2006 21:13
· Личное сообщение · #7

Quantum
если возможность пропатчить 2ую версию upx?



Ранг: 29.5 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 30 июля 2006 21:42
· Личное сообщение · #8

YoriCH
В черновике это упоминалось. Кажется (точно уже не помню), Володя посчитал, что тривиальные вещи лучше не описывать, ведь статья ориентировалась на продвинутую аудиторию. Проверка имени секции в сорсах UPX буквально сразу бросается в глаза.

Придираться к словам намерений не было.

Nitrogen
См. исходники. Если ключевые куски кода (которые упоминаются в статье) не изменились (а почему они должны были измениться?), можешь патчить. Если же полной уверенности нет, то можешь сначала потренироваться на собственноручно скомпилированной версии UPX, ведь сишный код патчить проще, чем машинный.

и потерта сигнатура
Если потёрта с умом, то восстановить её будет не так просто.




Ранг: 124.7 (ветеран)
Активность: 0.070
Статус: Участник

Создано: 30 июля 2006 22:02 · Поправил: Nitrogen
· Личное сообщение · #9

Quantum
медетирую над кодом:
.text:0040D8BD cmp eax, [ebx+28h] ; C_adler comparing
.text:0040D8C0 jz short loc_40D8C7
.text:0040D8C2 call _checksum_error
.text:0040D8C7 loc_40D8C7:
.text:0040D8C7 mov eax, [ebx+1Ch] ; это ph.u_len
.text:0040D8CA push dword ptr [ebx+14h] ; ph.method
.text:0040D8CD mov [ebp-10h], eax
.text:0040D8D0 lea eax, [ebp-10h]
.text:0040D8D3 push eax ; &new_len
.text:0040D8D4 push esi ; out
.text:0040D8D5 push dword ptr [ebx+20h] ; ph.c_len
.text:0040D8D8 push edi ; in
.text:0040D8D9 call _upx_decompress

что-то никак не соображу как пропатчить

а на счет сигнатуры - потерта начисто параметры пытаюсь восстановить подглядываю в другой запакованый wince .exe-шник, ну и recover upx



Ранг: 50.3 (постоянный), 2thx
Активность: 0.020
Статус: Участник

Создано: 31 июля 2006 00:02
· Личное сообщение · #10

Nitrogen пишет:
.text:0040D8C0 jz short loc_40D8C7

меняй на джамп =)

А еще попробуй последний PE Explorer, он хорошо упксовые скрамблеры берет.



Ранг: 253.9 (наставник)
Активность: 0.130
Статус: Участник

Создано: 31 июля 2006 01:01
· Личное сообщение · #11

Статическая распаковка без потери качества возможна, если не потерты последние 28 байт (перед самой секцией кода). А вот если эти байтики потерты, то уже только дампить...

-----
MicroSoft? Is it some kind of a toilet paper?




Ранг: 29.5 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 31 июля 2006 02:03
· Личное сообщение · #12

Tim пишет:
если не потерты последние 28 байт

Единственное поле, которое эвристически или перебором восстановить практически невозможно - filter, т.е. последнее 2хбайтное поле перед CRC. Все остальные значения можно подобрать.




Ранг: 108.4 (ветеран)
Активность: 0.060
Статус: Участник

Создано: 31 июля 2006 02:33 · Поправил: YoriCH
· Личное сообщение · #13

Nitrogen
посмотри, мож что пригодиться тебе.
по статье немного.

-----
Есть вопросы ко мне? В личку!





Ранг: 124.7 (ветеран)
Активность: 0.070
Статус: Участник

Создано: 31 июля 2006 07:18
· Личное сообщение · #14

slip
ну наверно не нужно быть семи пядей во лбу что бы догнать до это. ты меня за дауна держишь? меня вообще-то интересовал вопрос: Функции вместо new_len нужно подсунуть адрес ph.u_len

Quantum
перепаковал кучу покетовых прог - фильтр всегда равен 0x5000

YoriCH
ну на вопрос о замене new_len на u_len я там так и не нашел ответ - именно этот код как и был в первоначальном виде.. как от результата 0xFFFFFF37 избавиться.. а те джампы что правятся - ну это и ребенку понятно что именно нужно править.. или ты там написал просто то место где нужно править? так я его и сам нашел повторюсь - я не понял что на что нужно поменять.

еще раз повторяю - никакого скармблера НЕТУ .ехе вообще написан под WinCE (Pocket PC), по причине отсутствия софта типа импрека и лордпе, мне и требуется статическая распаковка




Ранг: 108.4 (ветеран)
Активность: 0.060
Статус: Участник

Создано: 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

Вопрос только нужно ли это там делать?

-----
Есть вопросы ко мне? В личку!





Ранг: 124.7 (ветеран)
Активность: 0.070
Статус: Участник

Создано: 31 июля 2006 08:33
· Личное сообщение · #16

YoriCH
так не работает .. блин




Ранг: 108.4 (ветеран)
Активность: 0.060
Статус: Участник

Создано: 31 июля 2006 08:49
· Личное сообщение · #17

Nitrogen
может проблемы не здесь?

-----
Есть вопросы ко мне? В личку!





Ранг: 124.7 (ветеран)
Активность: 0.070
Статус: Участник

Создано: 31 июля 2006 08:54
· Личное сообщение · #18

YoriCH
ну именно здесь распаковщик возвращает ошибку




Ранг: 108.4 (ветеран)
Активность: 0.060
Статус: Участник

Создано: 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 не пройдёт.
...

так по идее там нужно для них выставить значения.

-----
Есть вопросы ко мне? В личку!




Ранг: 29.5 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 31 июля 2006 18:24
· Личное сообщение · #20

Nitrogen пишет:
перепаковал кучу покетовых прог - фильтр всегда равен 0x5000

Это зависит от алгоритма сжатия, размера файла и ещё от чего-то.

Nitrogen пишет:
ну именно здесь распаковщик возвращает ошибку

А чем ты правишь заголовок UPX? Если ручками, то не забудь восстановить CRC. Обычно upx допускает некоторую неточность в значении c_len, причём, если c_len меньше правильного значения - вылетает одно исключение, а если больше - другое.



Ранг: 50.3 (постоянный), 2thx
Активность: 0.020
Статус: Участник

Создано: 31 июля 2006 20:05
· Личное сообщение · #21

Nitrogen, ну наверное я знаю что ты умеешь немного больше чем править джамп
и наверное я тупо пошутил




Ранг: 124.7 (ветеран)
Активность: 0.070
Статус: Участник

Создано: 31 июля 2006 20:09
· Личное сообщение · #22

Quantum
угу, попробую с размерами поиграть и поглядеть какая ошибка
а заголовок правлю тем самым плагином о котором в статье написано

slip
сорри, смайл не углядел




Ранг: 299.6 (наставник)
Активность: 0.30
Статус: Участник
Armadillo Killer

Создано: 31 июля 2006 20:13
· Личное сообщение · #23

Nitrogen Выложи сам файлик




Ранг: 108.4 (ветеран)
Активность: 0.060
Статус: Участник

Создано: 31 июля 2006 21:18
· Личное сообщение · #24

Nitrogen
Quantum
Обычно upx допускает некоторую неточность в значении c_len, причём, если c_len меньше правильного значения - вылетает одно исключение, а если больше - другое.
Опять же интересно, а возможно залезть в процедуру проверки c_len, где происходит смена исключений в зависимости от размера и границу их смены(размер при котором не наступает ни одно из исключений) сообщать пользователю?
А u_len просто задать больше предполагаемого размера распакованного файла. (хр.. со временем обработки).

-----
Есть вопросы ко мне? В личку!





Ранг: 124.7 (ветеран)
Активность: 0.070
Статус: Участник

Создано: 31 июля 2006 21:33
· Личное сообщение · #25

YoriCH
да не вопрос, конечно можно в декомпрессе идет проверка метода, ну и соотв вызывается подпраграмма распаковки, она же и возвращает исключение




Ранг: 60.7 (постоянный), 12thx
Активность: 0.040
Статус: Участник
KpTeaM

Создано: 31 июля 2006 21:41
· Личное сообщение · #26

Nitrogen
Попробуй этим: h__p://www.zuola.net/uploadsoft/program/UPX-Ripper1.3.rar




Ранг: 124.7 (ветеран)
Активность: 0.070
Статус: Участник

Создано: 31 июля 2006 21:48
· Личное сообщение · #27

Runtime_err0r
ну а смысл? рипер он анпачит через дамп, не покатит на wince




Ранг: 124.7 (ветеран)
Активность: 0.070
Статус: Участник

Создано: 31 июля 2006 21:58
· Личное сообщение · #28

и ведь главно часть он распаковывает, в out на глаз виден армовый код..




Ранг: 60.7 (постоянный), 12thx
Активность: 0.040
Статус: Участник
KpTeaM

Создано: 31 июля 2006 22:19
· Личное сообщение · #29

Nitrogen пишет:
ну а смысл? рипер он анпачит через дамп, не покатит на wince

Ты не прав, это не дампер, он правит заголовок и пытается распаковать через upx.exe -d




Ранг: 66.5 (постоянный)
Активность: 0.030
Статус: Участник
Повелитель ЗЛА

Создано: 31 июля 2006 22:24 · Поправил: ev1l_4
· Личное сообщение · #30

Nitrogen
Выложи файл, все и посмотрять.
Так будет проще.


. 1 . 2 . >>
 eXeL@B —› Основной форум —› пропатчить upx
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати