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上没有必要提供显示"电子邮件"的功 ...
随机推荐
- java 根据图片文字动态生成图片
今天在做热敏打印机打印二维码,并有文字描述,想到的简单的方法就是根据热敏打印机的纸张宽度和高度,生成对应的图片,如下: package com.orisdom.utils; import lombok ...
- MFC之使用blat发送邮件
blat的下载地址:http://www.blat.net 我用它进行了smtp服务的邮件发送.这里我使用的qq邮箱,qq邮箱使用的密码是授权码,可以再qq邮箱设置里面开启smtp服务.下载下来是文件 ...
- 构建Mysql服务器
<综合>构建Mysql服务器 构建MySQL服务器 数据库基本管理 MySQL 数据类型 表结构的调整 1 构建MySQL服务器 1.1 问题 本案例要求熟悉MySQL官方安装包的使用,快 ...
- Linux基础;Day07
dns服务 dns的作用:地址解析 IP -> 域名(反向) 域名 -> IP(正向) 类型 主域名服务器 负责维护一个区域的所有域名信息,是特定的所有信息的权威信息源,数据可以修改. ...
- Spring(一):Spring入门程序和IoC初步理解
本文是按照狂神说的教学视频学习的笔记,强力推荐,教学深入浅出一遍就懂!b站搜索狂神说或点击下面链接 https://space.bilibili.com/95256449?spm_id_from=33 ...
- linux如何杀死指定进程
ps aux | grep '进程名称' sudo kill pid
- Python Requests-学习笔记(3)-处理json
JSON响应内容 Requests中也有一个内置的JSON解码器,助你处理JSON数据: r = requests.get('https://github.com/timeline.json') pr ...
- 判断一组checkbox/redio是否被选中,为其添加样式
业务场景:当一行中有一个CheckBox被选中,则为此行添加class. <script type="text/javascript"> $(function(){ $ ...
- AJ学IOS(56)网络基础以及如何搭建服务器
AJ分享,必须精品 一:为什么要学习网络编程 关于这个问题,为什么要学习网络编程,AJ的理解就是,这东西是时代发展的必要,没什么为什么,就是应该学,除非你就是想玩单机,但是就算是单机也会有购买金币之类 ...
- 动态规划_基础_最长公共子序列_多种方法_递归/dp
D: 魔法少女资格面试 题目描述 众所周知,魔法少女是一个低危高薪职业.随着近年来报考魔法少女的孩子们越来越多,魔法少女行业已经出现饱和现象!为了缓和魔法少女界的就业压力,魔法少女考核员丁丁妹决定增加 ...