⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 erunas2.cpp

📁 Cracker终结者——提供最优秀的软件保护技术
💻 CPP
字号:
#define WIN32_LEAN_AND_MEAN
#define UNICODE
#define _UNICODE
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <tchar.h>

//#define AH_STATIC_LINKING
#include <ApiHooks.h>
//#define PW_STATIC_LINKING
#include <PrcWorks.h>

PVOID OldNtCPCommon = NULL;
HANDLE hParent = NULL;

//simplified common hook (otherwise two procedures would be needed)
__declspec(naked) NewNtCPCommon(...) {
  __asm { mov eax, hParent
          mov [esp+16], eax
          jmp OldNtCPCommon
  }
}

VOID _tmain(int argc, TCHAR** argv) {
  BOOL NoError = FALSE;
  if(argc < 2) 
    _tprintf(_T("Usage: ERunAs2 [ParentPID] <\"CommandLine\">"));
  else {
    HINSTANCE hntdll;
    BYTE  WasEn;
    typedef LONG (WINAPI *TRAP)(DWORD, BOOL, DWORD, BYTE*);
    TRAP  RAP;
    if(hntdll = GetModuleHandle(_T("ntdll.dll")))
      if(RAP = (TRAP)GetProcAddress(hntdll, "RtlAdjustPrivilege"))
        RAP(20, TRUE, 0, &WasEn);
    
    DWORD ParentPID = PW_MEMERROR;
    if(argc == 2)
      ParentPID = ProcessName2PID(_T("winlogon.exe"));
    else
      _stscanf(argv[1], _T("%u"), &ParentPID);

    CloseHandle((HANDLE)4); //optional - full access for itself

    if(hParent = OpenProcess(PROCESS_CREATE_PROCESS, FALSE, ParentPID)) {
      STARTUPINFO si = {sizeof(si)};
      PROCESS_INFORMATION pi;
      DWORD ntver = GetVersion();
      ntver = LOBYTE(ntver)*256 + HIBYTE(ntver);
      if(HookApi(_T("ntdll.dll"),
                 ntver > 0x500 ? _T("NtCreateProcessEx") : _T("NtCreateProcess"),
                 HOOK_OVERWRITE | HOOK_NOT_9X, &OldNtCPCommon, NULL, NewNtCPCommon, NULL)
                == ErrorAWSuccess)
        if(CreateProcess(NULL, argc > 2 ? argv[2] : argv[1], NULL, NULL, FALSE, 0, NULL, NULL,
                         &si, &pi)) {
          CloseHandle(pi.hProcess); 
          CloseHandle(pi.hThread);
          NoError = TRUE;
        }
        else
         _tprintf(_T("Can't create target process!"));
      else
        _tprintf(_T("Can't hook NtCP(Ex)!"));
      CloseHandle(hParent);
    }        
    else
      _tprintf(_T("Can't open process represented by \"ParentPID\"!"));
  }
  if(!NoError)
    getch();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -