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 = ;//显示窗口
PROCESS_INFORMATION pi; //进程信息
wchar_t str[] = L"notepad";
CreateProcessW(NULL, str, NULL, NULL, , CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi);
return ;
}
(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(, "劫持系统", "点有用吗???", );
return ;//执行失败 }
第三步:实现劫持
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(, "劫持系统", "点有用吗???", );
return ;//执行失败
}
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 注入后任何进程打开失败
c语言-----劫持系统03的更多相关文章
- C语言嵌入式系统编程修炼之一:背景篇
不同于一般形式的软件编程,嵌入式系统编程建立在特定的硬件平台上,势必要求其编程语言具备较强的硬件直接操作能力.无疑,汇编语言具备这样的特质.但是,归因于汇编语言开发过程的复杂性,它并不是嵌入式系统开发 ...
- (2)esp8266多国语言翻译系统
http://bbs.mydigit.cn/simple/?t2649513.html 这个想法不错 原来只是想用esp8266搞一个百度的多国语言翻译系统出来的,只是为了尝试如何调用各种web ap ...
- 不一样的go语言-构建系统与构件系统
前言 代码的最后一步是构建成计算机可识别的二进制数据,然后才得以在计算机上运行.如果你曾经写过有点规模(至少数十个以上独立的源文件,且需要依赖第三方包)C语言项目,必定对C语言项目的构建过程印象深 ...
- C语言嵌入式系统编程修炼
C语言嵌入式系统编程修炼 2008-08-19 作者:宋宝华 来源:天极网 C语言嵌入式系统编程修炼之背景篇 本文的讨论主要围绕以通用处理器为中心的协议处理模块进行,因为它更多地牵涉到具体的C语言编程 ...
- | C语言I作业03
| C语言I作业03 标签: 18软件 李煦亮 问题 答案 这个作业属于那个课程 C语言程序设计I 这个作业要求在哪里 https://edu.cnblogs.com 我在这个课程的目标是 学会和掌握 ...
- c语言-----劫持自己02
在上一节 c语言-----劫持原理01 已经叙述了劫持原理,下边正式进入劫持实战 1. 需要实现的功能 在c语言中 system("notepad") 可以打开一个记事本 syst ...
- XE3随笔21:系统默认语言与系统支持的语言列表
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, For ...
- C语言嵌入式系统编程修炼之六:性能优化
使用宏定义 在C语言中,宏是产生内嵌代码的唯一方法.对于嵌入式系统而言,为了能达到性能要求,宏是一种很好的代替函数的方法. 写一个"标准"宏MIN ,这个宏输入两个参数并返回较小的 ...
- C语言嵌入式系统编程修炼之四:屏幕操作
汉字处理 现在要解决的问题是,嵌入式系统中经常要使用的并非是完整的汉字库,往往只是需要提供数量有限的汉字供必要的显示功能.例如,一个微波炉的LCD上没有必要提供显示"电子邮件"的功 ...
随机推荐
- Validation框架的应用
Validation框架的应用 一,前言 这篇博客只说一下Validation框架的应用,不涉及相关JSR,相关理论,以及源码的解析. 如果之后需要的话,会再开博客描写,这样会显得主题突出一些. 后续 ...
- vs code 关闭保存自动格式化 formatonsave - [vscode] - [html]
有时候Ctrl+s保存,html代码哥格式会紊乱. 造成这个原因一般是我们基本都在用的一个插件:  { ; ; , j = ; ; i < ; i++,b++) { ...
- js及jquery常用插件
1.backstretch背景图片插件 可实现背景自适应效果 <script src="dist/js/lib/backstretch/jquery.backstretch.min.j ...
- not found 什么时候触发
eq: BEGIN DECLARE EXIT HANDLER FOR NOT FOUND SET o_state = 999; select count(1) into ...
- web 应用 为啥 需要用到 tomcat 之类的 部署
首先了解C/s架构 比如我们常见的QQ,魔兽世界等 这种结构的程序是有服务器来提供服务的,客户端来使用服务 而B/S架构是这样的 它不需要安装客户端,只需要浏览器就可以了 例如QQ农场,这样对客户端的 ...
- 【DataBase】 在Windows系统环境 下载和安装 解压版MySQL数据库
MySQL官网解压版下载地址:https://dev.mysql.com/downloads/mysql/ 为什么不推荐使用安装版?无脑下一步,很多配置的东西学习不到了 点选第一个就好了,下面的是调试 ...
- 给想学python但还没有接触过的你,python代码的书写规则,小白入门
Python 文件结构 变量命名 注释 单行注释 多行注释 缩进 Python 文件结构 #!/usr/bin/env python3 # 指定python解释器 # -*- coding: utf- ...