• 59 Vote(s) - 2.63 Average
  • 1
  • 2
  • 3
  • 4
  • 5
هوک کردن messagebox
#1
[C++] HookMsgBox
Code:
int WINAPI HookMessageBoxA(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType)
{
    return MessageBoxA(hWnd, "hi!", "how are you?", uType);
}

LPDWORD FoundIAT(char* funcName)
{
    DWORD test = 0;

    LPVOID pMapping = GetModuleHandle(NULL);
    if (pMapping == NULL)
        exit(-1);

    PIMAGE_DOS_HEADER DosHeader = (PIMAGE_DOS_HEADER) pMapping;

    if (DosHeader->e_magic != IMAGE_DOS_SIGNATURE)
        exit(-1);

    PIMAGE_NT_HEADERS NtHeaders = (PIMAGE_NT_HEADERS) ((char*) DosHeader + DosHeader->e_lfanew);

    if (NtHeaders->Signature != IMAGE_NT_SIGNATURE)
        exit(-1);

    PIMAGE_DATA_DIRECTORY DataDirectory = &NtHeaders->OptionalHeader.DataDirectory[1]; // Import symbols
    PIMAGE_IMPORT_DESCRIPTOR ImportDescriptor = (PIMAGE_IMPORT_DESCRIPTOR) ((char*) DosHeader + DataDirectory->VirtualAddress);

    PIMAGE_THUNK_DATA32 OriginalFirstThunk = (PIMAGE_THUNK_DATA32)((char*) DosHeader + ImportDescriptor->OriginalFirstThunk);

    while(OriginalFirstThunk != 0)
    {
        DWORD name = (DWORD)((char*) pMapping + ImportDescriptor->Name);
        
        OriginalFirstThunk = (PIMAGE_THUNK_DATA32)((char*) DosHeader + ImportDescriptor->OriginalFirstThunk);
        PIMAGE_THUNK_DATA32 FirstThunk = (PIMAGE_THUNK_DATA32)((char*) DosHeader + ImportDescriptor->FirstThunk);

        while(OriginalFirstThunk->u1.AddressOfData != 0)
        {
            PIMAGE_IMPORT_BY_NAME NameImg = (PIMAGE_IMPORT_BY_NAME)((char*) DosHeader + (DWORD)OriginalFirstThunk->u1.AddressOfData);

            test = (DWORD)OriginalFirstThunk->u1.Function & (DWORD)IMAGE_ORDINAL_FLAG32;
            if (test == 0)
            {
                if(strcmp(funcName, (const char*)NameImg->Name) == 0)
                {
                    return (LPDWORD)&(FirstThunk->u1.Function);
                }
            }
    
            OriginalFirstThunk++;
            FirstThunk++;
        }

        ImportDescriptor++;
    }

    return 0;
}Sursa: [Doar userii inregistrati pot vedea linkurile. ]

گروه دور همی پارسی کدرز
https://t.me/joinchat/GxVRww3ykLynHFsdCvb7eg
  Reply
#2
درود دوستان چندسوالی داشتم :
1.من یک تابع از DLL های ویندوز (advapi32) را می خواهم HOOK کنم باید از SetWindowsHookEx حتما استفاده کنم یا روش های دیگری هم هست آخه چند کد دیدم از این تابع استفاده نکرده بودند.
2.یک کد بدست آوردم برای هوک کردن اما این خطای                                                                                                                                                                                                                                Error    2    error LNK2019: unresolved external symbol "public: __thiscall CAPIHook::~CAPIHook(void)" (??1CAPIHook@@QAE@XZ) referenced in function "void __cdecl `dynamic atexit destructor for 'g_OpenProcess''(void)" (??__Fg_OpenProcess@@YAXXZ)  
دوستان می توانند راهنمایی کنند error مال کامپایر visual studio 2012 است
3.کسی با کد های داخل سایت .MADshi.net توانسته تابعی را هوک کند اگر توانسته و امکان هست بذاره .
  Reply


Possibly Related Threads...
Thread Author Replies Views Last Post
  برنامه ی مشخص کردن تعداد تکرار یک رشته در دیگری Ghoghnus 1 5,340 11-29-2012، 09:04 PM
Last Post: antengogoli
  سورس کد خالی کردن سطل زباله سیستم عامل ( سی ) Amin_Mansouri 0 2,643 06-16-2012، 08:25 PM
Last Post: Amin_Mansouri

Forum Jump:


Users browsing this thread: 1 Guest(s)