谁帮我用C写个简单的DLL
这个DLL是被远线程插入到别的进程中去的,主要功能就是用来监视我用VB写的一个程序进程是否在系统中运行,如果不存在就运行这个程序。因为我这里不能安装VC6,2003的系统,不知道为什么装不进,奇怪。只好来求助了,希望能帮帮忙^_^!感激不尽。我不是用来搞病毒和木马的破坏,是我用VB写的一个系统保护程序自身不安全,容易被结束,所以想用这个方法^_^。用个定时器,1000毫秒FindProcess一次,如果未发现就CreateProcess,写成动态链接库,可远线程插入别的进程中运行。
//
// FindProcess
// 这个函数唯一的参数是你指定的进程名,如:你的目标进程
// 是 "Notepad.exe",返回值是该进程的ID,失败返回0
//DWORD FindProcess(char *strProcessName)
{
DWORD aProcesses[1024], cbNeeded, cbMNeeded;
HMODULE hMods[1024];
HANDLE hProcess;
char szProcessName[MAX_PATH]; if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) ) return 0;
for(int i=0; i< (int) (cbNeeded / sizeof(DWORD)); i++)
{
//_tprintf(_T("%d\t"), aProcesses[i]);
hProcess = OpenProcess( PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, aProcesses[i]);
EnumProcessModules(hProcess, hMods, sizeof(hMods), &cbMNeeded);
GetModuleFileNameEx( hProcess, hMods[0], szProcessName,sizeof(szProcessName));
if(strstr(szProcessName, strProcessName))
{
//_tprintf(_T("%s;"), szProcessName);
return(aProcesses[i]);
}
//_tprintf(_T("\n"));
}
return 0;
}
这个DLL是被远线程插入到别的进程中去的,主要功能就是用来监视我用VB写的一个程序进程是否在系统中运行,如果不存在就运行这个程序。因为我这里不能安装VC6,2003的系统,不知道为什么装不进,奇怪。只好来求助了,希望能帮帮忙^_^!感激不尽。我不是用来搞病毒和木马的破坏,是我用VB写的一个系统保护程序自身不安全,容易被结束,所以想用这个方法^_^。用个定时器,1000毫秒FindProcess一次,如果未发现就CreateProcess,写成动态链接库,可远线程插入别的进程中运行。
//
// FindProcess
// 这个函数唯一的参数是你指定的进程名,如:你的目标进程
// 是 "Notepad.exe",返回值是该进程的ID,失败返回0
//DWORD FindProcess(char *strProcessName)
{
DWORD aProcesses[1024], cbNeeded, cbMNeeded;
HMODULE hMods[1024];
HANDLE hProcess;
char szProcessName[MAX_PATH]; if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) ) return 0;
for(int i=0; i< (int) (cbNeeded / sizeof(DWORD)); i++)
{
//_tprintf(_T("%d\t"), aProcesses[i]);
hProcess = OpenProcess( PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, aProcesses[i]);
EnumProcessModules(hProcess, hMods, sizeof(hMods), &cbMNeeded);
GetModuleFileNameEx( hProcess, hMods[0], szProcessName,sizeof(szProcessName));
if(strstr(szProcessName, strProcessName))
{
//_tprintf(_T("%s;"), szProcessName);
return(aProcesses[i]);
}
//_tprintf(_T("\n"));
}
return 0;
}
解决方案 »
- 有没有人用过poco库开发服务器?交流下
- MFC中查找与替换换行符问题
- error LNK2001: _IID_ICaptureGraphBuilder2
- 有什么函数可以把网卡设置成混杂模式啊,在mfc中?
- 关于CListCtrl::SortItems函数的问题,高手请指导
- 如何实现两台没有IP地址直连机器之间的通讯???
- 重新启动机器后,为什么我能写串口,而无法读到数据?!
- 把bitmap写到文件中去!
- jsp作个<select> ,里面的<option>是由数据库内容得到怎么做?
- 求助:向各位大哥请教个 hook 问题,谢谢!
- VS2005C++ 调试出问题?高手帮忙
- 有关回调函数的问题:)
http://www.codeproject.com/KB/threads/winspy.aspx (可以下载代码)
{
int nRetCode = 0;
char szFilePath[]="e:\\Remotedll.dll";
int size=(lstrlen(szFilePath)+1)*sizeof(char);
// initialize MFC and print and error on failure
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
{
// TODO: change error code to suit your needs
cerr << _T("Fatal Error: MFC initialization failed") << endl;
nRetCode = 1;
}
else
{
// TODO: code your application's behavior here.
EnableDebugPriv();
HANDLE hWnd = ::OpenProcess (PROCESS_ALL_ACCESS,FALSE,812);
if(!hWnd)
{
cout<<"OpenProcess error!"<<endl;
return 0;
}
TempStruc *pRemoteAddress=(TempStruc *)VirtualAllocEx(hWnd,NULL,size,MEM_COMMIT,PAGE_READWRITE);
if(pRemoteAddress==NULL)
{
cout<<"VirtualAllocEx error!"<<endl;
return 0;
}
if(!::WriteProcessMemory(hWnd,pRemoteAddress,szFilePath,size,0))
{
cout<<"WriteProcessMemory error!"<<endl;
return 0;
}
DWORD pLoadLibraryAddress=(DWORD)GetProcAddress(GetModuleHandle("Kernel32.dll"),"LoadLibraryA");
CreateRemoteThread(hWnd,NULL,0,(DWORD(__stdcall *)(void *))pLoadLibraryAddress,pRemoteAddress, 0, NULL);
}
return nRetCode;
}
void EnableDebugPriv( void )
{
HANDLE hToken;
LUID sedebugnameValue;
TOKEN_PRIVILEGES tkp;
if ( ! OpenProcessToken( GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken ) )
return;
if ( ! LookupPrivilegeValue( NULL, SE_DEBUG_NAME, &sedebugnameValue ) ){
CloseHandle( hToken );
return;
}
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Luid = sedebugnameValue;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
if ( ! AdjustTokenPrivileges( hToken, FALSE, &tkp, sizeof tkp, NULL, NULL ) )
CloseHandle( hToken );
}