首页
社区
课程
招聘
[讨论]远程注入和实时调试
发表于: 2010-1-14 18:22 5912

[讨论]远程注入和实时调试

2010-1-14 18:22
5912
//inject.exe.cpp

//得到进程id
DWORD FindGameProcess()
{
  DWORD pid; //进程id
  HWND        hwnd=FindWindow("CalcClass","Calc");
        GetWindowThreadProcessId(hwnd,&pid);
    return pid;
}
//提升权限
bool EnablePrivilege(HANDLE   hToken,LPCTSTR   szPrivName,BOOL   fEnable){
        TOKEN_PRIVILEGES   tp;   
        tp.PrivilegeCount   =   1;   
        LookupPrivilegeValue(NULL,szPrivName,&tp.Privileges[0].Luid);   
        tp.Privileges[0].Attributes   =   fEnable   ?   SE_PRIVILEGE_ENABLED:0;
        AdjustTokenPrivileges(hToken,FALSE,&tp,sizeof(tp),NULL,NULL);   
        return((GetLastError()   ==   ERROR_SUCCESS));   
}
//注入
DWORD inject()
{
               

                  DWORD pid=FindGameProcess();
                if(pid==0)
                {
                        return 0;
                }

           //////////////////////提升调试权限/////////////////////
        HANDLE  hToken=NULL;

        if(0!=OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&hToken))
        {
        if(EnablePrivilege(hToken,SE_DEBUG_NAME,TRUE))
        {
         
        }

        }
           ///////////////////////////////////////////////////

          HANDLE hd=OpenProcess(PROCESS_ALL_ACCESS,false,pid);
                if(NULL==hd)
                {
               
                return 0;
                }
       

           //////////////////////////////////////////////////////////////////////////////

           // 向目标进程地址空间写入DLL名称

        GetCurrentDirectory(255,dllfile);
                strcat(dllfile,"\\debug.dll");
                   char *lpszDll=dllfile;

               
                DWORD dwSize, dwWritten;
                dwSize = lstrlenA( lpszDll ) + 1;
               
                LPVOID lpBuf = VirtualAllocEx( hd, NULL, dwSize, MEM_COMMIT, PAGE_READWRITE );
               
                if ( NULL == lpBuf )   
                {
                        CloseHandle( hd );
                        return 0;
                        // 失败处理
                }
               

               
                if ( WriteProcessMemory( hd, lpBuf, (LPVOID)lpszDll, dwSize, &dwWritten ) )
                {
                        // 要写入字节数与实际写入字节数不相等,仍属失败   
                        if ( dwWritten != dwSize )
                        {
                                VirtualFreeEx( hd, lpBuf, dwSize, MEM_DECOMMIT );   
                                CloseHandle( hd );
                                return 0;
                        }
                }
                else
                {
                        CloseHandle( hd );
               
                        return 0;
                        // 失败处理
                }
               
       
               
                PTHREAD_START_ROUTINE pfnStartAddr = (PTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandle(TEXT("Kernel32")), "LoadLibraryA");
                HANDLE hThread=CreateRemoteThread( hd, NULL, 0, pfnStartAddr, lpBuf, 0, NULL);
               
               
                if(NULL==hThread)
                {
                        CloseHandle( hd );
                       
                        return 0;
                }
               
       
               
                WaitForSingleObject( hThread, INFINITE );
               
                // 释放目标进程中申请的空间
                VirtualFreeEx( hd, lpBuf, dwSize, MEM_DECOMMIT );
                CloseHandle( hThread );
                // CloseHandle( hd );
               
          return 1;

                  
                  
                  
}

//debug.dll.cpp

// 晚上继续

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 17
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
受教了,谢谢lailei分享
2010-1-15 09:56
0
雪    币: 107
活跃值: (434)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
【讨论】远程注入和实时调试

需要讨论的是什么内容???难道是代码分享??

【分享】远程注入和实时调试
2010-1-15 12:29
0
雪    币: 458
活跃值: (426)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
4
2010-1-15 14:17
0
雪    币: 327
活跃值: (30)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
经验证
       HWND  hwnd=FindWindow("CalcClass","Calc");
不能得到HWND,应改为
       HWND  hwnd=FindWindow(NULL,"Calc");
2010-1-24 16:23
0
雪    币: 213
活跃值: (147)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
Nod
2010-2-1 15:25
0
雪    币: 202
活跃值: (543)
能力值: ( LV11,RANK:188 )
在线值:
发帖
回帖
粉丝
7
其实不用Write DLL名称,在Kernel32中的 二进制那么多,随便找个可打印字符串后带0的位置,DLL命名为它便可以了。
2010-2-2 05:34
0
游客
登录 | 注册 方可回帖
返回