zoukankan      html  css  js  c++  java
  • 一个完整的DLL远程注入函数

    函数名称: CreateRemoteDll() 返加类型:BOOL 接受参数: DLL路径,注入进程ID 其完整代码如下: BOOL CreateRemoteDll(const char *DllFullPath, const DWORD dwRemoteProcessId)...{ HANDLE hToken; ...

    函数名称: CreateRemoteDll()

    返加类型:BOOL

    接受参数: DLL路径,注入进程ID

    其完整代码如下:

    BOOL CreateRemoteDll(const char *DllFullPath, const DWORD dwRemoteProcessId)
    {


        HANDLE hToken;
        
    if ( OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&hToken) )
        
    {
            TOKEN_PRIVILEGES tkp;
            
            LookupPrivilegeValue( NULL,SE_DEBUG_NAME,
    &tkp.Privileges[0].Luid );//修改进程权限
            tkp.PrivilegeCount=1;
            tkp.Privileges[
    0].Attributes=SE_PRIVILEGE_ENABLED;
            AdjustTokenPrivileges( hToken,FALSE,
    &tkp,sizeof tkp,NULL,NULL );//通知系统修改进程权限
            
        }



        HANDLE hRemoteProcess;

        
    //打开远程线程
        if( (hRemoteProcess = OpenProcess( PROCESS_CREATE_THREAD |    //允许远程创建线程
                                PROCESS_VM_OPERATION |                //允许远程VM操作
                                PROCESS_VM_WRITE,                    //允许远程VM写
                                FALSE, dwRemoteProcessId ) )== NULL )
        
    {
            AfxMessageBox(
    "OpenProcess Error!");
            
    return FALSE;
        }


        
    char *pszLibFileRemote;
        
    //在远程进程的内存地址空间分配DLL文件名缓冲区
        pszLibFileRemote = (char *) VirtualAllocEx( hRemoteProcess, NULL, lstrlen(DllFullPath)+1
                                MEM_COMMIT, PAGE_READWRITE);
        
    if(pszLibFileRemote == NULL)
        
    {
            AfxMessageBox(
    "VirtualAllocEx error! ");
            
    return FALSE;
        }


        
    //将DLL的路径名复制到远程进程的内存空间
        if( WriteProcessMemory(hRemoteProcess,
                    pszLibFileRemote, (
    void *) DllFullPath, lstrlen(DllFullPath)+1, NULL) == 0)
        
    {
            AfxMessageBox(
    "WriteProcessMemory Error");
            
    return FALSE;
        }


        
    //计算LoadLibraryA的入口地址
        PTHREAD_START_ROUTINE pfnStartAddr = (PTHREAD_START_ROUTINE)
                GetProcAddress(GetModuleHandle(TEXT(
    "Kernel32")), "LoadLibraryA");

        
    if(pfnStartAddr == NULL)
        
    {
            AfxMessageBox(
    "GetProcAddress Error");
            
    return FALSE;
        }


        HANDLE hRemoteThread;
        
    if( (hRemoteThread = CreateRemoteThread( hRemoteProcess, NULL, 0
                    pfnStartAddr, pszLibFileRemote, 
    0, NULL) ) == NULL)
        
    {
            AfxMessageBox(
    "CreateRemoteThread Error");
            
    return FALSE;
        }


        
    return TRUE;
    }

  • 相关阅读:
    (9)ASP.NET Core2.2 中的MVC路由二
    (8)ASP.NET Core2.2 中的MVC路由一
    (7)ASP.NET Core2.2 中的错误处理
    (6)ASP.NET Core2.2 中使用IHttpClientFactory发出HTTP请求
    (5)ASP.NET Core2.2 中的静态文件
    (4)ASP.NET Core2.2 中间件
    蒲公英 · JELLY技术周刊 Vol.05: Rust & Electron 的高性能实践 -- Finda
    Taro 2.2 全面插件化,支持拓展和定制个性化功能
    使用 Taro 快速开发京东小程序
    技术周刊 · 0202 年了,你还不学一下 WASM 么?
  • 原文地址:https://www.cnblogs.com/MaxWoods/p/3208154.html
Copyright © 2011-2022 走看看