Какаята лабуда со стеком

Тема в разделе "WASM.BEGINNERS", создана пользователем spa, 13 ноя 2006.

  1. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    Код (Text):
    1. int RealMessageBoxA(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType)
    2. {
    3.     DWORD dwBytes;
    4.     WriteProcessMemory(INVALID_HANDLE_VALUE, PtrZwq, &OldZwq, sizeof(OldCode), &dwBytes);
    5.     int r = MessageBoxA(hWnd,lpText,lpCaption,uType);
    6.     WriteProcessMemory(INVALID_HANDLE_VALUE, PtrZwq, &JmpZwq, sizeof(far_jmp), &dwBytes);
    7.     return r;
    8. }
    9.  
    10. int NewMessageBoxA(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType)
    11. {
    12.     return RealMessageBoxA(hWnd,lpText,lpCaption,uType);;
    13. }
    14.  
    15.  
    16. void SetHook(void)
    17. {
    18. DWORD dwBytes;
    19. PtrZwq = GetProcAddress(GetModuleHandleA("user32"), "MessageBoxA");
    20. ReadProcessMemory(INVALID_HANDLE_VALUE, PtrZwq, &OldZwq, sizeof(OldCode), &dwBytes);
    21. JmpZwq.PuhsOp = 0x68;
    22. JmpZwq.PushArg = (PROC)&NewMessageBoxA;
    23. JmpZwq.RetOp = 0xC3;
    24. WriteProcessMemory(INVALID_HANDLE_VALUE, PtrZwq, &JmpZwq, sizeof(far_jmp), &dwBytes);
    25. }
    После вызова
    Код (Text):
    1. LoadLibraryA("ing.dll");
    2.     Sleep(1000);
    3.     MessageBoxA(0,"!!!","!!",0);
    Происходит падение программы
     
  2. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    Извиняюсь забыл сказать SetHook при загрузке DLL вызываеться, и еще мне надо именно решение на Си(иначе и вопроса бы не было :))
     
  3. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    функция NewMessageBoxA должна быть аналогична MessageBoxA а значит тоже stdcall
     
  4. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    Всё заработало, но я просто дописал WINAPI в определении ф/ии, а какие еще есть макросы(чтоли), а то ведь моя задача не сводилась к перехвату Месагов
     
  5. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    WINAPI в хидерах определена как __stdcall