微软研究院Detour开发包之API拦截技术

合集下载

源程序程序破解之 API HOOK技术

源程序程序破解之 API HOOK技术
*lpBytesReturned = ReadDataFromFile(formatstring(L"1\\%d.in", gCallCounter).c_str(), lpOutBuffer, nOutBufferSize);
gCallCounter ++;
}
#endif
return ret;
}
2)使用刚才提到的方法进行DLL导入
string hexData1 = toHexString((const char *)pbData, strlen((const char *)pbData));
int ret = sub_4026B0(pbData);
string hexData2 = toHexString((const char *)pbData, strlen((const char *)pbData));
gHooks.Add(_T("KERNEL32.DLL"), "DeviceIoControl", my_DeviceIoControl);
static int gCallCounter = 0;
BOOL WINAPI my_DeviceIoControl(HANDLE hDevice, DWORD dwIoControlCode, LPVOID lpInBuffer, DWORD nInBufferSize,
// 指定DLL的某个函数进行HOOK
HANDLE Add(LPCTSTR lpszModule, LPCSTR lpcFuncName, void *pNewAddr, DWORD dwData = 0);
// 给定一个函数地址进行HOOK

【计算机系统应用】_原理_期刊发文热词逐年推荐_20140726

【计算机系统应用】_原理_期刊发文热词逐年推荐_20140726
Байду номын сангаас
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
科研热词 推荐指数 高速公路 1 马氏距离 1 预警 1 面向对象 1 集群 1 防盗技术 1 遗传算法 1 道路网 1 软件体系结构 1 身份认证 1 路况信息 1 评价指标体系 1 访问控制 1 设计模式 1 认证 1 计算机网络攻击 1 计算机组成原理 1 触发器 1 角度相关性 1 表分区 1 虚拟实验室 1 自旋锁 1 自动存储 1 网络安全 1 算法 1 空间特性 1 移动速度 1 神经网络 1 社会化搜索 1 短信增值业务 1 监控中心 1 电子病历 1 滤波反投影 1 正则表达式 1 模式识别 1 模型驱动的软件体系结构 1 模型 1 格式转换 1 查询优化器 1 查询优化 1 服务器标识 1 最短路径 1 时间权值 1 时态过滤 1 数字签名 1 性能测试 1 异步交互 1 建模 1 平行束 1 带宽 1 尿液分析仪 1 实时 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160

ms16-032原理

ms16-032原理

ms16-032原理全文共四篇示例,供读者参考第一篇示例:MS16-032原理是一种用于Windows操作系统的漏洞。

这个漏洞是由Google Project Zero团队发现并报告的,它存在于Windows内核中的GDI (图形设备接口)中。

这个漏洞允许攻击者在操作系统中执行恶意代码并获取更高权限。

在Windows内核中,GDI是一个用于处理图形相关操作的组件。

它包含了诸如绘制方形、线条和填充颜色等功能。

在MS16-032漏洞中,存在一个由于Windows内核中错误地处理特定多个对象布局导致的内存问题。

攻击者可以通过创建一个特定的GDI对象并使其指向一个更大的对象,从而导致内存破坏,并最终实现在系统中执行恶意代码的能力。

攻击者可以通过向Windows操作系统发送特定的恶意代码利用这个漏洞。

一旦成功利用该漏洞,攻击者可以实现提升自身权限并获取对系统的控制。

这可能导致对用户数据的窃取、系统瘫痪或其他潜在的危害。

为了解决这个漏洞,Microsoft发布了相应的安全更新。

这个更新修复了Windows内核中GDI的相关问题,并加强了对恶意代码的防御。

用户应该及时安装这个安全更新以保护他们的系统免受可能的攻击。

MS16-032原理是一个存在于Windows内核中的严重漏洞,可能导致系统遭受恶意攻击。

用户应该保持他们的系统更新,以确保系统的安全性。

在网络安全方面,预防胜于治疗,因此用户应该时刻关注操作系统和应用程序的安全更新,以及采取适当的安全防护措施,以减少遭受网络攻击的风险。

【注:以上文章内容仅供参考,具体以实际情况为准。

】第二篇示例:在计算机安全领域,MS16-032是一个备受关注的重要漏洞,它存在于微软Windows操作系统中。

MS16-032原理的理解和分析对于研究人员和安全专家来说至关重要。

在本文中,我们将深入探讨MS16-032的原理及其对系统安全的影响。

让我们了解一下MS16-032是什么。

hook api几种方法

hook api几种方法

:71A21B72 8B4508 mov eax, dword ptr [ebp+08]
:71A21B75 5F pop edi
:71A21B76 5E pop esi
:71A21B77 C9 leave
:71A21B78 C21000 ret 0010
下面用4种方法来HOOK这个API:
:71A21B62 8BD8 mov ebx, eax
:71A21B64 E8C7F6FFFF call 71A21230 //将被HOOK的机器码(第3种方法)
:71A21B69 3BDF cmp ebx, edi
:71A21B6B 5B pop ebx
:71A21B6C 0F855F940000 jne 71A2AFD1
假设我们的HOOK代码在71A20400处,那么我们把71A21B64处的CALL指令改为CALL 71A20400(原指令是这样的:CALL 71A21230)
而71A20400处的HOOK代码是这样的:
71A20400:
pushad
//在这里做你想做的事情
:71A21B42 57 push edi
:71A21B43 57 push edi
:71A21B44 FF7514 push [ebp+14]
:71A21B47 8945F0 mov dword ptr [ebp-10], eax
:71A21B4A 8B450C mov eax, dword ptr [ebp+0C]
4,上下文的问题,有些HOOK代码不能执行某些操作,否则会破坏原API的上下文,原API就失效了;
5,同步问题,在HOOK代码里尽量不使用全局变量,而使用局部变量,这样也是模块化程序的需要;

od常用下断api

od常用下断api

OD 常用下断API(2009-10-10 11:33:17)标签:od api 断点 it 分类:破解之道1.GetModuleHandleA获取一个应用程序或动态链接库的模块句柄常用于找Magic Jump,破解加密的IAT2.GetCurrentThreadId获取当前线程一个唯一的线程标识符常用于寻找OEP3. CreateFile这是一个全功能的例程,可打开和创建文件、管道、邮槽、通信服务、设备以及控制台常用于程序自校验4.SetWindowText设置窗口的标题文字或控件的内容(在vb里使用:针对vb窗体,应使用caption或text属性)5.VirtualAlloc VirtualFree内存的分配与释放6.bp OpenMutexA双进程转单进程7.LoadLibraryA (用于找Magic Jump)8.he OutputDebugStringA断下后,选中%s%之类的字符,点右键->二进制->使用00填充 常用于 避开Anti ,OD的字符串泄漏漏洞字符串bp GetDlgItemTextA(W) ****bp GetDlgItemIntbp GetWindowTextA(W) ****bp GetWindowWordbmsg XXXX wm_gettext对话框bp MessageBeepbp MessageBoxA(W) ****bp MessageBoxExA(W)bp DialogBoxParamA(W)bp GreateWindowExA(W)bp ShowWindowbp UpdateWindowbmsg XXXX wm_command对于VB的程序用bp MessageBoxA是无法断下来的,bp rtcMsgBox注册表相关bp RegCreateKeyA(W)bp RegDeleteKeyA(W)bp RegQueryValueA(W)bp RegCloseKeybp RegOpenKeyA(W) ****bp RegOpenKeyExA **** 一种不行用另一种时间相关bp GetLocalTimebp GetFileTimebp GetSystemtimeCD-ROM或磁盘相关bp GetFileAttributesA(W) bp GetFileSizebp GetDriveTypebp GetLastErrorbp ReadFilebpio -h (CD-ROM端口地址) R软件狗bpio -h 278Rbpio -h 378RINI初始化文件相关bp GetPrivateProfileStringA **** bp GetPrivateProfileIntbp WritePrivateProfileStringbp WritePrivateProfileInt文件访问相关bp ReadFilebp WriteFilebp CreateFileA ****bp SetFilePointerbp GetSystemDirectory参考自:标 题: 笑解 API 函数 -- API 绝密档案系列之一作 者: gzgzlxg时 间: 2006-03-01 07:14链 接: /showthread.php?threadid=21959详细信息:1. HMODULE GetModuleHandle(LPCTSTR lpModuleName // address of module name to return handle// for);GetModuleHandle 实际上分为两个函数GetModuleHandleA--处理 Ansi 字符串GetModuleHandleW--处理 Unicode 字符串其实真正干活的函数是,GetModuleHandleW (指NT以后的系统),GetModuleHandleA 只不过将用户输入的 Ansi 字符串转成 Unicode 字符串然后就直接调用 GetModuleHandleW,所以在 OD 中如果下断拦截这个函数,直接拦截 GetModuleHandleW 就可以了,保险一个都跑不掉。

Windows下APIHook技术

Windows下APIHook技术

Windows下APIHook技术1 前⾔在Micrisoft Windows中,每个进程都有⾃⼰的私有地址空间。

当我们⽤指针来引⽤内存的时候,指针的值表⽰的是进程⾃⼰的⾃制空间的⼀个内存地址。

进程不能创建⼀个指针来引⽤属于其他进程的内存。

独⽴的地址控件对开发⼈员和⽤户来说都是⾮常有利的。

对开发⼈员来说,系统更有可能捕获错误的内存读\写。

对⽤户⽽⾔,操作系统变得更加健壮。

当然这样的健壮性也是要付出代价的,因为它使我们很难编写能够与其他进程通信的应⽤程序或对其他进程进⾏操控的应⽤程序。

在《Windows 核⼼编程》第⼆⼗⼆章《DLL注⼊和API拦截》中讲解了多种机制,他们可以将⼀个DLL注⼊到另⼀个进程地址的空间中。

⼀旦DLL代码进⼊另⼀个地址空间,那么我们就可以在那个进程中随⼼所欲了。

本⽂主要介绍了如何实现替换Windows上的API函数,实现Windows API HOOK。

API HOOK的实现⽅法⼤概不下五六种。

本位主要介绍了其中的⼀种,即如何使⽤WIndows挂钩来注⼊DLL。

2 使⽤Windows挂钩来注⼊DLL2.1 简单windows消息HOOK2.1.1 SetWindowsHookEx这个是安装狗⼦的函数声明如下:HHOOK WINAPI SetWindowsHookEx(__in int idHook, \\钩⼦类型__in HOOKPROC lpfn, \\回调函数地址__in HINSTANCE hMod, \\实例句柄__in DWORD dwThreadId); \\线程ID,0表⽰所有让我们通过⼀个例⼦来学些下这个API。

进程A(⼀个游戏改建⼯具,需要接获键盘消息),安装了WH_KEYBOARD_LL挂钩,如下所⽰:HOOK hHook = SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, hInstDll, 0); 第⼀个参数表⽰挂钩类型,是⼀个低级键盘钩⼦。

detours hook自定义函数

detours hook自定义函数

detours hook自定义函数使用Detours Hook自定义函数Detours Hook是一种用于修改函数行为的技术,它可以在运行时拦截函数调用并替换为自定义的代码。

这种技术常用于软件开发和逆向工程领域,可以用来实现各种功能,如函数跟踪、性能分析、代码注入等。

在使用Detours Hook自定义函数之前,我们首先需要了解一些基本概念。

Detours是一款由微软研究院开发的软件包,它提供了一组API,可以用来拦截和修改函数调用。

Hook是指通过Detours 技术实现的函数拦截和替换操作。

自定义函数是指我们根据自己的需求编写的代码,用来替换原始函数的行为。

Detours Hook的使用步骤如下:1. 导入Detours库:首先,我们需要将Detours库导入到我们的项目中。

这可以通过在代码中包含Detours头文件,并链接Detours库文件来实现。

2. 定义Hook函数:接下来,我们需要定义一个Hook函数,用来替换原始函数的行为。

这个函数的参数和返回值应该与原始函数保持一致。

3. 创建Hook:使用Detours提供的API,我们可以创建一个Hook,将Hook函数与原始函数进行关联。

这样,当原始函数被调用时,Hook函数就会被执行。

4. 恢复Hook:如果需要恢复原始函数的行为,我们可以使用Detours提供的API来取消Hook操作。

使用Detours Hook自定义函数的好处在于,它可以在不修改原始代码的情况下改变函数的行为。

这对于调试和性能优化非常有用。

例如,我们可以使用Detours Hook来跟踪函数的调用次数和参数,以便进行性能分析。

我们还可以使用Detours Hook来注入自定义代码,实现一些额外的功能。

然而,使用Detours Hook也需要注意一些问题。

首先,我们需要确保Hook函数的实现是正确的,以避免引入错误或歧义。

其次,我们需要注意Hook函数的性能影响,避免对系统性能造成过大的负担。

【计算机应用】_案例_期刊发文热词逐年推荐_20140728

【计算机应用】_案例_期刊发文热词逐年推荐_20140728

107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152
科研热词 本体 案例推理 知识表示 知识共享 案例检索 属性约简 基于案例推理 决策支持系统 xml 预测 项目审批 门户 银企直联 钢铁企业集团 配送中心管理系统 配方优化 遗传算法 连续属性 近似匹配 过程绩效 迁移工作流 迁移实例 质量反馈控制 语义相似性 评价软件 设备维护 订制分发 角色控制模型 蒸汽动力系统 自动售检票系统 能力平衡 网络游戏 网站开发 网站 综合型电子商务 维权 粗糙集 离散化 神经网络 知识重用 知识网格 知识流 相似度匹配 电子政务 电子商务性能指标体系 电信计划 滚装船 消费纠纷 消息顺序图 测试及测试控制表示法第3版 流程协调 汽油调合
测试案例 测试序列 测试 测度 汽车 水产品价格 模糊鉴别 模型驱动 案例相似性 案例查询 案例提取网 案例推理 案例库 权重计算 本质安全 服务型架构 智能算法 智能体 文字图像 数据系统 插件 接地 探讨 打印机 性能评价 性能 快照 微软 弹性指数 弹性 应用 应急管理 层次分析法 对等计算 客户流失 客户信息控制系统 实时数据 安全 大规模定制 大型主机 多源空间数据无缝集成 多方-多属性谈判 多学科设计优化 复用技术 复杂网络 墨料 基于角色访问控制 基于规则推理 基于案例的推理 叠层 原油混输 化工事故 动态组合 功能测试
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

Api hook

Api hook

API拦截(API HOOK)技术及应用常用的API Hook(截取API,或函数钩子)有两种方式:陷阱式、改引入表式。

在Windows 9x、WindowsNT/2000这两个系统中的API Hook代码完全不同。

就Windows 9x而言,16位DLL与32位DLL的API Hook代码也完全不相同。

API HOOK入门API Hook是一项有趣而实用的Windows系统编程技术,应用领域十分广泛,屏幕取词、内码转换、屏幕翻译、中文平台、网络防火墙、串口红外通信或Internet通信的监视等,都涉及到了此项技术。

API Hook就是钩住API,钩就是绕弯的意思,即让API函数的调用先绕一个弯路,在它执行之前,先做一些“预处理”,这样我们就可以监视或定制某个Win32 API的调用,以实现一些特殊的功能。

至于具体可以实现些什么样的功能,就取决于程序设计者的想象力了。

在很多情况下,想监视或改变某个应用程序的一些特定的操作,但是该应用程序却没有提供相应的接口,而又几乎不可能得到其源代码。

因为大多数Windows应用程序的操作很大程度上依赖于API,所以可以采用API Hook的方式来试图监视和改变应用程序的行为。

常用的API Hook有两种方式:陷阱式和改引入表式。

API Hook的运行平台有三种:Windows 9x的16位DLL、Windows 9x的32位DLL和Windows NT/2000的32位DLL。

其关系如表7-1所示。

表7-1 API Hook的方式其中,×表示不能实现;Ο表示只对指定模块有效,对整个进程或整个操作系统无效;―表示在VC下可以实现,在C++Builder/Delphi下很难实现;√表示可以实现。

陷井式API HOOK原理Windows NT/2000陷阱式API Hook的工作原理如图1所示。

其工作过程如下:(1)加载陷阱式API Hook时,需要定位至被截函数处(图中是BF501234),写入一条跳转指令(Jmp XXXX,二进制代码为E9XXXX),表示所有程序调用被截函数时都自动跳转到自定义函数。

安全测试中的拒绝服务攻击检测方法

安全测试中的拒绝服务攻击检测方法

安全测试中的拒绝服务攻击检测方法拒绝服务攻击(Denial of Service, 简称DoS)是一种旨在使目标计算机或网络资源无法正常工作的攻击手段。

在安全测试中,检测和防范拒绝服务攻击是至关重要的。

一、什么是拒绝服务攻击拒绝服务攻击指通过发送大量非法请求或利用漏洞,使目标系统无法响应合法用户请求,从而瘫痪网络或服务器的攻击行为。

这种攻击对于企业和个人用户来说都可能造成严重的影响,如系统崩溃、减慢网速或无法访问某些网站等。

拒绝服务攻击可以分为两类:弱攻击和强攻击。

弱攻击主要通过耗尽目标系统的资源,如带宽、内存或处理能力,以达到拒绝服务的目的。

强攻击则是利用漏洞或恶意代码来直接瘫痪目标系统。

二、常见的拒绝服务攻击方法1. SYN Flood攻击SYN Flood攻击是一种典型的网络层拒绝服务攻击,攻击者通过发送大量伪造的TCP连接请求(SYN包),占用目标系统的资源,使其无法正常工作。

这种攻击能够迅速耗尽系统的处理能力,导致系统崩溃或无法响应合法用户请求。

2. UDP Flood攻击UDP Flood攻击是基于用户数据报协议(UDP)的一种拒绝服务攻击方法。

攻击者通过向目标主机发送大量的UDP数据包,占用目标系统的带宽和处理能力,使其无法正常运作。

与TCP Flood攻击不同,UDP Flood攻击不需要建立连接,因此更容易实施。

3. HTTP Flood攻击HTTP Flood攻击是针对Web服务器的拒绝服务攻击,攻击者通过发送大量的HTTP请求,占用服务器资源,使其无法正常响应合法用户的请求。

这种攻击常常伪装成合法的请求,难以区分,对于大规模的网站来说,可能导致系统崩溃。

三、拒绝服务攻击检测方法针对拒绝服务攻击的检测方法主要包括以下几个方面:1. 流量分析通过对网络流量进行监测和分析,可以检测到异常流量模式。

拒绝服务攻击通常会导致网络流量突增,出现异常的流量模式,如大量的同源请求或源IP地址集中在某个范围等。

SMG技术白皮书

SMG技术白皮书

Symantec™ Mail Security 8300技术白皮书目录1. 概述 (3)2. 垃圾邮件问题的现状 (4)2.1. 垃圾邮件的定义 (4)2.2. 垃圾邮件的演化 (4)2.3. 垃圾邮件发送者所采用的手段............................................................... 52005年6月Symantec 和Symantec 徽标是 Symantec 公司和/或其附属机构在美国和其他国家或地区的注册商标。

“Symantec”及“赛门铁克”是Symantec 公司在中国的注册商标。

其他公司和产品名称可能是其各自公司的商标或注册商标,特此致谢。

版权所有©2004 Symantec 公司。

保留所有权利。

3. Symantec Mail Security 8300反垃圾邮件解决方案 (6)3.1. SMS8300设备概述 (6)3.2. SMS8300的使用方式 (8)3.3. SMS8300的工作原理 (9)3.4. SMS8300体系结构概述 (11)3.5. SMS8300系列功能介绍 (12)3.5.1. 电子邮件防火墙 (12)3.5.2. TCP 层流量优化 (13)3.5.3. 反垃圾邮件技术 (14)3.5.4. 防病毒技术 (16)3.5.5. 内容策略一致性 (17)3.5.6. 组策略和过滤策略 (18)3.5.7. 最终用户功能 (19)3.5.8. 管理和易管理性 (19)3.5.9. 设备型号和规格 (22)3.6. 部署模型 (23)3.6.1. 基本网关部署 (23)3.6.2. 网关部署 - 多个设备 (24)3.6.3. DMZ 中的网关部署 (25)3.6.4. 网关部署 - 带有 SMTP 网关的 DMZ (25)3.6.5. 多层网关部署 (26)3.6.6. 网关后部署 (27)随着信息时代到来,电子邮件在人们的生活中扮演越来越重要的角色,企业进行业务往来更加依赖于邮件系统的正常运作。

detours hook系统函数 -回复

detours hook系统函数 -回复

detours hook系统函数-回复什么是detours hook系统函数?Detours hook系统函数是一种用于对系统函数进行拦截和修改的技术。

它可以注入到目标进程中并在运行时修改系统函数的行为,从而实现一些特定的功能。

Detours hook系统函数广泛应用于Windows操作系统中的应用程序开发和系统优化领域。

下面将一步一步地回答与Detours hook系统函数相关的问题。

第一步:什么是Detours库?Detours库是由Microsoft Research开发的一组用于拦截和修改Windows操作系统函数的工具集。

该库提供了一套API,开发人员可以使用这些API注入和修改目标进程中的系统函数。

第二步:Detours hook系统函数的原理是什么?Detours hook系统函数的原理是使用Detours库中的API来拦截目标函数的调用,并将其重定向到另一个自定义的函数。

当目标函数被调用时,Detours库将首先调用自定义的函数来执行特定的逻辑,然后再调用目标函数本身。

这使得开发人员能够在目标函数被执行之前或之后对其进行修改或扩展。

第三步:Detours hook系统函数有哪些应用场景?Detours hook系统函数具有广泛的应用场景。

其中一些应用场景包括:1. 代码注入:Detours hook系统函数可以用于将自定义代码注入到目标进程中,以控制和修改目标进程的行为。

2. API Hooking:开发人员可以使用Detours库来拦截和修改API的调用,以实现自定义的功能或修复已知的问题。

3. 动态插桩:Detours hook系统函数可以用于在目标进程运行时对其进行监控,并收集关键信息或执行某些操作。

4. 调试和逆向工程:Detours hook系统函数是逆向工程师和软件调试人员的重要工具,可以用于分析和理解目标系统的行为和内部结构。

5. 性能优化:通过拦截和修改系统函数,Detours hook系统函数可以用于优化和加速目标进程的性能。

Windows下基于SPI的网络数据包拦截的设计与实现

Windows下基于SPI的网络数据包拦截的设计与实现

Windows下基于SPI的网络数据包拦截的设计与实现作者:张丙才来源:《软件导刊》2011年第11期摘要:基于TCP、UDP协议的网络应用程序如果在内部对代码段进行检查或修复系统挂钩,通过HOOK API截包技术基本失效,在这种情况下,使用WINSOCK2 SPI技术就完全胜任对特定网络应用程序数据包的拦截任务,而且实现简单效率高,可移植性强。

关键词:SPI;服务提供者;数据包过滤;中图分类号:TP301 文献标识码:A 文章编号:1672-7800(2011)011-0015-0 引言随着网络技术的飞速发展, 网络截包技术成为网络安全应用中的一项重要技术.通过网络截包技术可以截获来自网络的数据包,根据需要对网络数据包进行过滤,协议转换和截取报文分析,典型的应用有网络防火墙和代理服务器等。

根据TCP/IP协议在Windows网络架构中实现的特点,在Windows系统环境下,实现网络数据包截获的方式有多种.在用户模式下有HOOK API截包技术, WINSOCK 2000包过滤技术和WINSOCK2 SPI等技术.在内核模式下有NDIS中间驱动程序、NDIS HOOK Driver、TDI(传输驱动接口)过滤驱动程序等技术。

我们对Windows系统中用户模式下使用HOOK API截包技术非常熟悉,而且在软件编程中经常使用这一技术对基于TCP、UDP协议的网络应用程序(如网络游戏,浏览器,FTP客户端等)截包分析,以实现软件特定功能.但是基于TCP、UDP协议的网络应用程序如果在内部对代码段进行检查或修复系统挂钩,使得我们不能挂钩特定的API函数(如send()或recv()等),在这种情况下HOOK API截包技术基本失效。

为增强程序的可移植型,我们又不想涉及驱动。

在这种情况下,使用WINSOCK2 SPI技术就完全胜任对特定网络应用程序数据包的拦截任务,而且实现简单效率高。

文中将详细介绍Windows下基于SPI技术的网络数据包拦截的设计与具体实现。

【2017年整理】微软研究院Detour开发包之API拦截技术

【2017年整理】微软研究院Detour开发包之API拦截技术

微软研究院Detour开发包之API拦截技术我们截获函数执行最直接的目的就是为函数增添功能,修改返回值,或者为调试以及性能测试加入附加的代码,或者截获函数的输入输出作研究,破解使用。

通过访问源代码,我们可以轻而易举的使用重建(Rebuilding)操作系统或者应用程序的方法在它们中间插入新的功能或者做功能扩展。

然而,在今天这个商业化的开发世界里,以及在只有二进制代码发布的系统中,研究人员几乎没有机会可以得到源代码。

本文主要讨论Detour在Windows 二进制PE文件基础上的API截获技术。

对于Linux平台,作这件事情将会非常的简单,由于最初的操作系统设计者引入了LD_PRELOAD。

如果你设置LD_PRELOAD=mylib.so ,那么应用程序在载入dll时,会先查看mylib.so的符号表,在relocation 的时候会优先使用mylib.so 里的symbol 。

假如你在mylib.so里有个printf() ,那么这个printf就会替代libc的printf。

而在mylib.so里的这个printf 可以直接访问libc.so里的printf函数指针来获得真正的printf的入口地址。

这样,所有的dll的API HOOK在loader加载dll的时候就已经完成,非常自然,和平台相关的部分全部交给loader去处理。

一、Detour开发库:简介Detours是一个在x86平台上截获任意Win32函数调用的工具库。

中断代码可以在运行时动态加载。

Detours使用一个无条件转移指令来替换目标函数的最初几条指令,将控制流转移到一个用户提供的截获函数。

而目标函数中的一些指令被保存在一个被称为“trampoline” (译注:英文意为蹦床,杂技)的函数中,在这里我觉得翻译成目标函数的部分克隆/拷贝比较贴切。

这些指令包括目标函数中被替换的代码以及一个重新跳转到目标函数的无条件分支。

而截获函数可以替换目标函数,或者通过执行“trampoline”函数的时候将目标函数作为子程序来调用的办法来扩展功能。

基于Windows API的恶意代码检测方法

基于Windows API的恶意代码检测方法

1 恶意代码技术
1.1
60
相关工作
Christodorescu 和 Jha 等在[4]中为我们提出了一些主流的代码模糊技术, 并且在一些反病
毒软件上使用静态方法进行了相应测试。 他们使用病毒的部分指令作为病毒的签名, 并且自 动化实现了这一过程,在自动化实现的过程中使用了 API 调用图。他们的最终目标是寻找 API 调用图标注的程序中自动生成符合恶意程序行为的代码。 Lee 和 Jeong 等在[5]中处理恶 意变种程序的时候使用了 API 调用图,他们提出了一种基于程序 API 调用进行检测的方法。 他们监视整个恶意程序的 API 调用并生成 API 调用图。在这些 API 调用图中,API 被视为
10
An Windows API based approach to malware detection
15
WANG Chao, LIN Zhaowen
(Institute of Network Technology, Beijing University of Posts and Telecommunications, Beijing, 100876) Abstract: Large parts of malwares are evolved from known malwares. Authors of malwares most frequently obfuscate their programs by using code obfuscation techniques on known malwares. Nowadays, signature-based detection techniques hardly cover the requirements of anti-virus detection in that they are syntactic based. In addition, the emergence of obfuscation techniques like Metamorphic and Polymorphic malwares dramatically increases the false negative rate of detection. This article is intended to detect programs by extracting their APIs (ACS). Besides, this article puts forward a method in calculating the similarity of two programs identified by their ACS matrices Key words: code obfuscation; API-calling matrix; weight matrix; similarity comparison

运用Detours库hookAPI(原理是改写函数的头5个字节)

运用Detours库hookAPI(原理是改写函数的头5个字节)

运⽤Detours库hookAPI(原理是改写函数的头5个字节)⼀、Detours库的来历及下载:Detours库类似于WTL的来历,是由 and Doug Brubacher⾃⼰开发出来,于99年7⽉发表在⼀篇名为《.》的论⽂中。

基本原理是改写函数的头5个字节(因为⼀般函数开头都是保存堆栈环境的三条指令共5个字节:8B FF 55 8B EC)为⼀条跳转指令,直接跳转到⾃⼰的函数开头,从⽽实现API拦截的。

后来得到MS的⽀持并在其⽹站上提供下载空间:⽬前最新的版本是:Detours Express 2.1。

⼆、Detours的使⽤准备:Detours库是以源码形式提供的,这给我们的使⽤带来极⼤的⽅便。

你可以选择把它编译成库、也可以直接把源码加⼊⼯程……形式使⽤。

农夫采取的⽅法是编译成库后使⽤的。

编译库的⽅法很简单,下载包中已经制作好了makefile,我们只须直接⽤vc下的nmake⼯具直接编译即可。

鉴于前段时间在⽹上看见有部分朋友对此也存疑惑,农夫在此“浪费”⼀下空间,详细解说⼀下编译的过程(括号中为本⼈的例⼦):1、运⾏你下载的安装包,把⽂件解压到磁盘上此处建议您把解压后的src⽂件夹拷贝到VC的安装⽬录的VC98⼦⽬录下(D:/SDK/6.0/VC98)。

对于像我⼀样使⽤库的⽅式会有好处,稍后即讲:)。

2、编译并设置开发环境在你刚才拷贝过去的src⽂件夹下建⽴⼀个*.bat⽂件,⾥⾯填上“../bin/nmake”内容后保存即可。

运⾏该批处理⽂件,恭喜您:库已经编译完成,唯⼀要做的是要把../bin/Detoured.dll拷贝到您的系统⽬录下。

现在您的⼯程⾥⾯包含如下⽂件即可运⽤Detours库来进⾏开发了:#include <detours.h>#pragma comment(lib, "detours.lib")#pragma comment(lib, "detoured.lib")对于没有把src⽂件拷贝过来的朋友,也不⽤着急。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

我们截获函数执行最直接的目的就是为函数增添功能,修改返回值,或者为调试以及性能测试加入附加的代码,或者截获函数的输入输出作研究,破解使用。

通过访问源代码,我们可以轻而易举的使用重建(Rebuilding)操作系统或者应用程序的方法在它们中间插入新的功能或者做功能扩展。

然而,在今天这个商业化的开发世界里,以及在只有二进制代码发布的系统中,研究人员几乎没有机会可以得到源代码。

本文主要讨论Detour在Windows二进制PE文件基础上的API截获技术。

对于Linux平台,作这件事情将会非常的简单,由于最初的操作系统设计者引入了LD_PRELOAD。

如果你设置LD_PRELOAD=mylib.so ,那么应用程序在载入dll时,会先查看mylib.so的符号表,在relocation 的时候会优先使用mylib.so 里的symbol 。

假如你在mylib.so里有个printf() ,那么这个printf就会替代libc 的printf。

而在mylib.so里的这个printf可以直接访问libc.so里的printf函数指针来获得真正的printf的入口地址。

这样,所有的dll的API HOOK在loader加载dll的时候就已经完成,非常自然,和平台相关的部分全部交给loader去处理。

一、Detour开发库:简介Detours 是一个在x86平台上截获任意Win32函数调用的工具库。

中断代码可以在运行时动态加载。

Detours使用一个无条件转移指令来替换目标函数的最初几条指令,将控制流转移到一个用户提供的截获函数。

而目标函数中的一些指令被保存在一个被称为“trampoline”(译注:英文意为蹦床,杂技)的函数中,在这里我觉得翻译成目标函数的部分克隆/拷贝比较贴切。

这些指令包括目标函数中被替换的代码以及一个重新跳转到目标函数的无条件分支。

而截获函数可以替换目标函数,或者通过执行“trampoline”函数的时候将目标函数作为子程序来调用的办法来扩展功能。

Detours 是执行时被插入的。

内存中的目标函数的代码不是在硬盘上被修改的,因而可以在一个很好的粒度上使得截获二进制函数的执行变得更容易。

例如,一个应用程序执行时加载的DLL中的函数过程可以被插入一段截获代码(detoured),与此同时,这个DLL还可以被其他应用程序按正常情况执行(译注:也就是按照不被截获的方式执行,因为DLL二进制文件没有被修改,所以发生截获时不会影响其他进程空间加载这个DLL)。

不同于DLL 的重新链接或者静态重定向,Detours库中使用的这种中断技术确保不会影响到应用程序中的方法或者系统代码对目标函数的定位。

如果其他人为了调试或者在内部使用其他系统检测手段而试图修改二进制代码,Detours 将是一个可以普遍使用的开发包。

据我所知,Detours是第一个可以在任意平台上将未修改的目标代码作为一个可以通过“trampoline”调用的子程序来保留的开发包。

而以前的系统在逻辑上预先将截获代码放到目标代码中,而不是将原始的目标代码做为一个普通的子程序来调用。

我们独特的“trampoline”设计对于扩展现有的软件的二进制代码是至关重要的。

出于使用基本的函数截获功能的目的,Detours同样提供了编辑任何DLL导入表的功能,达到向存在的二进制代码中添加任意数据节表的目的,向一个新进程或者一个已经运行着的进程中注入一个DLL。

一旦向一个进程注入了DLL,这个动态库就可以截获任何Win32函数,不论它是在应用程序中或者在系统库中。

基本原理1.WIN32进程的内存管理众所周知,WINDOWS NT实现了虚拟存储器,每一WIN32进程拥有4GB的虚存空间,关于WIN32进程的虚存结构及其操作的具体细节请参阅WIN32 API手册,以下仅指出与Detours相关的几点:(1) 进程要执行的指令也放在虚存空间中(2) 可以使用QueryProtectEx函数把存放指令的页面的权限更改为可读可写可执行,再改写其内容,从而修改正在运行的程序(3) 可以使用VirtualAllocEx从一个进程为另一正运行的进程分配虚存,再使用QueryProtectEx函数把页面的权限更改为可读可写可执行,并把要执行的指令以二进制机器码的形式写入,从而为一个正在运行的进程注入任意的代码。

2.拦截WIN32 API的原理Detours定义了三个概念:(1) Target函数:要拦截的函数,通常为Windows的API。

(2) Trampoline函数:Target函数的部分复制品。

因为Detours将会改写Target函数,所以先把Target函数的前5个字节复制保存好,一方面仍然保存Target函数的过程调用语义,另一方面便于以后的恢复。

(3) Detour 函数:用来替代Target函数的函数。

Detours 在Target函数的开头加入JMP Address_of_ Detour_ Function指令(共5个字节)把对Target函数的调用引导到自己的Detour函数,把Target函数的开头的5个字节加上JMP Address_of_ Target _ Function+ 5共10个字节作为Trampoline函数。

请参考下面的图1和图2。

(图1:Detour函数的过程)(图2:Detour函数的调用过程)说明:目标函数:目标函数的函数体(二进制)至少有5个字节以上。

按照微软的说明文档Trampoline函数的函数体是拷贝前5个字节加一个无条件跳转指令的话(如果没有特殊处理不可分割指令的话),那么前5个字节必须是完整指令,也就是不能第5个字节和第6个字节是一条不可分割的指令,否则会造成Trampoline 函数执行错误,一条完整的指令被硬性分割开来,造成程序崩溃。

对于第5字节和第6个字节是不可分割指令需要调整拷贝到杂技函数(Trampoline)的字节个数,这个值可以查看目标函数的汇编代码得到。

此函数是目标函数的修改版本,不能在Detour函数中直接调用,需要通过对Trampoline函数的调用来达到间接调用。

Trampoline函数:此函数默认分配了32个字节,函数的内容就是拷贝的目标函数的前5个字节,加上一个JMP Address_of_ Target _ Function+5指令,共10个字节。

此函数仅供您的Detour函数调用,执行完前5个字节的指令后再绝对跳转到目标函数的第6个字节继续执行原功能函数。

Detour函数:此函数是用户需要的截获API的一个模拟版本,调用方式,参数个数必须和目标函数相一致。

如目标函数是__stdcall,则Detour函数声明也必须是__stdcall,参数个数和类型也必须相同,否则会造成程序崩溃。

此函数在程序调用目标函数的第一条指令的时候就会被调用(无条件跳转过来的),如果在此函数中想继续调用目标函数,必须调用Trampoline函数(Trampoline函数在执行完目标函数的前5个字节的指令后会无条件跳转到目标函数的5个字节后继续执行),不能再直接调用目标函数,否则将进入无穷递归(目标函数跳转到Detour函数,Detour函数又跳转到目标函数的递归,因为目标函数在内存中的前5个字节已经被修改成绝对跳转)。

通过对Trampoline函数的调用后可以获取目标函数的执行结果,此特性对分析目标函数非常有用,而且可以将目标函数的输出结果进行修改后再传回给应用程序。

Detour提供了向运行中的应用程序注入Detour函数和在二进制文件基础上注入Detour函数两种方式。

本章主要讨论第二种工作方式。

通过Detours提供的开发包可以在二进制EXE 文件中添加一个名称为Detour的节表,如下图3所示,主要目的是实现PE加载器加载应用程序的时候会自动加载您编写的Detours DLL,在Detours Dll中的DLLMain中完成对目标函数的Detour。

(图3)二、Detours提供的截获API的相关接口Detours的提供的API 接口可以作为一个共享DLL给外部程序调用,也可以作为一个静态Lib链接到您的程序内部。

Trampoline函数可以动态或者静态的创建,如果目标函数本身是一个链接符号,使用静态的trampoline函数将非常简单。

如果目标函数不能在链接时可见,那么可以使用动态trampoline 函数。

要使用静态的trampoline函数来截获目标函数,应用程序生成trampoline的时候必须使用DETOUR_TRAMPOLINE宏。

DETOUR_TRAMPOLINE有两个输入参数:trampoline的原型和目标函数的名字。

注意,对于正确的截获模型,包括目标函数,trampoline函数,以及截获函数都必须是完全一致的调用形式,包括参数格式和调用约定。

当通过trampoline函数调用目标函数的时候拷贝正确参数是截获函数的责任。

由于目标函数仅仅是截获函数的一个可调用分支(截获函数可以调用trampoline函数也可以不调用),这种责任几乎就是一种下意识的行为。

使用相同的调用约定可以确保寄存器中的值被正确的保存,并且保证调用堆栈在截获函数调用目标函数的时候能正确的建立和销毁。

可以使用DetourFunctionWithTrampoline函数来截获目标函数。

这个函数有两个参数:trampoline函数以及截获函数的指针。

因为目标函数已经被加到trampoline函数中,所有不需要在参数中特别指定。

我们可以使用DetourFunction函数来创建一个动态的trampoline函数,它包括两个参数:一个指向目标函数的指针和一个截获函数的指针。

DetourFunction分配一个新的trampoline函数并将适当的截获代码插入到目标函数中去。

当目标函数不是很容易使用的时候,DetourFindFunction函数可以找到那个函数,不管它是DLL中导出的函数,或者是可以通过二进制目标函数的调试符号找到。

DetourFindFunction 接受两个参数:库的名字和函数的名字。

如果DetourFindFunction函数找到了指定的函数,返回该函数的指针,否则将返回一个NULL指针。

DetourFindFunction 会首先使用Win32函数LoadLibrary 和GetProcAddress来定位函数,如果函数没有在DLL 的导出表中找到,DetourFindFunction将使用ImageHlp库来搜索有效的调试符号(译注:这里的调试符号是指Windows本身提供的调试符号,需要单独安装,具体信息请参考Windows的用户诊断支持信息)。

相关文档
最新文档