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

 eXeL@B —› Вопросы новичков —› Подмена ф-ции
Посл.ответ Сообщение

Ранг: 137.9 (ветеран), 45thx
Активность: 0.080
Статус: Участник

Создано: 22 января 2010 23:28
· Личное сообщение · #1

Есть вызов ф-ции DrawTextA из приложения по определеному адресу, хочу подменить на вызов своей ф-ци NewDrawTextA, пишу на делфях, делаю так:
JmpDrawTA.CallOp := $E8;
JmpDrawTA.CallArg := @NewDrawTextA;
...................................................................
WriteProcessMemory(INVALID_HANDLE_VALUE, AdrDrawTA, @JmpDrawTA, SizeOf(far_jmp_new), Bytes);
в итоге вызов идет в никуда, понимаю что ламерский вопрос, но прошу помощи.




Ранг: 605.2 (!), 341thx
Активность: 0.470.25
Статус: Модератор
Research & Development

Создано: 22 января 2010 23:36
· Личное сообщение · #2

ты пишешь в свой процесс?

-----
EnJoy!




Ранг: 137.9 (ветеран), 45thx
Активность: 0.080
Статус: Участник

Создано: 22 января 2010 23:42
· Личное сообщение · #3

Jupiter пишет:
ты пишешь в свой процесс?

нет, инжектю длл в чужой.



Ранг: 114.8 (ветеран), 41thx
Активность: 0.10
Статус: Участник

Создано: 23 января 2010 00:04
· Личное сообщение · #4

yanus0 пишет:
нет, инжектю длл в чужой.

тогда передавай в WriteProcessMemory хэндл этого процесса, а не INVALID_HANDLE_VALUE



Ранг: 137.9 (ветеран), 45thx
Активность: 0.080
Статус: Участник

Создано: 23 января 2010 00:18 · Поправил: yanus0
· Личное сообщение · #5

_ruzmaz_
спасибо, но хендл хендлом, а переход на ф-цию не получается. если делать переход через push: push adr; retn; то все ок, в adr адрес функции тоесть:
JmpDrawTA.CallOp := $68;
JmpDrawTA.CallArg := @NewDrawTextA;
JmpDrawTA.NopOp:= $С3;
а через call не получаеться.
структура
far_jmp_new = packed record
CallOp: byte;
CallArg: pointer;
NopOp:byte;
end;



Ранг: 114.8 (ветеран), 41thx
Активность: 0.10
Статус: Участник

Создано: 23 января 2010 00:23 · Поправил: _ruzmaz_
· Личное сообщение · #6

yanus0 пишет:
far_jmp_new = packed record
CallOp: byte;
CallArg: pointer;
NopOp:byte;
end;

а CallArg как вычисляешь для перехода через call?




Ранг: 533.6 (!), 232thx
Активность: 0.450
Статус: Uploader
retired

Создано: 23 января 2010 00:32
· Личное сообщение · #7

_ruzmaz_
yanus0 пишет:
JmpDrawTA.CallArg := @NewDrawTextA;

наверное она и есть в этой длл что инжектится

-----
Лучше быть одиноким, но свободным © $me




Ранг: 114.8 (ветеран), 41thx
Активность: 0.10
Статус: Участник

Создано: 23 января 2010 00:47 · Поправил: _ruzmaz_
· Личное сообщение · #8

BoRoV пишет:
наверное она и есть в этой длл что инжектится

наверно так, да
yanus0 пишет:
JmpDrawTA.CallOp := $E8;
JmpDrawTA.CallArg := @NewDrawTextA;
...................................................................

тогда там нужно не @NewDrawTextA, а смещение NewDrawTextA относительно инструкции, следующей за call




Ранг: 605.2 (!), 341thx
Активность: 0.470.25
Статус: Модератор
Research & Development

Создано: 23 января 2010 04:20
· Личное сообщение · #9

про 5 байт call'a не забывай

-----
EnJoy!




Ранг: 137.9 (ветеран), 45thx
Активность: 0.080
Статус: Участник

Создано: 23 января 2010 20:56
· Личное сообщение · #10

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


 eXeL@B —› Вопросы новичков —› Подмена ф-ции
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати