[C] Доступ к старой функции

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by VISTALL, 3 May 2010.

  1. VISTALL

    VISTALL Banned

    Joined:
    3 May 2010
    Messages:
    16
    Likes Received:
    0
    Reputations:
    0
    Здраствуйте.
    У мну есть файлик Test.exe + word.dll. В Test.exe я сначала вывожу с длл-ки word.dll метод Word() вывод:
    - "Word from Dll Normal\n"
    Потом хукаю метод и опять вывожу
    - "Word is Hooked\n"

    Вопрос как можно сделать что б я имел доступ к старому методу выво которого - "Word from Dll Normal\n", без снятия хука.

    Сам проект: http://dump.ru/file/4561840. VS 2008

    Забыл нада юзать чистый Си. не С++
     
  2. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    ну так запоминай адрес старого метода и потом когда нужно, то юзай. Хотя смотря как хук ставил.
     
    1 person likes this.
  3. VISTALL

    VISTALL Banned

    Joined:
    3 May 2010
    Messages:
    16
    Likes Received:
    0
    Reputations:
    0
    а пример) моно имхо я больше ява и шарп)(совсем другое)

    Я пробывал у мну чето вызывалась новая(захуканая)...
     
  4. VISTALL

    VISTALL Banned

    Joined:
    3 May 2010
    Messages:
    16
    Likes Received:
    0
    Reputations:
    0
    можно и переписать метод "SetHook", я не силен, но мне нужно. Есть ли знающие люди?)
     
  5. WNZRS

    WNZRS Member

    Joined:
    3 Sep 2009
    Messages:
    294
    Likes Received:
    52
    Reputations:
    1
    ты покажи свой код, тогда появятся умные люди.
     
  6. VISTALL

    VISTALL Banned

    Joined:
    3 May 2010
    Messages:
    16
    Likes Received:
    0
    Reputations:
    0
    интересно вот это
    что?)))

    с первогО:)
     
  7. WNZRS

    WNZRS Member

    Joined:
    3 Sep 2009
    Messages:
    294
    Likes Received:
    52
    Reputations:
    1
    чтобы вызвать старую функцию тебе надо при хуке запоминать байты
    Code:
    BYTE old1 = *(BYTE*)pfnDst; // JMP FAR
    DWORD old2 =*(DWORD*)((DWORD)pfnDst+1);
    и когда надо вызвать старую функцию возвращаешь байты назад...
     
  8. VISTALL

    VISTALL Banned

    Joined:
    3 May 2010
    Messages:
    16
    Likes Received:
    0
    Reputations:
    0
    в кратком снимать хук, а если не снимать?
     
  9. WNZRS

    WNZRS Member

    Joined:
    3 Sep 2009
    Messages:
    294
    Likes Received:
    52
    Reputations:
    1
    чтобы не снимать нужно не джамп делать, а просто поменять адрес в word_h
     
  10. VISTALL

    VISTALL Banned

    Joined:
    3 May 2010
    Messages:
    16
    Likes Received:
    0
    Reputations:
    0
    а можно пример ибо для мну указатели и управления памьять - это капец, путаюсь))

    Смотри мне нужно хукнуть метод, и с хукнутого иметь доступ к старому, прослойка - как говоря.

    Мож помочь?

    имхо соображалка работает:) ток опыта мало:)
     
  11. Ra$cal

    Ra$cal Elder - Старейшина

    Joined:
    16 Aug 2006
    Messages:
    670
    Likes Received:
    185
    Reputations:
    78
    вот и выросло поколение, которое не умеет работать и думать памятью...

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


    В момент хука высчитываем 4 байта перехода для команды call, чтобы попасть на originalWordCall и меняем их на лету, либо юзаем указатели на функции(хз есть ли они в си) и без всякого гемора
    Code:
    void (*originalWordFunc)();
    
    void callOriginal(){
        originalWordFunc = originalWordCall;
        (*originalWordFunc)();
    }
    Как то так. Гугл на тему сплайсинга раскроет тему пошире. Давно я этим баловался, могут быть косяки.
     
  12. VISTALL

    VISTALL Banned

    Joined:
    3 May 2010
    Messages:
    16
    Likes Received:
    0
    Reputations:
    0
    согласен)

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

    VISTALL Banned

    Joined:
    3 May 2010
    Messages:
    16
    Likes Received:
    0
    Reputations:
    0
    maybe up.

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