【发布时间】:2015-03-01 11:54:54
【问题描述】:
我从网上找到了这个项目,我想开发它。
项目有两个部分。
1。一个注射器应用程序。
2。用于注入应用程序(chrome.exe 或任何应用程序)的 dll。
作为通过代理隧道连接应用程序的所有连接。
1.dll注入程序。工作正常!
2。注入器应用程序运行“chrome.exe”并将我的 DLL 注入到 chrome。工作正常!
3。我的 dll 必须将“wsocks32.dll”函数替换为我在 chrome.exe 中的 dll 函数。失败!
4。从 Chrome.exe 打开的网站,必须通过代理运行...失败!
问题:
此功能“ReplaceIAEntryInOneMod”正在替换应用程序的功能。
但是 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;
}
【问题讨论】:
-
请在您的问题中添加一些调试结果。代码在哪里没有达到您的预期?