dll远程注入部分代码

BOOL InjectDll(DWORD dwProcsId)
{
 if(EnableDebugPriv(SE_DEBUG_NAME) == 0)
 {
  return FALSE;
 }

//第一个值得结果要注意,否则获得的句柄值可能无效
 HANDLE hProc = OpenProcess(PROCESS_CREATE_THREAD | PROCESS_VM_OPERATION | PROCESS_VM_WRITE, FALSE, dwProcsId);
 if(NULL == hProc)
  return FALSE;


 //get LoadLibraryA addr
 THREAD_START_FUNC pFuncAddr = (THREAD_START_FUNC)GetProcAddress(GetModuleHandleA("kernel32"), "LoadLibraryA");
 if(NULL == pFuncAddr)
  return FALSE;


 //alloc remote process addr to save dll path
 void * pRemoteDllPathAddr = VirtualAllocEx(hProc, NULL, sizeof(g_szDllPath), MEM_COMMIT, PAGE_EXECUTE_READWRITE);
 if(NULL == pRemoteDllPathAddr)
  return FALSE;


 //write dll path, g_szDllPath is dll path...
 if(FALSE == WriteProcessMemory(hProc, pRemoteDllPathAddr, g_szDllPath, sizeof(g_szDllPath), NULL))
  return FALSE;
 //inject dll
 if (NULL == CreateRemoteThread(hProc, NULL, 0, (LPTHREAD_START_ROUTINE)pFuncAddr, pRemoteDllPathAddr, NULL, NULL))
  return FALSE;

 return TRUE;
}

int EnableDebugPriv(WCHAR szName[])
{
 HANDLE hToken;
 TOKEN_PRIVILEGES tp;
 LUID luid;
 
 // 打开进程环令牌
 if(!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&hToken))
 {
  return 0;
 }
 
 if(!LookupPrivilegeValueW(NULL,szName,&luid))
 {
  return 0;
 }
 
 tp.PrivilegeCount = 1;
 tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
 tp.Privileges[0].Luid = luid;
 // 调整权限
 if(!AdjustTokenPrivileges(hToken,0,&tp,sizeof(TOKEN_PRIVILEGES),NULL,NULL))
 {
  return 0;
 }
 
 return 1;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值