使用 Hooking wsocks32.dll 通过代理隧道化应用程序的所有连接
Tunneling all connections of an application through a proxy with Hooking wsocks32.dll
我从网上找到了这个项目,我想开发它。
项目分为两部分。
1。注射器应用程序。
2。用于注入应用程序的 dll(chrome.exe 或任何应用程序。)
as 通过代理隧道化应用程序的所有连接。
1.dll注入程序。工作正常!
2。注入器应用程序运行 "chrome.exe" 并将我的 DLL 注入 chrome。工作正常!
3。我的 dll 必须将 "wsocks32.dll" 函数替换为 chrome.exe 中的 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;
}
解决方案:
ReplaceIATEntryInOneMod("wsock32.dll",(PROC)OriginalConnect,(PROC)MyConnect,hModCaller);
到
ReplaceIATEntryInOneMod("WS2_32.dll",(PROC)OriginalConnect,(PROC)MyConnect,hModCaller);
我从网上找到了这个项目,我想开发它。
项目分为两部分。
1。注射器应用程序。
2。用于注入应用程序的 dll(chrome.exe 或任何应用程序。)
as 通过代理隧道化应用程序的所有连接。
1.dll注入程序。工作正常!
2。注入器应用程序运行 "chrome.exe" 并将我的 DLL 注入 chrome。工作正常!
3。我的 dll 必须将 "wsocks32.dll" 函数替换为 chrome.exe 中的 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;
}
解决方案:
ReplaceIATEntryInOneMod("wsock32.dll",(PROC)OriginalConnect,(PROC)MyConnect,hModCaller);
到
ReplaceIATEntryInOneMod("WS2_32.dll",(PROC)OriginalConnect,(PROC)MyConnect,hModCaller);