基于Detours劫持360启动

.首先需要下载detours(百度或者google),这里我们下载的DetoursExpress30.msi

.安装detours 编译原代码

三.在VS2013 中找到Visual Studio Tools

四.以管理员的身份运行vs2013开发人员命令提示 ,切换到Detours的src目录输入nmake命令

五.编译成功后即可使用detours.lib 文件

六.劫持原理


劫持代码:(这里使用不是Debug,而是release)

#include<stdio.h>
#include<Windows.h>
#include<string.h>
#include<stdlib.h>
#include"detours.h"
#pragma comment(lib,"detours.lib")
//1.首先要定义函数指针获取你要劫持的函数地址
//2.定义并实现自己劫持执行的函数,其参数要与被劫持的参数一样

static BOOL(WINAPI *OldCreateProcess)(
	LPCTSTR lpApplicationName,
	LPTSTR lpCommandLine,
	LPSECURITY_ATTRIBUTES lpProcessAttributes,
	LPSECURITY_ATTRIBUTES lpThreadAttributes,
	BOOL bInheritHandles,
	DWORD dwCreationFlags,
	LPVOID lpEnvironment,
	LPCTSTR lpCurrentDirectory,
	LPSTARTUPINFO lpStartupInfo,
	LPPROCESS_INFORMATION lpProcessInformation) = CreateProcessW; //要劫持创建进程函数,实现劫持创建进程

//劫持后执行的函数,就是将CreateProcessW这个函数替换为newCreateProcess因此要求函数参数必须一样
static BOOL WINAPI  newCreateProcess(
	LPCTSTR lpApplicationName,
	LPTSTR lpCommandLine,
	LPSECURITY_ATTRIBUTES lpProcessAttributes,
	LPSECURITY_ATTRIBUTES lpThreadAttributes,
	BOOL bInheritHandles,
	DWORD dwCreationFlags,
	LPVOID lpEnvironment,
	LPCTSTR lpCurrentDirectory,
	LPSTARTUPINFO lpStartupInfo,
	LPPROCESS_INFORMATION lpProcessInformation)
{
	// 将wchar 转换为char *
	int num = WideCharToMultiByte(CP_OEMCP, NULL, lpApplicationName, -1, NULL, 0, NULL, FALSE);
	char *pchar = (char *)malloc(num);
	WideCharToMultiByte(CP_OEMCP, NULL, lpApplicationName, -1, pchar, num, NULL, FALSE);

	if (strstr(pchar, "360"))//过滤程序名,如果包含360 就劫持
	{
		MessageBoxA(0, "360禁止启动,请交费", "提示", MB_OK);
	}
	else
	{
		OldCreateProcess(
			lpApplicationName,
			lpCommandLine,
			lpProcessAttributes,
			lpThreadAttributes,
			bInheritHandles,
			dwCreationFlags,
			lpEnvironment,
			lpCurrentDirectory,
			lpStartupInfo,
			lpProcessInformation);
	}
	free(pchar);//释放资源
}
//开始拦截
void Hook()
{


	DetourRestoreAfterWith();//恢复原来状态,
	DetourTransactionBegin();//拦截开始
	DetourUpdateThread(GetCurrentThread());//刷新当前线程
	//这里可以连续多次调用DetourAttach,表明HOOK多个函数
	//OldCreateProcess 要劫持的函数指针 newCreateProcess劫持后执行的函数,就是用newCreateProcess替换OldCreateProcess
	DetourAttach((void **)&OldCreateProcess, newCreateProcess);//实现函数拦截函数

	DetourTransactionCommit();//拦截生效



}
//取消拦截
void UnHook()
{


	DetourTransactionBegin();//拦截开始
	DetourUpdateThread(GetCurrentThread());//刷新当前线程
	//这里可以连续多次调用DetourDetach,表明撤销多个函数HOOK
	DetourDetach((void **)&OldCreateProcess, newCreateProcess); //撤销拦截函数
	DetourTransactionCommit();//拦截生效
}
__declspec(dllexport) void start_run()//导出dll

{

	Hook();
	Sleep(300000/5);// 表示在系统中的时间
	UnHook();
}

使用DllInject.exe 工具进行dll注射到Explorer 是桌面进程

点击360 运行程序
  



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值