Windows黑客基础(2):获取其它进程的HANDLE

以windows下,不管是过程要句柄或者文件,他们都足以抽象为一个HANDLE,如果生接触了linux编程的还懂,linux下整个均文件,对过程,文件,socket的操作都是由此int来标识的,windows下的HANDLE概念呢跟linux下之int概念差不多,都足以归纳为接近与ID的数据类型,只是表示形式免一样,我们于拥有目标的操作都亟待经者标识来传递

本在WINDOWS下还连HICON,HWND等,大部分还是UI相关的,我们值需要明白HWND是操作窗口的标识符,HICON是图标的标识符,我们后将会讲话到哪边通过窗口来操作其他进程

 

只要我们而操作其他的过程,首先需之终将是若力所能及以和谐的次第中以到外进程的标识符,在windows下也我们提供了OpenProcess这个函数

HANDLE OpenProcess(DWORD dwDesiredAccess,BOOL bInheritHandle,DWORD dwProcessId)

dwDesireAccess是操作权限,在本章节遇安装为PROCESS_ALL_ACCESS

bInheritHandle,表示所取的历程句柄是否好叫持续

dwProcessID,这个是极端紧要的,就是经过的ID

 

 

咱们只要会想艺术将到过程的ID就可以对拖欠过程展开操作了,那么我们怎么用到过程的ID呢??

1.透过任务管理器

我们开辟任务管理器,点击菜单栏的查->选择列->把PID打及逗,然后我们返回任务管理器,有一行PID,就是咱用的长河的ID了

图片 1

本条时段我们如果通过这个数值便得调用OpenProcess来取该过程的词柄了

HANDLE OpenProcessByID(const DWORD id)
{
    return OpenProcess(PROCESS_ALL_ACCESS,FALSE,id);
}

 

2.通过HWND,即窗口

WINDOWS提供了一个API来给咱们找到一个经过的窗口句柄,即FindWindows,同时,我们好透过GetWindowThreadProcessID,我们若传入通过FindWindow找到的HWND,然后传为GetWindowThreadProcessID就可以找到该过程的ID

HANDLE OpenProcessByWindowName(const char *name)
{
    HWND hWnd = FindWindow(NULL,name);

    if (hWnd != NULL)
    {
        DWORD ThreadID = -1;
        DWORD ProcessID = -1;
        ThreadID = GetWindowThreadProcessId(hWnd,&ProcessID);

        return OpenProcessByID(ProcessID);
    }
    return INVALID_HANDLE_VALUE;
}

3.查寻找进程名称
以Windows下,我们可由此枚举系统有着进程的称呼,然后根据进程的称谓一个个地去比来找到相应之经过ID

HANDLE OpenProcessByProcessNmae(const char *name)
{
    HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); 
    if (hSnapshot == INVALID_HANDLE_VALUE)
    {
        CloseHandle(hSnapshot);
        return INVALID_HANDLE_VALUE;
    }

    PROCESSENTRY32 pe32;
    DWORD id = 0;
    pe32.dwSize = sizeof(PROCESSENTRY32);

    if ( !Process32First(hSnapshot,&pe32) )
    {
        CloseHandle(hSnapshot);
        return INVALID_HANDLE_VALUE;
    }

    while ( 1 )
    {
        pe32.dwSize = sizeof(PROCESSENTRY32);
        if (Process32Next(hSnapshot,&pe32) == FALSE)
            break;

        if ( strcmp(pe32.szExeFile,name)==0 )
        {
            return OpenProcessByID(pe32.th32ProcessID);
        }
    }

    CloseHandle(hSnapshot);

    return INVALID_HANDLE_VALUE;
}

 

俺们用到过程的句子柄以后,我们就是可以提到我们接下的事务了,比如代码注入,比如偷取数据等等的