Посл.ответ |
Сообщение |
Ранг: 3.0 (гость) Активность: 0=0 Статус: Участник
|
Создано: 28 августа 2007 17:40 · Личное сообщение · #1
Приветствую Вас, мои уважаемые коллеги. Пришел тот час, когда я решил шагнуть немного вперед, перешагнув период банального ждамп-патчинга.
Мой вопрос заключается в следующем: Мне необходимо научиться возвращать определенно значение call. В примере ниже, по адресу 0041EBFA вызывается sub_40E730, в котором происходит много чего, и в зависимости от результата возвращается значение, от которого зависит прыжок по адресу 0041EC01.
.text:0041EBFA call sub_40E730
.text:0041EBFF test al, al
.text:0041EC01 jnz loc_42091A
Вместо банального патча ждампа, я бы хотел подправить sub_40E730, добавив сразу на его входе возврат функции. Как мне манипулировать значение? К примеру как заставить JNZ быть TRUE/FALSE?
Идиальный ответ будет в виде ASM кода + его HEX значение. Любые замечания, альтернативные предложения решения этой проблемы приветствуются. Спасибо.
| Сообщение посчитали полезным: |
|
Ранг: 59.9 (постоянный) Активность: 0.04↘0 Статус: Участник
|
Создано: 28 августа 2007 17:49 · Поправил: El_Diablo · Личное сообщение · #2
Правь инструкцию test al,al на test al,5 ... и т.д.
или правт первые баты функции call sub_40E730...
З.Ы.: в твоем случае с JNZ прыжок должен срабатывать или нет?
| Сообщение посчитали полезным: |
Ранг: 35.6 (посетитель) Активность: 0.02↘0 Статус: Участник
|
Создано: 28 августа 2007 17:49 · Личное сообщение · #3
Зависит от того что внутри call sub_40E730, надо смотреть место где al присваивается значение (обычно в конце функции) и патчить это место, чтобы в любом случае в al попадало нужное значение.
Сразу на входе возврат не всегда бывает корректно.
| Сообщение посчитали полезным: |
 Ранг: 340.0 (мудрец), 22thx Активность: 0.12↘0 Статус: Участник THETA
|
Создано: 28 августа 2007 18:05 · Личное сообщение · #4
Обрати внимание на семейство команд SETcc.
----- Программист SkyNet | Сообщение посчитали полезным: |
Ранг: 3.0 (гость) Активность: 0=0 Статус: Участник
|
Создано: 28 августа 2007 18:23 · Личное сообщение · #5
Просмотрел с конца sub_40E730, и заметил в не нужных мне условиях присвоение значения al:
.text:004134D6 mov al, 1 ;HEX значение B0 01
Логично предположить, что если при входе функции sub_40E730 я пропишу:
mov al, 0
retn
То мой ждамп прыгать не будет... пойду проверять
| Сообщение посчитали полезным: |
Ранг: 3.0 (гость) Активность: 0=0 Статус: Участник
|
Создано: 28 августа 2007 18:33 · Личное сообщение · #6
Да, работает как и ожидалось. Спасибо!!!
| Сообщение посчитали полезным: |
 Ранг: 155.4 (ветеран) Активность: 0.14↘0 Статус: Участник Робо-Алкаш
|
Создано: 28 августа 2007 18:52 · Личное сообщение · #7
А как это относится к программированию? И в чем разница между таким патчингом и таким? Ни какой разницы ты как патчил, так и патчишь)
----- Researcher | Сообщение посчитали полезным: |
Ранг: 3.0 (гость) Активность: 0=0 Статус: Участник
|
Создано: 28 августа 2007 19:17 · Личное сообщение · #8
Просто вызов sub_40E730 происходит из многих мест, и патчить все джампы не интересно. А так, подправивши функцию, вылечиваются все ждампы сразу )
| Сообщение посчитали полезным: |
 Ранг: 387.4 (мудрец) Активность: 0.17↘0 Статус: Участник системщик
|
Создано: 28 августа 2007 19:28 · Личное сообщение · #9
PaXa, ессно питчить саму функцию лучше. Можешь взять hiew, открыть начало функции в disasm режиме, потом F3 (Edit), F2 (Asm). И теперь набей любые инструкции в виде мнемоник:
xor eax, eax
inc eax
retn
| Сообщение посчитали полезным: |
Ранг: 3.0 (гость) Активность: 0=0 Статус: Участник
|
Создано: 28 августа 2007 20:58 · Личное сообщение · #10
s0larian, спасибо, не знал что в hiew можно писать asm инструкции. Очень полезная штука.
| Сообщение посчитали полезным: |
 Ранг: 990.2 (! ! !), 380thx Активность: 0.68↘0 Статус: Модератор Author of DiE
|
Создано: 28 августа 2007 21:11 · Личное сообщение · #11
всё же лучше не так патчить, мало ли, може в функции есть что то важное...
ближе к ret-y функи будет комманда:
mov al,[ebp-xx]
или
mov eax,ebx
вот лучше пропатчить это  или вообще найти нужный прыжок в самой функе и пропатчить
----- [nice coder and reverser] | Сообщение посчитали полезным: |
 Ранг: 387.4 (мудрец) Активность: 0.17↘0 Статус: Участник системщик
|
Создано: 29 августа 2007 02:39 · Личное сообщение · #12
Hellspawn, ну по разному бывает... Например ф-ция начинает показывать диалоги. В любом случае надо смотреть код, морщить моск и тестировать
| Сообщение посчитали полезным: |
Ранг: 3.0 (гость) Активность: 0=0 Статус: Участник
|
Создано: 29 августа 2007 10:16 · Личное сообщение · #13
Hellspawn, в моем случае, эта функция проверяет регистрацию и отображает назойлевое сообщение. Ты прав насчет важности, но в моем случае в ней точно нет ничего полезного, и чем быстрее мы выйдем из функции, тем производительней программа будет
| Сообщение посчитали полезным: |
 Ранг: 126.7 (ветеран) Активность: 0.14↘0 Статус: Участник #CCh
|
Создано: 29 августа 2007 12:03 · Личное сообщение · #14
надежность важнее нескольки тактов процессора, никогда не знаешь, что у аффтара в голове.. а вообще если хотите переступить период банального патчинга, то реверсите саму функу и думайте, что сделоть, чтобы обойтись вообще без патчинга..
----- invoke OpenFire | Сообщение посчитали полезным: |