Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   [C] Доступ к старой функции (https://forum.antichat.xyz/showthread.php?t=201331)

Ra$cal 04.05.2010 03:44

вот и выросло поколение, которое не умеет работать и думать памятью...

Вобщем надо сменить реализацию хука. Спертые байты переть не по пяткаку, а целыми командами с помощью дизасма длин(учитывая стабильность функции можно просто руками забить длины) и в надежде не словить в начале функции относительных переходов. Переписываем команды на новое место/
originalWordCall: ; тут спертые первые байты
jmp originalFuncNotSplicedCodeStart ; адрес с которого в оригинале идут нетронутые байты


В момент хука высчитываем 4 байта перехода для команды call, чтобы попасть на originalWordCall и меняем их на лету, либо юзаем указатели на функции(хз есть ли они в си) и без всякого гемора
Код:

void (*originalWordFunc)();

void callOriginal(){
    originalWordFunc = originalWordCall;
    (*originalWordFunc)();
}

Как то так. Гугл на тему сплайсинга раскроет тему пошире. Давно я этим баловался, могут быть косяки.

VISTALL 04.05.2010 10:56

Цитата:

Сообщение от Ra$cal
вот и выросло поколение, которое не умеет работать и думать памятью...

согласен)

поищу, если камуто не тяжело сделать пример, буду благодарен

VISTALL 07.05.2010 19:49

maybe up.

Ктото делал подобное?


Время: 22:28