怎样卸载其他进程的DLL文件?

[复制链接]
查看11 | 回复4 | 2008-3-23 21:13:25 | 显示全部楼层 |阅读模式
卸载其他进程已加载模块作者:webfly 日期:2006-10-21字体大小: 小 中 大#i nclude "stdafx.h" #i nclude#i nclude#i ncludetypedef struct RemoteInfo { DWORD dwLoadLibrary; DWORD ModuleAddr;}RemotePara; //传递给远程线程的参数 DWORD WINAPI ThreadProc (RemotePara *lpPara) {
typedef BOOL (__stdcall *pFreeLibrary)(DWORD); pFreeLibrary pFuckLibrary; pFuckLibrary = (pFreeLibrary)lpPara->dwLoadLibrary; pFuckLibrary(lpPara->ModuleAddr); //模块基地址 return 0; } int main(int argc, char* argv[]) {
MODULEENTRY32 ModuleStor;
RemotePara
pRemoteCallParam;
RemotePara
*pRPCParam = NULL;
if(argc!=3)
{
printf("Remote Modules Uninject Tool by Rhett 2006.1.16\n");
printf("%s Module name Process id\n",argv[0]);
return 1;
}
HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,atoi(argv[2]));
if(INVALID_HANDLE_value==hSnapshot)
{
printf("snapshot failed\n");
return 1;
}
ModuleStor.dwSize = sizeof(MODULEENTRY32);
bool bFind = false;
int i = Module32First(hSnapshot,&ModuleStor);
if(i>0)
{
printf("%s",ModuleStor.szModule);
printf("\t%8x\n",ModuleStor.modBaseAddr);
if(!strcmp(ModuleStor.szModule,argv[1]))
{
pRemoteCallParam.ModuleAddr = (unsigned long)ModuleStor.modBaseAddr;
bFind = true;
}
}
while(bFind==false)
{
i = Module32Next(hSnapshot,&ModuleStor);
printf("%s",ModuleStor.szModule);
printf("\t%8x\n",ModuleStor.modBaseAddr);
if(!strcmp(ModuleStor.szModule,argv[1]))
{
pRemoteCallParam.ModuleAddr = (unsigned long)ModuleStor.modBaseAddr;
break;
}
}
CloseHandle(hSnapshot);//----------------------------------------------------------------------------
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,atoi(argv[2]));
if(hProcess==NULL)
{
//printf(" open process failed\n");
return 1;
}
HMODULE hModule = LoadLibrary("kernel32.dll");
pRemoteCallParam.dwLoadLibrary = (DWORD)GetProcAddress(hModule,"FreeLibrary"); //
pRemoteCallParam.ModuleAddr = 0x10000000;
pRPCParam = (RemotePara *)VirtualAllocEx(hProcess,NULL,sizeof(RemotePara),MEM_COMMIT,PAGE_READWRITE); if (pRPCParam == NULL)
{
//printf("virtualallocex failed\n");
return 1;
}
WriteProcessMemory(hProcess,pRPCParam,&pRemoteCallParam,sizeof(pRemoteCallParam),0);
PVOID pRemoteThread = VirtualAllocEx(hProcess,NULL,2048,MEM_COMMIT,PAGE_EXECUTE_READWRITE);
if(pRemoteThread==NULL)
{
//printf("second virtualallocex failed\n");
return 1;
}
WriteProcessMemory(hProcess,pRemoteThread,&ThreadProc,2048,0);
HANDLE hThread = CreateRemoteThread(hProcess,0,0,(DWORD (__stdcall *)(void *))pRemoteThread,pRPCParam,0,NULL);
if(hThread==NULL)
{
//printf("createremotethread failed\n");
return 1;
}
CloseHandle(hProcess);
return 0; }参考这个看看吧http://www.wesoho.com/article.asp?id=1960
回复

使用道具 举报

千问 | 2008-3-23 21:13:25 | 显示全部楼层
用瑞星卡卡上网助手,进程管理可以做到这个要求!
回复

使用道具 举报

千问 | 2008-3-23 21:13:25 | 显示全部楼层
金山清理专家很不错的..而且是免费的.对系统也很有帮助..建议使用
回复

使用道具 举报

千问 | 2008-3-23 21:13:25 | 显示全部楼层
优化大师 可以的 地址 给你http://www.wopti.net/download.htm
下载后 打开里面的 进程管理器o(∩_∩)o...
回复

使用道具 举报

千问 | 2008-3-23 21:13:25 | 显示全部楼层
分给的不少,但不知道你想问什么,帮不了你。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行