首页
社区
课程
招聘
[旧帖] [讨论]编了个劫持SETUPAPI.DLL的工具,谁完善一下. 0.00雪花
发表于: 2008-6-5 16:49 6949

[旧帖] [讨论]编了个劫持SETUPAPI.DLL的工具,谁完善一下. 0.00雪花

2008-6-5 16:49
6949
CFEAHook        HOOK_DeviceIoControl;
HHOOK        hMesHook        = NULL ;
HWND        hWnd                = NULL ;
HINSTANCE        hInst = NULL ;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// AheadLib 命名空间
namespace AheadLib
{
        HMODULE m_hModule = NULL;        // 原始模块句柄
        DWORD m_dwReturn[599] = {0};        // 原始函数返回地址

        // 加载原始模块
        inline BOOL WINAPI Load()
        {
                TCHAR tzPath[MAX_PATH];
                TCHAR tzTemp[MAX_PATH * 2];

                GetSystemDirectory(tzPath, MAX_PATH);
                lstrcat(tzPath, TEXT("\\setupapi.dll"));
                m_hModule = LoadLibrary(tzPath);
                if (m_hModule == NULL)
                {
                        wsprintf(tzTemp, TEXT("无法加载 %s,程序无法正常运行。"), tzPath);
                        MessageBox(NULL, tzTemp, TEXT("AheadLib"), MB_ICONSTOP);
                }

                return (m_hModule != NULL);       
        }
               
        // 释放原始模块
        inline VOID WINAPI Free()
        {
                if (m_hModule)
                {
                        FreeLibrary(m_hModule);
                }
        }
int WINAPI MY_DeviceIoControl(
                                  HANDLE hDevice,
                                  DWORD dwIoControlCode,
                                  LPVOID lpInBuffer,
                                  DWORD nInBufferSize,
                                  LPVOID lpOutBuffer,
                                  DWORD nOutBufferSize,
                                  LPDWORD lpBytesReturned,
                                  LPOVERLAPPED lpOverlapped
                                  )

{
    HOOK_DeviceIoControl.UnHook () ;
        int ret=DeviceIoControl(           hDevice,
                                   dwIoControlCode,
                                   lpInBuffer,
                                   nInBufferSize,
                                   lpOutBuffer,
                                   nOutBufferSize,
                                   lpBytesReturned,
                                   lpOverlapped
                                  );
MessageBox(NULL,"完成1",NULL,1);

        HOOK_DeviceIoControl.ReHook () ;
DWORD dw;
WriteFile("c:\\aa.txt",&lpInBuffer,nInBufferSize,&dw,NULL);   
CloseHandle("c:\\aa.txt");          
return ret;       

}
LRESULT CALLBACK GetMsgProc ( int code, WPARAM wParam, LPARAM lParam )
{
        if (code > 0)
                {
                HOOK_DeviceIoControl.Hook("KERNERL32.dll", "DeviceIoControl",(FARPROC)MY_DeviceIoControl);
                }

        return CallNextHookEx ( hMesHook, code, wParam, lParam ) ;
}

inline BOOL WINAPI SetHook (INT iHookId )
{

                hMesHook = SetWindowsHookEx ( iHookId, GetMsgProc, NULL, GetCurrentThreadId()) ;
                return (hMesHook != NULL);
        }
inline VOID WINAPI SetUnHook ()        
        {
        if (hMesHook)
                {
                        UnhookWindowsHookEx(hMesHook);
        }
}

        // 获取原始函数地址
        FARPROC WINAPI GetAddress(PCSTR pszProcName)
        {
                FARPROC fpAddress;
                CHAR szProcName[16];
                TCHAR tzTemp[MAX_PATH];

                fpAddress = GetProcAddress(m_hModule, pszProcName);
                if (fpAddress == NULL)
                {
                        if (HIWORD(pszProcName) == 0)
                        {
                                wsprintf(szProcName, "%d", pszProcName);
                                pszProcName = szProcName;
                        }

                        wsprintf(tzTemp, TEXT("无法找到函数 %hs,程序无法正常运行。"), pszProcName);
                        MessageBox(NULL, tzTemp, TEXT("AheadLib"), MB_ICONSTOP);
                        ExitProcess(-2);
                }

                return fpAddress;
        }
}
using namespace AheadLib;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 入口函数
BOOL WINAPI DllMain(HMODULE hModule, DWORD dwReason, PVOID pvReserved)
{
  HANDLE   hfile;   
  hfile   =   CreateFile("c:\\aa.txt",   
  GENERIC_WRITE,   
  FILE_SHARE_WRITE,   
  NULL,   
  OPEN_ALWAYS,   
  FILE_ATTRIBUTE_NORMAL,   
  NULL);   

        if (dwReason == DLL_PROCESS_ATTACH)
        {
                DisableThreadLibraryCalls(hModule);
  //      MessageBox(NULL,"完成",NULL,1);
                SetHook (WH_CALLWNDPROC);

                return Load();
        }
        else if (dwReason == DLL_PROCESS_DETACH)
        {
                Free();
                SetUnHook ();
        }

        return TRUE;
}

没有勾住,谁完善一下

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 1
支持
分享
最新回复 (2)
雪    币: 2559
活跃值: (4029)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
要源码可以到891K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4g2F1M7r3q4U0K9#2)9J5k6h3y4F1i4K6u0r3N6X3W2W2N6%4c8Z5M7X3g2S2k6q4)9J5k6i4m8Z5M7q4)9K6c8Y4c8A6k6q4)9K6c8o6t1#2z5o6V1&6i4K6t1$3k6i4S2@1M7X3q4Q4x3@1c8H3j5h3N6W2i4K6t1#2x3@1b7I4i4@1f1^5i4@1u0r3i4K6V1&6i4@1f1&6i4K6R3%4i4K6S2o6i4@1f1#2i4K6S2q4i4@1u0n7i4@1f1@1i4@1t1^5i4K6S2n7i4K6u0W2
2008-6-5 16:57
0
雪    币: 2559
活跃值: (4029)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
将源代码上传了,麻烦有兴趣的朋友看一下如何??
上传的附件:
2008-6-5 21:15
0
游客
登录 | 注册 方可回帖
返回