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!
windows、linux劫持技术的更多相关文章
- Windows完成端口与Linux epoll技术简介
收藏自:http://www.cnblogs.com/cr0-3/archive/2011/09/09/2172280.html WINDOWS完成端口编程1.基本概念2.WINDOWS完成端口的特点 ...
- Windows完成端口与Linux epoll技术简介(能看懂)
WINDOWS完成端口编程1.基本概念2.WINDOWS完成端口的特点3.完成端口(Completion Ports )相关数据结构和创建4.完成端口线程的工作原理5.Windows完成端口的实例代码 ...
- dll劫持技术
DLL劫持技术当一个可执行文件运行时,Windows加载器将可执行模块映射到进程的地址空间中,加载器分析可执行模块的输入表,并设法找出任何需要的DLL,并将它们映射到进程的地址空间中. DLL劫持原理 ...
- 掌握 Linux 调试技术
掌握 Linux 调试技术 在 Linux 上找出并解决程序错误的主要方法 Steve Best (sbest@us.ibm.com)JFS 核心小组成员,IBM 简介: 您可以用各种方法来监控运行着 ...
- windows/Linux下设置ASP.Net Core开发环境并部署应用
10分钟学会在windows/Linux下设置ASP.Net Core开发环境并部署应用 创建和开发ASP.NET Core应用可以有二种方式:最简单的方式是通过Visual Studio 2017 ...
- Windows/Linux下磁盘使用的图形化工具简介
Windows/Linux下磁盘使用的图形化工具简介 如何以图形界面查看磁盘及分区的大小及剩余容量呢?今天我为大家介绍两款Windows/Linux下磁盘使用的图形化工具分别是Spacesniff ...
- ASP.NET Core Windows服务开发技术实战演练
一.课程介绍 人生苦短,我用.NET Core!大家都知道如果想要程序一直运行在Windows服务器上,最好是把程序写成Windows服务程序:这样程序会随着系统的自动启动而启动,自动关闭而关闭,不需 ...
- Windows/Linux 代码共享,开发者称此举使Linux有了更差的结局
英特尔近期披露了 Linux 图形驱动程序相关的一些细节并指出,英特尔的图形驱动程序现在已在 Windows/Linux 之间共享约 60% 的代码库,90~100% 的性能. 针对此事,红帽公司的高 ...
- 让你的Windows/Linux玩上Switch!
1 前言 某天在Github上面看到了两个Switch的模拟器: yuzu Ryujinx 于是就想动手想尝试一下在Linux上面玩上Switch. 本文首先简单介绍一下两个模拟器,接着是两个模拟器的 ...
随机推荐
- nyoj--744--蚂蚁的难题(一)
蚂蚁的难题(一) 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 小蚂蚁童鞋最近迷上了位运算,他感觉位运算非常神奇.不过他最近遇到了一个难题: 给定一个区间[a,b],在 ...
- C++ 指针 引用 变量引用
变量引用: 引用的作用就是给变量起个别名,假如有一个变量a,想给它起个别名b, 可以这么写:int a;//定义a是整型变量.int &b=a;//声明b是a的引用. 上面就是 ...
- 带中横线的日期格式在iOS手机系统上 转换时间戳NaN问题
类似于 '2019-04-01 14:13:00' 这样的日期格式转换时间戳在iOS手机上是无法转换的,需要先处理日期格式成 '2019/04/01 14:13:00' var str = '2019 ...
- SSRS 报表 如何加参数
SSRS 报表 如何加参数 连接上以后出现一个问题 就是给报表加上参数以后报表不断刷新,跟上次那个报表刷新是同样的问题.那么下面我们来解决一下. 1. 这是给报表添加默认参数进入页面后就不断的刷新刷新 ...
- html中<frameset>标签,框架结构各窗口的父级菜单子级菜单关系
这个问题搞得我头大,并且在查过百度后各位大佬给出的解释我都不能理解,应该是我太白的原因,希望我写的能好理解. 下面文章窗口1.2.3,在代码里分别为chuangkou.chuangkou1.chuan ...
- [ Java ] String 轉型 ArrayList
Lambda 對我而言一很像天書 這個行 Java code 讓我開始有點些微有 Lambda 感覺 https://stackoverflow.com/questions/10706721/conv ...
- 开源作品-ThinkPHP在线分析工具(单文件绿色版)-TPLogAnalysis_PHP_1_0
TPLogAnalysis_PHP_1_0 前言:项目开发基于ThinkPHP框架,但是在调试程序的时候,没有一款日志可视化分析工具.在网络也找不到任何相关的TP日志分析工具.求人不如求己,于是决定抽 ...
- cms初步构想
一.cms系统的初步构想 公司正准备使用yii框架重新弄个类cms的系统: 初步的功能: 栏目文章的管理 SEO的优化功能 推荐位管理 一些思路和规则: 数据库表名的定义:通过"大模块名称+ ...
- Mac 查看 剪贴板/剪切板/粘贴板 内容与格式
命令行形式 osascript -e 'clipboard info' GUI 形式 Finder->编辑->显示剪贴板 图示:
- 团体程序设计天梯赛-练习集-L1-029. 是不是太胖了
L1-029. 是不是太胖了 据说一个人的标准体重应该是其身高(单位:厘米)减去100.再乘以0.9所得到的公斤数.已知市斤是公斤的两倍.现给定某人身高,请你计算其标准体重应该是多少?(顺便也悄悄给自 ...