c++ win32编程-在win7下面写了个dll注入工具,调试没有问题,就是注入不进去,求助

问题描述

在win7下面写了个dll注入工具,调试没有问题,就是注入不进去,求助

附上代码:
void CsqdllDlg::OnBnClickedButton1()//注入
{
// TODO: Add your control notification handler code here
int pid;
CString char_pid,dllname;
m_UID.GetWindowText(char_pid);
m_DllNames.GetWindowText(dllname);
pid=atoi(char_pid);
InjectDll((DWORD)pid, (LPSTR)(LPCTSTR)dllname);
}

void CsqdllDlg::OnBnClickedButton2()//卸载
{
// TODO: Add your control notification handler code here
int pid;
CString char_pid,dllname;
m_UID.GetWindowText(char_pid);
m_DllNames.GetWindowText(dllname);
pid=atoi(char_pid);
UnInjectDll((DWORD)pid, (LPSTR)(LPCTSTR)dllname);
}

void CsqdllDlg::InjectDll(DWORD dwPid, char * szDllName)//注入
{
if (dwPid==0||strlen(szDllName)==0)
{
return ;
}
char *pFunName="LoadLibraryA";//载入dll
HANDLE hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwPid);//开启进程,获取全部权限
if (hProcess==NULL)
{
return ;
}
int nDllLen=strlen(szDllName)+sizeof(char);
PVOID pDllAddr=VirtualAllocEx(hProcess,NULL,nDllLen,MEM_COMMIT,PAGE_READWRITE);//申请内存(虚拟的),为特定的页面区域分配内存中或磁盘的页面文件中的物理存储,区域包含可被系统执行的代码。试图读写该区域的操作将被拒绝
if (pDllAddr==NULL)
{
CloseHandle(hProcess);
return ;
}
DWORD dwWriteNum=0;
WriteProcessMemory(hProcess,pDllAddr,szDllName,nDllLen,&dwWriteNum);//写入dll地址
FARPROC pFunAddr=GetProcAddress(GetModuleHandle("kernel32.dll"),pFunName);//获取载入函数地址
HANDLE hThread=CreateRemoteThread(hProcess,NULL,0,(LPTHREAD_START_ROUTINE)pFunAddr,pDllAddr,0,NULL);//远程线程
WaitForSingleObject(hThread,INFINITE);//检测信号状态
CloseHandle(hThread);
CloseHandle(hProcess);

}

void CsqdllDlg::UnInjectDll(DWORD dwPid, char * szDllName)//卸载

{

HANDLE hSnap=CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,dwPid);//获取系统快照
MODULEENTRY32 Me32={0};
Me32.dwSize=sizeof(MODULEENTRY32);
BOOL bRet=Module32First(hSnap,&Me32);//遍历进程,获取进程信息
while(bRet)
{
    if (strcmp(Me32.szExePath,szDllName)==0)
    {
        break;
    }
    bRet=Module32Next(hSnap,&Me32);//
}
CloseHandle(hSnap);
char *pFunName="FreeLibrary";//卸载dll
HANDLE hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwPid);

FARPROC pFunAddr =GetProcAddress(GetModuleHandle("kernel32.dll"),pFunName);
HANDLE  hThread=CreateRemoteThread(hProcess,NULL,0,(LPTHREAD_START_ROUTINE)pFunAddr,Me32.hModule,0,NULL);
WaitForSingleObject(hThread,INFINITE);
CloseHandle(hThread);
CloseHandle(hProcess);

}

解决方案

用管理员admin运行exe来执行注入

时间: 2024-10-29 11:27:48

c++ win32编程-在win7下面写了个dll注入工具,调试没有问题,就是注入不进去,求助的相关文章

win32-关于windows7中WIN32编程下的问题

问题描述 关于windows7中WIN32编程下的问题 在win7中建了一个很简单的win32工程项目,代码如下,为啥RegisterClass(&wndclass)会失败呢? #include #pragma comment(lib, "winmm") LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hprevinst

c++-win32编程中基于对话框的程序和普通的窗口程序有什么区别?

问题描述 win32编程中基于对话框的程序和普通的窗口程序有什么区别? 很疑惑,既然窗口可以直接编写,为什么还要基于对话框来写程序? 解决方案 这就好比你将滚动条用于窗口一部分和使用滚动条控件,效果最终一样,但是后者Windows会为你处理一些鼠标和键盘上的逻辑,使得编程更容易,对话框中一般使用大量控件,Windows会为你处理比如输入焦点转移.键鼠等逻辑.

windows编程中为滚动条写了按键的代码,但是按了相应的键不起作用。

问题描述 windows编程中为滚动条写了按键的代码,但是按了相应的键不起作用. 代码如下: case WM_KEYDOWN: switch (message) { case VK_HOME: SendMessage(hwnd, SB_VERT, SB_TOP, 0L); case VK_END: SendMessage(hwnd, SB_VERT, SB_BOTTOM, 0L); break; case VK_PRIOR: SendMessage(hwnd, SB_VERT, SB_PAGEU

C# 编写的com(按照C#高级编程中的方法写了所谓的连接点) c++如何将函数与事件关联起来 ?? 高手请进..........

问题描述 C#代码:是按照<C#高级编程>中的方法写的下面的IEvent接口里的方法名与后面的Class1中的事件名相同...而且Class1有特性[ComSourceInterfaces(typeof(IEvent))]据书上说这样就可以供C++来连接了.我想的就是C++写好一个函数然后这个函数就是Class1中的事件LoginOk的处理函数就和C#里用LoginOk+=....一样.但是我就是不明白怎么把C++的方法和这个Class1的事件联系起来而且这个IEvent也完全没用到...us

string-vs2015编程,为什么这么写不能输出正确

问题描述 vs2015编程,为什么这么写不能输出正确 vs2015编程,为什么这么写不能输出正确 string name="张三"; Console.WriteLine("Hello, {name}."); 解决方案 Console.WriteLine("Hello, {name}."); -> Console.WriteLine($"Hello, {name}."); 解决方案二: 正确的做法: string name

C#的WIN32编程中遇到了问题,请高手指教。

问题描述 各位高手前辈,我现在正根据公司的需求,研究着WIN32编程,在研究过程中,对于文本框,下拉框,复选单选等这些基本控件的值已经获取了,但对于大型数据绑定控件(如:DATAGRID,DATAGRIDVIEW,DATAVIEW等等)就没办法获取里边的数据了,请问各位高手前辈有没有什么办法解决这个问题呢,先谢谢了. 解决方案 解决方案二:看看MSDN吧,里面有详细解释你应该看一点基本的C#编程书籍解决方案三:我说的是在另一个软件中获取数据,就是做个插件,获取另一个正在运行的软件中类似DATAG

Win7系统提示丢失xlive.dll文件的解决方法

  win7系统作为微软系统中的标志性系统,受到了不少用户的青睐,即使现在有更为先进的win8.win10系统,但还是有一批怀旧的用户认为win7有它可取之处,所以一直沿用至今.但是win7系统在打游戏时会出现一些问题,会提示错误:"无法启动此程序,因为计算机中丢失Xlive.dll.尝试重新安装该程序以解决此问题."出现这种提示的时候,大家一般都很惊慌,不知如何面对.小面小编来教大家Win7系统提示丢失xlive.dll文件的解决方法. 具体方法如下:   1.鼠标左键双击电脑桌面的

Win7系统修复损坏aliedit.dll文件的方法

  大多数win7系统用户对aliedit.dll并不熟悉,即便是那些经常淘宝网购的用户.其实aliedit.dll就是保护用户淘宝密码的控件,具体的路径是C:WINDOWSSYSTEM32ALIEDITALIEDIT.DLL.如果用户想要正常淘宝网购,aliedit.dll是不能丢失或是损坏的.有用户反馈自己电脑的aliedit.dll损坏了,这时候应该怎么办呢?下面小编就跟大家分享下解决的方法,有兴趣的用户不妨了解下! 方法如下: 1.鼠标点击win7系统"开始"菜单,选择&quo

android-Android 写事件监听 真机调试出现闪退(我是新手,刚学Android,求大神指教)

问题描述 Android 写事件监听 真机调试出现闪退(我是新手,刚学Android,求大神指教) 这是我的程序: ImageView imageView = (ImageView) findViewById(R.id.login_image); imageView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { } }); 这是错误日志: 03-08 18:10:43