不依赖dllmain触发的CE注入代码

    以下代码演示将test.dll注入电话进程并触发test.dll里的导出函数HelloWorld

    首先是注入的exe:

 

// 取得CProg.exe进程句柄的OpenProcess就不贴了,大家都知道@@

// 卸载钩子函数
bool  UninstallHook(HANDLE hProcessDest,HINSTANCE hInst){
  CALLBACKINFO ci;
  ci.hProcess 
=  hProcessDest;
  ci.pFunction 
=  (FARPROC)MapPtrToProcess(GetProcAddress(GetModuleHandle(L " COREDLL " ), L " FreeLibrary " ), hProcessDest);
  ci.pvArg0 
=  hInst;  // HINSTANCE returned by LoadLibrary
  DWORD dw  =  PerformCallBack4( & ci,  0 , 0 , 0 );  // returns 1 if correctly unloaded
   return  ( bool )dw;
}

// 安装钩子
bool  InstallHook( HANDLE hProcessDest )
{
  BOOL bMode 
=  SetKMode(TRUE);
  DWORD dwPerm 
=  SetProcPermissions( 0xFFFFFFFF );

  CALLBACKINFO ci;

  ci.hProcess 
=  hProcessDest;
  ci.pFunction 
=  (FARPROC)GetProcAddress(GetModuleHandle( _T( " coredll.dll " ) ),_T( " LoadLibraryW " ) );
  ci.pvArg0 
=  MapPtrToProcess(_T( " test.dll " ),GetCurrentProcess());     // 先注入dll

  HINSTANCE hInst 
=  (HINSTANCE) PerformCallBack4( & ci, 0 , 0 , 0 );
  
if  (  0   ==  GetLastError())
  {
    
// MessageBox(NULL,TEXT("Success inje"),TEXT("success"),MB_OK); //  (NULL,TEXT("PerformCallBack4() run successfuldot.gifdot.gif\n",TEXT("test"),MB_OK));
    
// get the proc address
    FARPROC pHook  =  GetProcAddress(hInst, (LPCTSTR)L " HelloWorld " );  // 关键的地方!获取注入dll的函数地址
    ci.hProcess  =  hProcessDest;
    ci.pFunction 
=  (FARPROC)MapPtrToProcess(pHook, hProcessDest);
    ci.pvArg0 
=  NULL; 
    DWORD dw 
=  PerformCallBack4( & ci,  0 0 0 );  // 再次注入!这次是函数地址!然后相关的导出函数就运作了
    
// UninstallHook(hProcessDest,hInst);
    SetKMode(bMode);
    SetProcPermissions(dwPerm);
    
return  ( bool )dw;
  }
else {
    LPWSTR tt;
    wsprintf(tt,TEXT(
" GetLastError:%d " ),GetLastError());
    MessageBox(NULL,tt,TEXT(
" fail " ),MB_OK);
  }
  SetKMode(bMode);
  SetProcPermissions(dwPerm);
  
return   false ;
}

    DLL的导出代码:

 

extern   " C "  __declspec(dllexport)  bool  WINAPI HelloWorld()
{
  MessageBox(NULL,TEXT(
" Hello World by 小金 " ),TEXT( " success " ),MB_OK);
  
return   true ;
}

 

 

 

posted on 2009-07-02 10:53  yongshi123 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/yongshi123/articles/1515294.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值