使用Hooking wsocks32.dll通过代理隧道连接应用程序的所有连接

时间:2015-03-01 11:54:54

标签: c++ api hook

我从互联网上找到了这个项目,我想开发它。

项目有两个部分。
1。注射器应用程序。
2。用于注入应用程序的dll(chrome.exe或任何应用程序) as通过代理隧道连接应用程序的所有连接。


1. Dll喷油器程序。工作良好!
2。 Injector app运行“chrome.exe”并将我的DLL注入chrome。工作良好!
3。我的dll必须将“wsocks32.dll”函数替换为chrome.exe..Fail中的dll函数!
4。从Chrome.exe打开的网站必须通过代理工作......失败!

问题:
这个功能“ReplaceIATEntryInOneMod”正在取代应用程序的功能。
但是wsock32.dll函数无法替换。 我无法挂钩到wsock32.dll!

 ReplaceIATEntryInOneMod("wsock32.dll",(PROC)OriginalConnect,(PROC)MyConnect,hModCaller);**

但是,Kernel.dll的功能替换过程是成功的,工作正常。

ReplaceIATEntryInOneMod( "KERNEL32.dll",(PROC)OriginalLoadLibraryW,(PROC)MyLoadLibraryW,hModCaller );

任何人帮助我的原因是什么? 我的操作系统是Win7。

我的功能:

int ReplaceIATEntryInOneMod( PCSTR pszCalleeModName,PROC pfnCurrent, PROC pfnNew, HMODULE hModCaller )
{
ULONG ulSize;
PIMAGE_IMPORT_DESCRIPTOR pImportDesc;
pImportDesc = (PIMAGE_IMPORT_DESCRIPTOR)
ImageDirectoryEntryToData( hModCaller, TRUE,
IMAGE_DIRECTORY_ENTRY_IMPORT, &ulSize );
if (pImportDesc == NULL)
    return 2;  
for(; pImportDesc->Name; pImportDesc++)
{
    PSTR pszModName;
    pszModName = (PSTR)((PBYTE)hModCaller + pImportDesc->Name );
    if ( lstrcmpiA( pszModName, pszCalleeModName ) == 0 ) break;
}

if ( pImportDesc->Name == 0 ) 
    return 1;  

PIMAGE_THUNK_DATA pThunk;
pThunk = (PIMAGE_THUNK_DATA)((PBYTE)hModCaller + pImportDesc->FirstThunk );

for (; pThunk->u1.Function; pThunk++)
{
    PROC* ppfn = (PROC*)&pThunk->u1.Function;
    if (*ppfn == pfnCurrent)
    {
        DWORD dwDummy;
        VirtualProtect( ppfn, sizeof(PROC), PAGE_EXECUTE_READWRITE, &dwDummy );

        WriteProcessMemory( hCurrentProcess, ppfn, &pfnNew, sizeof(PROC),NULL);
        return 0;
        }
    }
    return -1; 
}

1 个答案:

答案 0 :(得分:0)

解决方案:

ReplaceIATEntryInOneMod("wsock32.dll",(PROC)OriginalConnect,(PROC)MyConnect,hModCaller);

ReplaceIATEntryInOneMod("WS2_32.dll",(PROC)OriginalConnect,(PROC)MyConnect,hModCaller);