进程注入的代码

Posted on 2006-07-15 01:02 紫雨轩 C++ 阅读(974) 评论(1)  编辑 收藏 引用 所属分类: MFC
#include  " stdafx.h "
#include 
" Injection.h "
#ifdef _DEBUG
#define  new DEBUG_NEW
#endif


//  唯一的应用程序对象

CWinApp theApp;

using   namespace  std;

typedef 
struct  _RemotePara{ // 参数结构
    char  pMessageBox[ 12 ];
   DWORD dwMessageBox;
}RemotePara;
// 远程线程
DWORD __stdcall ThreadProc (RemotePara  * lpPara){
   typedef 
int  (__stdcall  * MMessageBoxA)(HWND,LPCTSTR,LPCTSTR,DWORD); // 定义MessageBox函数
   MMessageBoxA myMessageBoxA;
   myMessageBoxA 
= (MMessageBoxA) lpPara -> dwMessageBox ; // 得到函数入口地址
   myMessageBoxA(NULL,lpPara -> pMessageBox ,lpPara -> pMessageBox, 0 ); // call
    return   0 ;
}
void  EnableDebugPriv(); // 提升应用级调试权限

int  _tmain( int  argc, TCHAR *  argv[], TCHAR *  envp[])
{
    
const  DWORD THREADSIZE = 1024 * 4 ;
   DWORD byte_write;
   EnableDebugPriv();
// 提升权限
   HANDLE hWnd  =  ::OpenProcess (PROCESS_ALL_ACCESS,FALSE, 760 );
   
if ( ! hWnd) return   0 ;
   
void   * pRemoteThread  = ::VirtualAllocEx(hWnd, 0 ,THREADSIZE,MEM_COMMIT |  MEM_RESERVE,PAGE_EXECUTE_READWRITE);
   
if ( ! pRemoteThread) return   0 ;
   
if ( ! ::WriteProcessMemory(hWnd,pRemoteThread, & ThreadProc,THREADSIZE, 0 ))
   
return   0 ;

   
// 再付值
   RemotePara myRemotePara;
   ::ZeroMemory(
& myRemotePara, sizeof (RemotePara));
   HINSTANCE hUser32 
=  ::LoadLibrary ( " user32.dll " );
   myRemotePara.dwMessageBox 
= (DWORD) ::GetProcAddress (hUser32 ,  " MessageBoxA " );
   strcat(myRemotePara.pMessageBox,
" hello\0 " );
   
// 写进目标进程
   RemotePara  * pRemotePara  = (RemotePara  * ) ::VirtualAllocEx (hWnd , 0 , sizeof (RemotePara),MEM_COMMIT,PAGE_READWRITE); // 注意申请空间时的页面属性
    if ( ! pRemotePara) return   0 ;
   
if ( ! ::WriteProcessMemory (hWnd ,pRemotePara, & myRemotePara, sizeof  myRemotePara, 0 )) return   0 ;

   
// 启动线程
   HANDLE hThread  =  ::CreateRemoteThread (hWnd , 0 , 0 ,(DWORD (__stdcall  * )( void   * ))pRemoteThread ,pRemotePara, 0 , & byte_write);
   
if ( ! hThread){
      
return   0 ;
   }
    
return   0 ;
}

void  EnableDebugPriv(  void  )
{
HANDLE hToken;
LUID sedebugnameValue;
TOKEN_PRIVILEGES tkp;

if  (  !  OpenProcessToken( GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES 
|  TOKEN_QUERY,  & hToken ) )
return ;
if  (  !  LookupPrivilegeValue( NULL, SE_DEBUG_NAME,  & sedebugnameValue ) ){
CloseHandle( hToken );
return ;
}
tkp.PrivilegeCount 
=   1 ;
tkp.Privileges[
0 ].Luid  =  sedebugnameValue;
tkp.Privileges[
0 ].Attributes  =  SE_PRIVILEGE_ENABLED;
if  (  !  AdjustTokenPrivileges( hToken, FALSE,  & tkp,  sizeof  tkp, NULL, NULL ) )
CloseHandle( hToken );
}

Feedback

# re: 进程注入的代码   回复  更多评论   

2010-01-07 00:22 by fsfddsf
靠,一点用都没有,自己先测试再贴上来行不行啊

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


posts - 18, comments - 22, trackbacks - 0, articles - 7

Copyright © 紫雨轩 C++