本人菜鸟,初学win api,刚刚学到用CreateRemoteThread()来注入,遇到一个很纠结的问题,向高手求救。
系统是win7+visual studio2010。具体问题是这样的:
用dll.dll文件注入calc.exe(计算器)的时候,用XueTr检测的结果是成功注入了,但是没有弹出消息框,dll.dll的代码如下:
#include <windows.h>BOOL APIENTRY DLLMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)
{
if(ul_reason_for_call==DLL_PROCESS_ATTACH)
MessageBox(NULL,"TEXT","TEXT",0);
return true;
}这部分代码好像根本就不执行,改成其它的也一样,请问vs2010下dll文件应该怎么写?我是创建win32控制台应用程序项目--选空dll项目,内容只有以上一个cpp文件,是不是应该有其它内容呢?下面是用来注入的代码,是直接抄书的,应该没有问题:
#include <Windows.h>
#include <stdio.h>
#include <TlHelp32.h>BOOL LoadDll(DWORD dwProcessId,LPTSTR lpszDllName)
{
HANDLE hProcess=NULL;
HANDLE hThread=NULL;
PSTR pszDllFile=NULL;
hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwProcessId);
if(hProcess==NULL)
return FALSE;
int cch=1+strlen(lpszDllName);
pszDllFile=(PSTR)VirtualAllocEx(hProcess,NULL,cch,MEM_COMMIT,PAGE_READWRITE);
if(pszDllFile==NULL)
return FALSE;
if((WriteProcessMemory(hProcess,(PVOID)pszDllFile,(PVOID)lpszDllName,cch,NULL))==FALSE)
return FALSE;
PTHREAD_START_ROUTINE pfnThreadRtn=(PTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandle("kernel32"),"LoadLibraryA");
if(pfnThreadRtn==NULL)
return FALSE;
hThread=CreateRemoteThread(hProcess,NULL,0,pfnThreadRtn,(PVOID)pszDllFile,0,NULL);
if(hThread==NULL)
return FALSE;
system("pause");
WaitForSingleObject(hThread,INFINITE);
VirtualFreeEx(hProcess,(PVOID)pszDllFile,0,MEM_RELEASE);
CloseHandle(hThread);
CloseHandle(hProcess);
return TRUE;
}void main()
{
char lpDllName[MAX_PATH]=TEXT("dll1.dll");
PROCESSENTRY32 ProcessEntry={0};
HANDLE hProcessSnap;
ProcessEntry.dwSize=sizeof(PROCESSENTRY32);
hProcessSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
BOOL bRet=Process32First(hProcessSnap,&ProcessEntry);
while(bRet)
{
if(strcmp("calc.exe",ProcessEntry.szExeFile)==0)
{
LoadDll(ProcessEntry.th32ProcessID,lpDllName);
break;
}
bRet=Process32Next(hProcessSnap,&ProcessEntry);
}
}被困扰了好久,拜托各位高手了!
系统是win7+visual studio2010。具体问题是这样的:
用dll.dll文件注入calc.exe(计算器)的时候,用XueTr检测的结果是成功注入了,但是没有弹出消息框,dll.dll的代码如下:
#include <windows.h>BOOL APIENTRY DLLMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)
{
if(ul_reason_for_call==DLL_PROCESS_ATTACH)
MessageBox(NULL,"TEXT","TEXT",0);
return true;
}这部分代码好像根本就不执行,改成其它的也一样,请问vs2010下dll文件应该怎么写?我是创建win32控制台应用程序项目--选空dll项目,内容只有以上一个cpp文件,是不是应该有其它内容呢?下面是用来注入的代码,是直接抄书的,应该没有问题:
#include <Windows.h>
#include <stdio.h>
#include <TlHelp32.h>BOOL LoadDll(DWORD dwProcessId,LPTSTR lpszDllName)
{
HANDLE hProcess=NULL;
HANDLE hThread=NULL;
PSTR pszDllFile=NULL;
hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwProcessId);
if(hProcess==NULL)
return FALSE;
int cch=1+strlen(lpszDllName);
pszDllFile=(PSTR)VirtualAllocEx(hProcess,NULL,cch,MEM_COMMIT,PAGE_READWRITE);
if(pszDllFile==NULL)
return FALSE;
if((WriteProcessMemory(hProcess,(PVOID)pszDllFile,(PVOID)lpszDllName,cch,NULL))==FALSE)
return FALSE;
PTHREAD_START_ROUTINE pfnThreadRtn=(PTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandle("kernel32"),"LoadLibraryA");
if(pfnThreadRtn==NULL)
return FALSE;
hThread=CreateRemoteThread(hProcess,NULL,0,pfnThreadRtn,(PVOID)pszDllFile,0,NULL);
if(hThread==NULL)
return FALSE;
system("pause");
WaitForSingleObject(hThread,INFINITE);
VirtualFreeEx(hProcess,(PVOID)pszDllFile,0,MEM_RELEASE);
CloseHandle(hThread);
CloseHandle(hProcess);
return TRUE;
}void main()
{
char lpDllName[MAX_PATH]=TEXT("dll1.dll");
PROCESSENTRY32 ProcessEntry={0};
HANDLE hProcessSnap;
ProcessEntry.dwSize=sizeof(PROCESSENTRY32);
hProcessSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
BOOL bRet=Process32First(hProcessSnap,&ProcessEntry);
while(bRet)
{
if(strcmp("calc.exe",ProcessEntry.szExeFile)==0)
{
LoadDll(ProcessEntry.th32ProcessID,lpDllName);
break;
}
bRet=Process32Next(hProcessSnap,&ProcessEntry);
}
}被困扰了好久,拜托各位高手了!
解决方案 »
- win下的界面是否都有句柄
- vc编写调用TWain的DLL时的问题!!!!
- 根据书上把一个对话框类做成了扩展dll,在工程里使用这个对话框时,提示找不到对话框模板资源,为什么?
- 紧急求救,谁有OA系统的项目方案书?110分
- 如何实现让鼠标只在我的程序窗口范围内移动?
- 如何将一个OLE对象转换为位图(注:不要截屏的方式)
- 我想在对话框背景设置一个位图,全部覆盖的,如何实现呢?对话框没有Ondraw 函数怎么实现呢
- 哪有 C++ 的 XML 解析类,能读 XML 的就行,最好使用 MS 的 DOM 接口来做的。
- 如何修改组件或控件的 消息处理函数 Minproc()
- char[]的内容怎么这么奇怪?
- 如何在图像buffer中添加汉字信息,在线等
- 谁有VC写抠像的代码
一定要在Win7里用的话就在你的程序上点鼠标右键,选择以管理员运行。
我也遇到过这样的问题。
我删了if,也printf了ul_reason_for_call,什么反应都没有,这段代码应该根本就没有执行,注入notepad也是一样的。
问一下,什么叫做导出DllMain?我猜问题就出在这里了谢谢
原因是dll文件的结构有问题,后来我用新建项目的时候不选空项目,出来就有一个完整的模板,在那个框架下写就没问题了