c语言-----劫持系统03

1. 回顾

  在前2节我们已经实现了劫持原理、函数指针等一些概念,下面进行系统劫持

2. 工具

  vs2017

  Detours

3. windows如何创建一个进程?

  (1)创建进程函数

CreateProcessW(
    LPCWSTR lpApplicationName,        //执行程序名称
    LPWSTR lpCommandLine,        //命令行
    LPSECURITY_ATTRIBUTES lpProcessAttributes,  //进程安装
    LPSECURITY_ATTRIBUTES lpThreadAttributes, //进程主线程安装
    BOOL bInheritHandles,    //附加参数
    DWORD dwCreationFlags, //创建参数
    LPVOID lpEnvironment, //环境变量指针
    LPCWSTR lpCurrentDirectory, //进程当前路径
    LPSTARTUPINFOW lpStartupInfo, //进程启动的附加信息
    LPPROCESS_INFORMATION lpProcessInformation //进程标识符
);

  (2) 我们需要用到哪些参数?

    wchar_t str[100]; 用来指定输入的命令比如notepad mspaint...     对应第二个参数

         STARTUPINFO si; 保存进程信息                                 也就是倒数第二个参数

   PROCESS_INFORMATION pi; 进程标识符                 也就是最后一个参数

   其他都是NULL

  (3) 完整程序代码

#include<Windows.h>
#include<stdio.h>
#include<stdlib.h>
int main() {
    STARTUPINFO si = { sizeof(si) };  //保存进程信息
    si.dwFlags = STARTF_USESHOWWINDOW;//显示窗口
    si.wShowWindow = 1;//显示窗口
    PROCESS_INFORMATION pi; //进程信息
    wchar_t str[100] = L"notepad";
    CreateProcessW(NULL, str, NULL, NULL, 0, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi);
    return 0;
}

  (4) 原理解释

  为什么是wchar_t,不是char?

    汉语占两个字节,英语占一个字节,windows系统为了兼容函数,创建了宽字符wchar_t可以直接输入汉语,而不会出现乱码

4. 系统进程劫持

  (1) 上次劫持原理回顾

void (*pold)(参数) = system;
void pnew(参数){
  ...  
}
void hook(){
    ...
}

 (2) 这次函数由system()改为CreateProcess

 第一步:创建函数指针

BOOL(WINAPI *poldcreateprocess)(
    LPCWSTR lpApplicationName,
    LPWSTR lpCommandLine,
    LPSECURITY_ATTRIBUTES lpProcessAttributes,
    LPSECURITY_ATTRIBUTES lpThreadAttributes,
    BOOL bInheritHandles,
    DWORD dwCreationFlags,
    LPVOID lpEnvironment,
    LPCWSTR lpCurrentDirectory,
    LPSTARTUPINFOW lpStartupInfo,
    LPPROCESS_INFORMATION lpProcessInformation
    ) = CreateProcessW;//在中国使用宽字符更精准

 第二步:创建新函数

BOOL  NEWCreateProcessW(
    LPCWSTR lpApplicationName,
    LPWSTR lpCommandLine,
    LPSECURITY_ATTRIBUTES lpProcessAttributes,
    LPSECURITY_ATTRIBUTES lpThreadAttributes,
    BOOL bInheritHandles,
    DWORD dwCreationFlags,
    LPVOID lpEnvironment,
    LPCWSTR lpCurrentDirectory,
    LPSTARTUPINFOW lpStartupInfo,
    LPPROCESS_INFORMATION lpProcessInformation
)
{
    
    MessageBoxA(0, "劫持系统", "点有用吗???", 0);
    return 0;//执行失败
    
}

 第三步:实现劫持

void hook()
{
    DetourRestoreAfterWith();//恢复状态
    DetourTransactionBegin();//开始
    DetourUpdateThread(GetCurrentThread());//刷新当前线程
    DetourAttach((void**)&poldcreateprocess, NEWCreateProcessW);
    DetourTransactionCommit();//立刻生效
}

 第四步:编写dll函数

_declspec(dllexport)void go()
{

    hook();

}

 第五步:改Debug模式 -> Rease模式  -> 生成解决方案

完整源代码

#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
#include "detours.h"
#pragma comment(lib,"detours.lib")

BOOL(WINAPI *poldcreateprocess)(
    LPCWSTR lpApplicationName,
    LPWSTR lpCommandLine,
    LPSECURITY_ATTRIBUTES lpProcessAttributes,
    LPSECURITY_ATTRIBUTES lpThreadAttributes,
    BOOL bInheritHandles,
    DWORD dwCreationFlags,
    LPVOID lpEnvironment,
    LPCWSTR lpCurrentDirectory,
    LPSTARTUPINFOW lpStartupInfo,
    LPPROCESS_INFORMATION lpProcessInformation
    ) = CreateProcessW;//宽字符的创建进程
BOOL  NEWCreateProcessW(
    LPCWSTR lpApplicationName,
    LPWSTR lpCommandLine,
    LPSECURITY_ATTRIBUTES lpProcessAttributes,
    LPSECURITY_ATTRIBUTES lpThreadAttributes,
    BOOL bInheritHandles,
    DWORD dwCreationFlags,
    LPVOID lpEnvironment,
    LPCWSTR lpCurrentDirectory,
    LPSTARTUPINFOW lpStartupInfo,
    LPPROCESS_INFORMATION lpProcessInformation
)
{
    MessageBoxA(0, "劫持系统", "点有用吗???", 0);
    return 0;//执行失败
}
void hook()
{
    DetourRestoreAfterWith();//恢复状态
    DetourTransactionBegin();//开始
    DetourUpdateThread(GetCurrentThread());//刷新当前线程
    DetourAttach((void**)&poldcreateprocess, NEWCreateProcessW);
    DetourTransactionCommit();//立刻生效
}
_declspec(dllexport)void go()
{
    hook();
}

4. dll注入

  打开dll注入工具,登陆qq后刷新dll注入工具选择qq  

  找到编写的dll,输入编写的函数go() 点击注入,在qq上打开qq空间

 

      如果有explorer.exe的选择explore.exe 注入后任何进程打开失败

posted @ 2019-10-30 23:34  莫飞的博客  阅读(300)  评论(0编辑  收藏  举报