|
|
| Посл.отвђт | Сообщен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 ;-} |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.078 |