Сейчас на форуме: vsv1, _MBK_ (+3 невидимых)

 eXeL@B —› Вопросы новичков —› CALL: Возвращение значения (ASM+HEX)
Посл.ответ Сообщение

Ранг: 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.040
Статус: Участник

Создано: 28 августа 2007 17:49 · Поправил: El_Diablo
· Личное сообщение · #2

Правь инструкцию test al,al на test al,5 ... и т.д.
или правт первые баты функции call sub_40E730...
З.Ы.: в твоем случае с JNZ прыжок должен срабатывать или нет?



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

Создано: 28 августа 2007 17:49
· Личное сообщение · #3

Зависит от того что внутри call sub_40E730, надо смотреть место где al присваивается значение (обычно в конце функции) и патчить это место, чтобы в любом случае в al попадало нужное значение.
Сразу на входе возврат не всегда бывает корректно.




Ранг: 340.0 (мудрец), 22thx
Активность: 0.120
Статус: Участник
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.140
Статус: Участник
Робо-Алкаш

Создано: 28 августа 2007 18:52
· Личное сообщение · #7

А как это относится к программированию? И в чем разница между таким патчингом и таким? Ни какой разницы ты как патчил, так и патчишь)

-----
Researcher




Ранг: 3.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 28 августа 2007 19:17
· Личное сообщение · #8

Просто вызов sub_40E730 происходит из многих мест, и патчить все джампы не интересно. А так, подправивши функцию, вылечиваются все ждампы сразу )




Ранг: 387.4 (мудрец)
Активность: 0.170
Статус: Участник
системщик

Создано: 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.680
Статус: Модератор
Author of DiE

Создано: 28 августа 2007 21:11
· Личное сообщение · #11

всё же лучше не так патчить, мало ли, може в функции есть что то важное...

ближе к ret-y функи будет комманда:

mov al,[ebp-xx]
или
mov eax,ebx

вот лучше пропатчить это или вообще найти нужный прыжок в самой функе и пропатчить

-----
[nice coder and reverser]





Ранг: 387.4 (мудрец)
Активность: 0.170
Статус: Участник
системщик

Создано: 29 августа 2007 02:39
· Личное сообщение · #12

Hellspawn, ну по разному бывает... Например ф-ция начинает показывать диалоги. В любом случае надо смотреть код, морщить моск и тестировать



Ранг: 3.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 29 августа 2007 10:16
· Личное сообщение · #13

Hellspawn, в моем случае, эта функция проверяет регистрацию и отображает назойлевое сообщение. Ты прав насчет важности, но в моем случае в ней точно нет ничего полезного, и чем быстрее мы выйдем из функции, тем производительней программа будет




Ранг: 126.7 (ветеран)
Активность: 0.140
Статус: Участник
#CCh

Создано: 29 августа 2007 12:03
· Личное сообщение · #14

надежность важнее нескольки тактов процессора, никогда не знаешь, что у аффтара в голове.. а вообще если хотите переступить период банального патчинга, то реверсите саму функу и думайте, что сделоть, чтобы обойтись вообще без патчинга..

-----
invoke OpenFire



 eXeL@B —› Вопросы новичков —› CALL: Возвращение значения (ASM+HEX)
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


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