Перехват функции InternetConnectW() из wininet.dll

Jan 11, 2010 at 1:48 PM

Всем привет! Я только начал изучение EasyHook.

Я сделал по примеру FileMon'а свою .dll. Вот код:

            // install hook...
            try
            {

                IntPtr handle = NativeAPI.LoadLibrary("c:\\windows\\system32\\wininet.dll");

                CreateFileHook = LocalHook.Create(LocalHook.GetProcAddress("wininet.dll", "InternetConnectW"), new DInternetConnectW(InternetConnectW_Hooked), this);
                CreateFileHook.ThreadACL.SetExclusiveACL(new Int32[] { 0 });

                NativeAPI.CloseHandle(handle);
            }
            catch (Exception ExtInfo)
            {
                Interface.ReportException(ExtInfo);

                return;
            }

           
//*************************************************Объявление делегата и импорт InternetConnectW()
        [UnmanagedFunctionPointer(CallingConvention.StdCall,
            CharSet = CharSet.Ansi,
            SetLastError = true)]
        delegate int DInternetConnectW(int hInternetSession,
            string sServerName,
            int nServerPort,
            string sUserName,
            string sPassword,
            int lService,
            int lFlags,
            int lContext);

        [DllImport("wininet.dll",
            CharSet = CharSet.Unicode,
            SetLastError = true,
            CallingConvention = CallingConvention.StdCall)]
        static extern int InternetConnectW(int hInternetSession,
            string sServerName,
            int nServerPort,
            string sUserName,
            string sPassword,
            int lService,
            int lFlags,
            int lContext);

   
//*********************************ХУК ФУНКЦИЯ на InternetConnectW**************************************
        static int InternetConnectW_Hooked(int hInternetSession,
            string sServerName,
            int nServerPort,
            string sUserName,
            string sPassword,
            int lService,
            int lFlags,
            int lContext)
        {
            
            return InternetConnectW(hInternetSession,
                sServerName,
                nServerPort,
                sUserName,
                sPassword,
                lService,
                lFlags,
                lContext);
        }


    }
}


Проблема в том, что браузер (IE) получает результат целевой функции 

InternetConnectW (return InternetConnectW(...)) => страница не открывается

Помогите , пожалуйста, разобраться...
ОС: Windows 7 32bit

p.s. интересно... хоть кто-нибудь это прочитает?))
Jan 27, 2010 at 8:38 PM

Я думаю, неверно переводишь аргументы из unmanaged code

Jan 27, 2010 at 9:10 PM

проблема уже решена)) но все равно спасибо, vivo ;-)

Jan 30, 2010 at 8:14 AM

Instead of hooking, for tcp access, why not using the WFM network filtering from the DDKwhich is also used by firewall, antivirus, ect.. ? & allow you to catch networks packets & catch them ! ? & on which you will have  a full compatibility for Win32/64 bits access