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上没有必要提供显示"电子邮件"的功 ...
随机推荐
- Vertica的这些事(二)——SQL-Server、Oracle、MySQL和Vertica数据库常用函数对比
SQL Server.Oracle.MySQL和Vertica数据库常用函数对比 Vertica数据库是HP公司新收购的用于BI方面的数据库. 绝对值 S:select abs(-1) value O ...
- IntelliJ IDEA 激活码 [已购买,分享给码友]
一.前言 笔者在网上找了一圈,各种方法都试过了,之前那种在网上随便找个注册码,过了一段时间就被封了,想了想还是经常用的和朋友一起购买了,方便日后使用 二.下载最新的 IDEA 其实也可以从老版本直接升 ...
- vue使用axios发送post请求时的坑及解决原理
前言:在做项目的时候正好同事碰到了这个问题,问为什么用axios在发送请求的时候没有成功,请求不到数据,反而是报错了,下图就是报错请求本尊 vue里代码如下: this.$http.post('/ge ...
- Java中的数据结构-HashMap
Java数据结构-HashMap 目录 Java数据结构-HashMap 1. HashMap 1.1 HashMap介绍 1.1.1 HashMap介绍 1.1.2 HashMap继承图 1.2 H ...
- Linux网络安全篇,进入SELinux的世界(二)
一.简单的网页制作 1.启动httpd服务 /etc/init.d/httpd start 2.编写首页网页文件 echo "hello,this is my first webPage&q ...
- asap异步执行实现原理
目录 为什么分析asap asap概述 asap源码解析-Node版 参考 1.为什么分析asap 在之前的文章 async和await是如何实现异步编程? 中的浅谈Promise如何实现异步执行小节 ...
- 29.2 Iterator 迭代器ConcurrentModificationException:并发修改异常处理
/** Iterator:迭代器* * 需求:判断集合中是否包含元素java,如果有则添加元素android * Exception in thread "main" java.u ...
- k8s yaml示例
Kind选择 https://kubernetes.io/zh/docs/concepts/workloads/controllers/ Pod示例 apiVersion : v1 #版本v1 kin ...
- centos7用户管理及root忘记密码恢复
查看用户相关命令:#id 用户和组的信息#whoami #查看当前有效用户名#who #显示目前登入系统的用户信息.#w # w 命令用于显示已经登陆系统的用户列表#users #用于显示当前登录系统 ...
- Mac 窗口管理软件 Spectacle
我个人使用的窗口管理软件是 Magnet(本人在 Mac 下付费的首款软件,记得是 6 元~),今天为大家介绍一款类似的开源软件. 简介 Spectacle 是一款可以快速调整窗口大小与位置的开源软件 ...