yongshi123

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

    以下代码演示将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 successful\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, 000); //再次注入!这次是函数地址!然后相关的导出函数就运作了
    
//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  阅读(780)  评论(0编辑  收藏  举报