zoukankan      html  css  js  c++  java
  • 远程线程注射dll

    //注射
    void CInjectDlg::OnButtonInject()
    {
    int nPid=0;
    WCHAR szDllPath[MAX_PATH]={0};
    int nDllNameSize=0;

    //获取选择的进程PID
    nPid=m_CtrCboProcess.GetUserChoosePid();
    if (nPid<8)
    {
    MessageBox(L"Can't inject to this process!",L"Error",MB_OK+MB_ICONEXCLAMATION);
    return;
    }
    //获取dll信息,路径和文件名长度Byte
    nDllNameSize=m_CtrEditPath.GetDllInfo(szDllPath);
    //准备工作完成,开始工作
    //////////////////////////////////////////////////////////////////////////
    HANDLE hRemoteProcess=NULL;
    WCHAR* pszDllNameBuff=NULL;
    HANDLE hRemoteThread=NULL;
    HMODULE hKernel32 =GetModuleHandle(L"Kernel32");
    LPTHREAD_START_ROUTINE pLoadLibrary=(LPTHREAD_START_ROUTINE)GetProcAddress(hKernel32,"LoadLibraryW");

    __try
    {
    hRemoteProcess=OpenProcess(PROCESS_CREATE_THREAD|PROCESS_VM_OPERATION|PROCESS_VM_WRITE,\
    FALSE,nPid);
    if (NULL==hRemoteProcess)
    {
    ShowErrorInfo(L"OpenProcess Error!");
    __leave;
    }
    pszDllNameBuff=(WCHAR*)VirtualAllocEx(hRemoteProcess,NULL,nDllNameSize,MEM_COMMIT,PAGE_READWRITE);
    if (NULL==pszDllNameBuff)
    {
    ShowErrorInfo(L"VirtualAllocEx buff error!");
    __leave;
    }

    if (!WriteProcessMemory(hRemoteProcess,pszDllNameBuff,szDllPath,nDllNameSize,NULL))
    {
    ShowErrorInfo(L"VWriteProcessMemory error!");
    __leave;
    }

    // 鸡冻人心的时刻
    hRemoteThread=CreateRemoteThread(hRemoteProcess,NULL,0,pLoadLibrary,pszDllNameBuff,0,NULL);
    if (NULL==hRemoteThread)
    {
    ShowErrorInfo(L"CreateRemoteThread error!");
    __leave;
    }
    WaitForSingleObject(hRemoteThread,INFINITE);
    }
    __finally
    {
    if (NULL!=pszDllNameBuff)
    {
    VirtualFreeEx(hRemoteProcess,pszDllNameBuff,0,MEM_RELEASE);
    }
    if (NULL!=hRemoteProcess)
    {
    CloseHandle(hRemoteProcess);
    hRemoteProcess=NULL;
    }
    }
    }


    //卸载
    void CInjectDlg::OnButtonUnload()
    {
    int nPid=0;
    HANDLE hModuleSnap=NULL;
    MODULEENTRY32 stModuleEntry={0};
    BOOL bFlag=TRUE;
    WCHAR szDllPath[MAX_PATH]={0};
    HMODULE hFindModule=NULL;

    stModuleEntry.dwSize=sizeof(stModuleEntry);
    m_CtrEditPath.GetDllInfo(szDllPath); //获取dll路径
    nPid=m_CtrCboProcess.GetUserChoosePid(); //获取选择的进程PID
    hModuleSnap=CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,nPid);
    bFlag=Module32FirstW(hModuleSnap,&stModuleEntry);
    for(;bFlag;)
    {
    if (0==wcsicmp(szDllPath,stModuleEntry.szExePath))
    {
    hFindModule=stModuleEntry.hModule;
    }
    bFlag=Module32NextW(hModuleSnap,&stModuleEntry);
    }

    //准备工作完成,开始工作
    //////////////////////////////////////////////////////////////////////////
    HANDLE hRemoteProcess=NULL;
    HANDLE hRemoteThread=NULL;
    LPTHREAD_START_ROUTINE pFreeLibrary=NULL;

    pFreeLibrary=(LPTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandle(L"Kernel32"),"FreeLibrary");

    __try
    {
    hRemoteProcess=OpenProcess(PROCESS_CREATE_THREAD|PROCESS_VM_OPERATION|PROCESS_VM_WRITE,\
    FALSE,nPid);
    if (NULL==hRemoteProcess)
    {
    ShowErrorInfo(L"OpenProcess Error!");
    __leave;
    }

    // 鸡冻人心的时刻
    hRemoteThread=CreateRemoteThread(hRemoteProcess,NULL,0,pFreeLibrary,hFindModule,0,NULL);
    if (NULL==hRemoteThread)
    {
    ShowErrorInfo(L"CreateRemoteThread error!");
    __leave;
    }
    WaitForSingleObject(hRemoteThread,INFINITE);
    }
    __finally
    {
    if (NULL!=hRemoteProcess)
    {
    CloseHandle(hRemoteProcess);
    hRemoteProcess=NULL;
    }
    }


    }

  • 相关阅读:
    Eclipse设置、调优、使用
    eclipse安装插件的方式 三种:links、eclipse中使用插件安装向导安装、直接copy插件到对应的eclipse目录 MyEclipse10安装SVN插件
    eclipse 在Servers窗口创建一个Tomcat 6.0 Server失败
    小技巧:帮你批量删除代码前的行号
    editplus发布3.01 Build 446 Final版(附下载及中文版)
    eclipse 垃圾回收器,内存释放
    eclipse.ini的相关说明
    Eclipse 去掉JavaScript Validator
    DropBox 超实用的免费文件网络同步、备份、分享工具
    使用EditPlus技巧,提高工作效率(附英文版、自动完成文件、语法文件下载)
  • 原文地址:https://www.cnblogs.com/lzjsky/p/1892712.html
Copyright © 2011-2022 走看看