windows、linux劫持技术

windows系统下面可以利用detours劫持

realse  模式劫持,调试的程序不可以

函数劫持可以实现的效果。

函数的劫持原理

我们如何实现-detours

detours是微软亚洲研究院出品的信息安全产品,主要用于劫持。

detours根据函数指针改变函数的行为,

拦截任何函数,即使操作系统函数。

1.安装detours

2.构建库文件-nmake编译

3.包含头文件还有库文件

#include <detours.h>

#pragma comment(lib, "detours.lib")

4.

定义旧函数指针指向原来的函数

static int (WINAPI *OLD_MessageBoxW)(HWND hWnd, LPCSTR lpText, LPCSTR lpaptioin, UINT uType) = MessageBoxW;

定义新的函数

int WINAPI  NEW_MessgeBox(HWND hWnd, LPCSTR lpText, LPCSTR lpCaptioin, UINT uType)

{

//重新定义函数的行为

//为空可以禁止函数使用

//加上if else 可以限制函数的调用

//加上对话框可以限制同一或者不同意

if (IDYES == MessageBoxW(NULL, lpCommandLine, L"拦截成功!", MB_YESNO) )

return 1;

else

return FALSE;

return ret;

}

5.

开始拦截

void Hook()

{

DetourRestoreAfterWith();//恢复原来状态

DetourTransactionBegin();//拦截开始

DetourUpdateThread(GetCurrentThread());//刷新当前线程

//这里可以连续多次调用DetourAttach,表明HOOK多个函数

DetourAttach( (void **)&OLD_MessageBox, NEW_MessageBox );//实现函数拦截

DetourTransactionCommit();//拦截生效

}

取消拦截

void UnHook()

{

DetourTransactionBegin();//拦截开始

DetourUpdateThread(GetCurrentThread());//刷新当前线程

//这里可以连续多次调用DetourDetach,,表明撤销多个函数HOOK

DetourDetach( (void **)&OLD_MessageBox, NEW_MessageBox );//实现函数拦截

DetourTransactionCommit();//拦截生效

}

6.修改自己,直接挂接函数即可

修改外部程序

需要作为模块注射,需要导出声明

__declspec(dllexport)

劫持system函数

#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
#include<string.h>

#include"detours.h"
#pragma comment(lib, "detours.lib")

//劫持自己

static int (*poldsystem)( const char * _Command)=system;//存储函数指针地址

int  newsystem(const char * _Command)
{
	//tasklist
	printf("%s", _Command); //禁止你干活
	return 0;
}
int  newsystemA(const char * _Command)
{
	//tasklist   过滤
	char *p = strstr(_Command, "tasklist");
	if (p == NULL)
	{
		poldsystem(_Command);
	}
	else
	{
		printf("%s禁止执行", _Command);//找到
		return 0;
	}
	return 0;
}

//开始拦截
void Hook()
{
	DetourRestoreAfterWith();//恢复原来状态
	DetourTransactionBegin();//拦截开始
	DetourUpdateThread(GetCurrentThread());//刷新当前线程
	//这里可以连续多次调用DetourAttach,表明HOOK多个函数
	DetourAttach((void **)&poldsystem, newsystemA);//实现函数拦截
	DetourTransactionCommit();//拦截生效
}
void main()
{
	system("calc");
	Hook();
	system("calc");
	system("tasklist");
	getchar();
}

编写成dll文件,注入到其他的程序中,从而能够实现劫持其他应用程序,达到过滤的效果。如果交了保护费,就可以不去劫持你的程序。实现猥琐的技术。

#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
#include<string.h>

#include"detours.h"
#pragma comment(lib, "detours.lib")

static int(*poldsystem)(const char * _Command) = system;//存储函数指针地址

int  newsystem(const char * _Command)
{
	//tasklist
	printf("%s", _Command); //禁止你干活
	return 0;
}
//开始拦截
void Hook()
{
	DetourRestoreAfterWith();//恢复原来状态
	DetourTransactionBegin();//拦截开始
	DetourUpdateThread(GetCurrentThread());//刷新当前线程
	//这里可以连续多次调用DetourAttach,表明HOOK多个函数
	DetourAttach((void **)&poldsystem, newsystem);//实现函数拦截
	DetourTransactionCommit();//拦截生效
}
//导出函数,可以加载的时候调用
_declspec(dllexport) void  go()
{
	MessageBoxA(0, "1", "2", 0);
	Hook();
}

CreateProcessW函数是用来创建进程的。

#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>

void main1()
{
	//system("calc");
	//ShellExecuteA(0, "open", "calc", 0, 0, 1);
	STARTUPINFO si = { sizeof(si) }; //启动信息
	PROCESS_INFORMATION pi;//保存了进程的信息
	si.dwFlags = STARTF_USESHOWWINDOW; //表示显示窗口
	si.wShowWindow = 1; //1表示显示创建的进程的窗口
	wchar_t cmdline[] = L"c://program files//internet explorer//iexplore.exe";
	CreateProcessW(NULL, cmdline, NULL, NULL, 0, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi);//创建进程
}

在Windows平台下可以使用挂钩(Hook)技术,将系统中的鼠标、键盘等事件拦截下来,以添加实现自己的功能。同样的,在Linux系统中也有类似的技术,都可以起到挂钩(Hook)拦截的作用。可以实现拦截的功能。拦截技术的实现是通过环境变量LD_PRELOAD设置优先被加载器加载的动态库(以下简称拦截动态库),这里应该设置LD_PRELOAD=“xxx.so”

例子:

/* 文件名:verifypasswd.c */
/* 这是一段判断用户口令的程序,其中使用到了标准C函数strcmp*/

#include <stdio.h>
#include <string.h>

int main(int argc, char **argv)
{
	char passwd[] = "password";

	if (argc < 2) {
		printf("usage: %s <password>\n", argv[0]);
		return;
	}

	if (!strcmp(passwd, argv[1])) {
		printf("Correct Password!\n");
		return;
	}

	printf("Invalid Password!\n");
}

编译程序:

$ gcc -o verifypasswd verifypasswd.c

测试一下程序:(得到正确结果)

$ ./verifypasswd asdf

Invalid Password!

在上面这段程序中,我们使用了strcmp函数来判断两个字符串是否相等。下面,我们使用一个动态函数库来重载strcmp函数:

#include <stdio.h>
int strcmp(const char *s1, const char *s2)
{
        printf("hack function invoked. s1=<%s> s2=<%s>\n", s1, s2);
        /* 永远返回0,表示两个字符串相等 */
        return 0;
}

编译程序:

$ gcc -shared -o hack.so hack.c

设置LD_PRELOAD变量:(使我们重写过的strcmp函数的hack.so成为优先载入链接库)

$ export LD_PRELOAD="./hack.so"

再次运行程序:

$ ./verifypasswd  asdf

hack function invoked. s1=<password> s2=<asdf>

Correct Password!

时间: 2024-10-25 15:25:05

windows、linux劫持技术的相关文章

Windows完成端口与Linux epoll技术简介

收藏自:http://www.cnblogs.com/cr0-3/archive/2011/09/09/2172280.html WINDOWS完成端口编程1.基本概念2.WINDOWS完成端口的特点3.完成端口(Completion Ports )相关数据结构和创建4.完成端口线程的工作原理5.Windows完成端口的实例代码Linux的EPoll模型1.为什么select落后2.内核中提高I/O性能的新方法epoll3.epoll的优点4.epoll的工作模式 5.epoll的使用方法6.L

Windows Server 2016技术预览

Windows Server 2016是微软将于2016年9月份发布的最新服务器操作系统.目前微软官方发布了许多Windows Server 2016新的功能和特性,下面我们来简单看下: 主要内容 预览版界面 系统需求及安装 服务器管理变化 新特性及变化 预览版界面 服务器界面,沉浸而不渲染 登录界面,色调变得活泼起来,用户图像由原先Windows2012的方块变成圆形 继续 进入系统,乍一看,以为是WIN10呢,注意右下角 如此做法,似乎在传递win10的最佳服务器系统就是他了 开始菜单,Al

映像劫持技术(1):简单介绍

映像劫持,即Image File Execution Option.在深入了解这个概念之前,可以简单地认为,它可以令应用程度重定向.这是注册表里的一个功能,可以做这样的尝试: 打开注册表——定位到 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options,右键,新建项,将其重命名为notepad.exe.在右边空白处点击右键,新建”字符串值“,将其重命名为”Debugg

掌握 Linux 调试技术

掌握 Linux 调试技术 在 Linux 上找出并解决程序错误的主要方法 Steve Best ([email protected])JFS 核心小组成员,IBM 简介: 您可以用各种方法来监控运行着的用户空间程序:可以为其运行调试器并单步调试该程序,添加打印语句,或者添加工具来分析程序.本文描述了几种可以用来调试在 Linux 上运行的程序的方法.我们将回顾四种调试问题的情况,这些问题包括段错误,内存溢出和泄漏,还有挂起. 本文讨论了四种调试 Linux 程序的情况.在第 1 种情况中,我们

轻松畅快玩转Windows/Linux语音服务接口

仲夏五月,讯飞在线课堂正式开课啦!首推Android SDK精品课程: 季夏六月,研发大神解读Java SDK,玩转开发根本不叫事: 初秋七月,音频处理专题深入剖析了音频处理的那些事: 仲秋八月,又将为您带来什么课程呢?您又期待什么呢? -- 针对PC端开发,科大讯飞技术支持之神大鹏哥将以Windows和LinuxSDK为切入点进行语音云服务的分享.主要精彩内容包括:语音云服务能力介绍.SDK C接口的使用.语音云使用过程中常见集成问题的解决方法和思路. 届时还有美女主播为您引导,在听课和答疑阶

Cadence PDK Automation System (PAS) Release v03.05.003 Windows/Linux 1CD

Cadence PDK Automation System (PAS) Release v03.05.003 Windows/Linux 1CD        Library Builder PAS的Library Builder能把开发的GTE数据自动生成一套完整的PDK,也就是说Library Builder会运行上面所有的GTE生成器来建立PDK库,它包含了Pcell.CDF&Callback.PV文件.技术文件.器件模型文件和Symbol.生成的PDK库可以直接给用户使用.PV Rule

Mentor.Graphics.Questa.VIP.v10.6.Windows.&amp;.Linux 2CD

ANSOFT产品: Ansys Electromagnetics Suite v16.0 Win64 1DVD + 3CD inclueded: - Ansys Electronics Desktop 2015.0.0 (HFSS, HFSS 3D Layout, HFSS-IE, 2D Extractor, Q3D Extractor) - Ansys Electromagnetics 16.0 Modeler Files for CATIAV5 - Ansys Electromagnetic

Windows / Linux / MacOS 设置代理上网的方法汇总

本文汇总了 Windows / Linux / MacOS 设置代理上网的各种方法,总结如下: 1.设置系统代理(Windows.Linux.MacOS) 2.设置代理插件(Chrome.Chromium.Firefox.Opera.QQ等浏览器) 3.第三方软件设置代理,如 Proxifier.花刺代理.代理猎手.QQ设置代理 4.编程使用代理,请见:代码示例 一.设置代理上网的方法汇总 1.Windows 设置代理 1)Windows 系统代理设置 (局部代理) 2)Windows 7 /

ASP.NET Core Windows服务开发技术实战演练

一.课程介绍 人生苦短,我用.NET Core!大家都知道如果想要程序一直运行在Windows服务器上,最好是把程序写成Windows服务程序:这样程序会随着系统的自动启动而启动,自动关闭而关闭,不需要用户直接登录,直接开机就可以启动.今天阿笨将给大家带来实如何利用.NET Core跨平台开发技术在Windows操作系统平台上开发我们的Windows服务应用程序以及在Linux操作系统上部署我们的守护进程(daemon)服务,真真的体现.NET Core的跨平台强大之处: 实现一次编译,多平台部