· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.RESEARCH —› Как патчить?

. 1 . 2 . >>

Посл.отвђт Сообщенiе


Дата: Янв 8, 2004 08:54:49

Привет Всем! Сегодня сломал System Mechanic Professional 4.0e .Он был запакован Аспаком 2.1 .
файл весил порядка 2 мегов а распакованый 8 мегов.Значит запаковал я ломаный файл аспаком назад.Создаю Cold Fusion ом Компаре патч.Патч вышел примерно 1.5 мегов.
Но мне же всего 7 байт надо пропатчить да и вобще че это за кряк весом в 1.5 мега.
Вопрос Что делать???


Дата: Янв 8, 2004 12:02:22

Ответ - пропатчить оригинальный пакованый _файл_, а не пакованные данные. В конце кода декомпрессора ASPack'a будет push oep/retn, вот где-то перед этим место можно сделать jmp на свой код, который пропатчит уже распакованную прогу прямо в памяти, а потом продолжит выполнение декомпрессора.


Дата: Янв 8, 2004 15:42:12

Dr.Golova

Есть информация подробнее? Я еще так не делал (было все проще).


Дата: Янв 8, 2004 18:24:37

CaNaBiS
щас под рукой статий нету

короче примерно так:
ищещь ret перед переходом на OEP, меняешь его на
jmp _свободное место внизу_

_внизу_ пишешь типа так:
mov byte ptr [адрес], байт_для_патча
ret


Короче лучше сам поиши инфу про in-line патчи или найди патчер для пакованых прог.


Дата: Янв 8, 2004 21:21:45

_внизу_ пишешь типа так:
mov byte ptr [адрес], байт_для_патча
ret

А можно вместо ретурна сразу прописать переход на OEP?

Да и чего то вобще не ладится это типа Программа выполняет недопустимую операцию. Информацию про инлайн патчинг не где не могу найти странно даже как то.


Дата: Янв 8, 2004 21:30:13

Kerghan

Вот только ret на jmp никак не заменишь, места не хватит :-)
Можно менять push OEP или ещё раньше найти подходящую по размеру инструкцию или несколько.


Дата: Янв 8, 2004 21:32:28

А можно вместо ретурна сразу прописать переход на OEP?

Можно, но тогда нужно обратить пристальное внимание на стек и поправить как полагается, лучше этого не делать, там и так хватает возможностей для творчества :-)


Дата: Янв 8, 2004 23:24:13

Не получается почему-то
перед push oep пишу mov dword ptr[000d5995],1BE0ABE9

Программа Выдает ошибку ! В айсе смотрю дальше там какая то левота т е push oep нету
Что я не так делаю?


Дата: Янв 9, 2004 00:00:42

Вот смотри типичный код перехода на OEP у ASPack'а:
005E83A9   8985 A8030000    MOV DWORD PTR SS:[EBP+3A8],EAX
005E83AF   61               POPAD
005E83B0   75 08            JNZ SHORT 005E83BA
005E83B2   B8 01000000      MOV EAX,1
005E83B7   C2 0C00          RETN 0C
005E83BA   68 5C585700      PUSH 0057585C
005E83BF   C3               RETN


теперь вместо этого PUSH 0057585C нужно прописать jmp свободное_место.
Свободное место обычно находится в конце секции в области выравнивания, там в файле идут
нули
005D0000   0000        ADD BYTE PTR DS:[EAX],AL
           0000        ADD BYTE PTR DS:[EAX],AL
           0000        ADD BYTE PTR DS:[EAX],AL
           0000        ADD BYTE PTR DS:[EAX],AL
           0000        ADD BYTE PTR DS:[EAX],AL


здесь начиная с адреса 0x5D0000 можешь вписать свой патч например так, синтаксис HiEW.
;---------- patch --------------------------------------
mov b,[00049915B],0EB        ; это если патчить байт
mov w,[000499998],026EB      ; слово
mov d,[000500000],0000198E9  ; двойное слово, то бишь DWORD
PUSH 0057585C ; <-это твоя OEP
ret
;------- end of patch ----------------------------------


Соответственно значения адресов патча и байты у тебя будут свои, ну и не забывай
про размерность кода, то бишь если в коде ты меняешь, например,
005E83BA   68 5C585700      PUSH 0057585C

размер 5 байт, 2-х байтной командой, то оставшиеся 3-и байта нужно забить nop'ами(опкод 90h),
ну и соответственно если вместо 5-ти байт ты хочешь поменять 6-ть, то тебе в данном случае
например нужно захватить ещё и ret
005E83BA   68 5C585700      PUSH 0057585C
005E83BF   C3               RETN


тем более что он не нужен, у тебя будет ret в твоём патче.

Всё остальное читай в статьях.

p.s. если у тебя версия ASPack'а 2.11 то нихрена так просто не пропатчишь :-)
придётся делать двух-ступенчатый патч :-)


Дата: Янв 9, 2004 00:03:14

Asterix

Этот push падчится самим Aspack. Ничего хорошего у тебя не получится, а получится invalide opcode.


Дата: Янв 9, 2004 00:11:33 · Поправил: Asterix

volodya

Это верно, я так никогда и не делаю, обычно я патчу здесь:
005E83A9   8985 A8030000    MOV DWORD PTR SS:[EBP+3A8],EAX ; <-этот mov как раз и пропишет OEP к push


Это я уже туплю, хотя невозможного нет.


Дата: Янв 9, 2004 02:13:41

Вот, чтобы не быть голословным :-) , сделал примерчик патча, push OEP здесь был по адресу 0x40A3BA, а сам патч я разместил по адресу 0x40B044 :-)

1936099528__COLORS.zip


Дата: Янв 9, 2004 03:19:22

Огромное спасибо Всем !
Сейчас буду разбираться со всем этим.


Дата: Янв 9, 2004 19:22:10

2 Asterix:
вроде все-таки не лучший вариант с заменой push

имхо лучше заменить первый длинный jmp снизу на
jmp свободное_место

типа:
jmp xxxxxxx
...code....
ret


Дата: Янв 9, 2004 20:34:39 · Поправил: Asterix

Kerghan

Какой jmp ты собрался менять?
005E835E   EB 16            JMP SHORT TOTALCMD.005E8376
005E8360   57               PUSH EDI
005E8361   8B46 0C          MOV EAX,DWORD PTR DS:[ESI+C]
005E8364   0385 22040000    ADD EAX,DWORD PTR SS:[EBP+422]
005E836A   50               PUSH EAX
005E836B   53               PUSH EBX
005E836C   8D85 C6040000    LEA EAX,DWORD PTR SS:[EBP+4C6]
005E8372   50               PUSH EAX
005E8373   57               PUSH EDI
005E8374   EB 4A            JMP SHORT TOTALCMD.005E83C0
005E8376   8907             MOV DWORD PTR DS:[EDI],EAX
005E8378   8385 49050000 04 ADD DWORD PTR SS:[EBP+549],4
005E837F  ^E9 32FFFFFF      JMP TOTALCMD.005E82B6
005E8384   8906             MOV DWORD PTR DS:[ESI],EAX
005E8386   8946 0C          MOV DWORD PTR DS:[ESI+C],EAX
005E8389   8946 10          MOV DWORD PTR DS:[ESI+10],EAX
005E838C   83C6 14          ADD ESI,14
005E838F   8B95 22040000    MOV EDX,DWORD PTR SS:[EBP+422]
005E8395  ^E9 EBFEFFFF      JMP TOTALCMD.005E8285
005E839A   B8 5C581700      MOV EAX,17585C
005E839F   50               PUSH EAX
005E83A0   0385 22040000    ADD EAX,DWORD PTR SS:[EBP+422]
005E83A6   59               POP ECX
005E83A7   0BC9             OR ECX,ECX
005E83A9   8985 A8030000    MOV DWORD PTR SS:[EBP+3A8],EAX
005E83AF   61               POPAD
005E83B0   75 08            JNZ SHORT TOTALCMD.005E83BA
005E83B2   B8 01000000      MOV EAX,1
005E83B7   C2 0C00          RETN 0C
005E83BA   68 00000000      PUSH 0
005E83BF   C3               RETN


Я же сказал, что обычно я делаю прыжок здесь:
005E83A9   8985 A8030000    MOV DWORD PTR SS:[EBP+3A8],EAX

Но в примере, для разнообразия, сделал по адресу push OEP, специально для Volodya ;-}

. 1 . 2 . >>


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.078