CreateProcessW记录

 STARTUPINFO si = { sizeof(si) };
 PROCESS_INFORMATION pi;

 si.dwFlags = STARTF_USESHOWWINDOW;
 si.wShowWindow = TRUE; //TRUE表示显示创建的进程的窗口
 TCHAR cmdline[] =TEXT("c://program files//internet explorer//iexplore.exe http://community.csdn.net/");
 BOOL bRet = ::CreateProcess (
  NULL,
  cmdline, //在Unicode版本中此参数不能为常量字符串,因为此参数会被修改 
  NULL,
  NULL,
  FALSE,
  CREATE_NEW_CONSOLE,
  NULL,
  NULL,
  &si,
  &pi);

 int error = GetLastError();
 if(bRet)
 {
  ::CloseHandle (pi.hThread);
  ::CloseHandle (pi.hProcess);

}

转载于:https://www.cnblogs.com/Browneyes/p/4929161.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,需要明确一下劫持的含义。劫持是指在程序运行过程中,通过修改或替换已经加载的 DLL 或者其他共享库,来改变程序的行为。 在 Windows 平台上,我们可以使用 Microsoft Detours 库来实现 DLL 劫持。以下是一个简单的示例代码: ```c++ #include <Windows.h> #include <detours.h> // 定义被劫持函数的指针 typedef BOOL(WINAPI *PFNCREATEPROCESSW)(LPCWSTR lpApplicationName, LPWSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCWSTR lpCurrentDirectory, LPSTARTUPINFOW lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation); // 定义被劫持函数的实现 BOOL WINAPI MyCreateProcessW(LPCWSTR lpApplicationName, LPWSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCWSTR lpCurrentDirectory, LPSTARTUPINFOW lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation) { // 调用原始函数 return ((PFNCREATEPROCESSW)DetourFindFunction("kernel32.dll", "CreateProcessW"))(lpApplicationName, lpCommandLine, lpProcessAttributes, lpThreadAttributes, bInheritHandles, dwCreationFlags, lpEnvironment, lpCurrentDirectory, lpStartupInfo, lpProcessInformation); } BOOL WINAPI DllMain(HINSTANCE hinst, DWORD dwReason, LPVOID reserved) { if (dwReason == DLL_PROCESS_ATTACH) { // 使用 Detours 库劫持 CreateProcessW 函数 DetourTransactionBegin(); DetourUpdateThread(GetCurrentThread()); DetourAttach(&(PVOID&)GetProcAddress(GetModuleHandleW(L"kernel32"), "CreateProcessW"), MyCreateProcessW); DetourTransactionCommit(); } return TRUE; } ``` 以上代码中,我们使用 Detours 库来劫持了 `CreateProcessW` 函数。在 `DllMain` 函数中,我们调用了 `DetourTransactionBegin` 开始一个事务,然后使用 `DetourUpdateThread` 函数指定当前线程,最后使用 `DetourAttach` 函数将原始函数替换为我们自己的实现。最后使用 `DetourTransactionCommit` 函数提交事务。 以上只是一个简单的示例,实际使用中还需要考虑更多的细节问题,比如线程安全性、错误处理等。同时也需要注意,DLL 劫持是一种容易被滥用的技术,必须谨慎使用,以免给系统带来安全隐患。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值