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的这些事(八)——-Vertica-管理
1.版本信息 dbadmin=> SELECT version(); version ------------------------------------ Vertica Analytic ...
- 无法加载文件 C:\Users\Administrator\AppData\Roaming\npm\vue.ps1,因为在此系统··········
网上百度了下,解决方案是: 1. 以管理员身份运行PowerShell2. 执行:get-ExecutionPolicy,回复Restricted,表示状态是禁止的3.执行:set-Execution ...
- 获取data 数据
export function getData(el, name, val) { const prefix = 'data-' if (val) { return el.setAttribute(pr ...
- 配置一个mariadb数据库《二》
mariadb 配置一个数据库 案例4:配置一个数据库 4.1 问题 本例要求在虚拟机 ...
- 使用css动画实现领积分效果
最近项目中要做一个领积分的效果,根据老板的描述,这个效果类似于支付宝蚂蚁森林里的领取能量.整体效果是就是在树周围飘着几个积分元素,上下滑动,类似星星闪烁,点击领取后,沿着树中心的位置滑动并消失,树上的 ...
- php--php设计模式留存
装饰者模式 <?php interface Decorator { public function display(); } class XiaoFang implements Decorato ...
- python 网络编程---粘包
一.什么是粘包?(只有在TCP中有粘包现象,在UDP中永远不会粘包) 黏包不一定会发生. 如果发生 了:1.可能是在客户端已经粘了 2.客户端没有粘,可能是在服务端粘了. 所谓的粘包问题:主要是是因为 ...
- Tomcat目录解析
bin 可执行文件的储存 conf 配置文件 lib 依赖jar包 logs 日志文件 temp 临时文件 webapps 创建的web应用程序 work 存放运行时数据 如何启动Tomcat? 启动 ...
- 2017蓝桥杯等差素数(C++B组)
题目 : 等差素数列 2,3,5,7,11,13,....是素数序列.类似:7,37,67,97,127,157 ...
- C语言数据结构队列
#include<stdio.h>#include<stdlib.h>struct Node { int data; Node *next;};struct Queue { ...