当前位置:文档之家› API HOOK关键技术解析

API HOOK关键技术解析


1 I k A H o 系统一般框架 P o
一个 A I o 主要山两个模块组成:钩子服务器( o k P H k o Ho Sr r e e 模块,一般为 E E v) X 的形式;钩子驱动器(ok vr H o Di ) re 模块,一般为D L L 的形式。钩子服务器主要负责向目 标进程 注人钩子驱动器,使得钩子驱动器运行在目 标进程的地址空 间,而钩子驱动器则负责实际的A I P拦截处理工作,实现我 们期望的功能。上 述关于A I k P H o 的两个部分, o 分别涉及两 项关键技术的实现: L D L注人技术和A I P 拦截技术。
21利用注册表注入 D L . L
当准备拦截的目 标进程连接 f e3. l U r2 l s d ,也即使用了
个生命周期内的 A I P 调用情况进行监控,用这种方法会遗翻
某些 A I P 的调用 。
2 . 3远程线程技术
远程线程技术指的是通过Ceee o Trd r t m t h a在另一个 aR e e
远程进程的内存空间
ieun d = i Poes m r(R m tPoes o e Wre rcsMe oy e oe cs, 被保护的 D L文件被篡改( R trC t h r L 数字签名技术) ,它就会自动从 pz i iR m t(V I )s i iN m , ,U L; s b l e o , OD pz b l a e b L ) L Fe eP L Fe cN dcce 恢复这个文件。 lahl l 卜 虽然说有方法可以绕过D L L 保护( 例
பைடு நூலகம்
s 要是 程, 以 要申 足 的 限POES AE HED 制— 内核级的拦截和用户级的拦截。内核级的钩子 i 所 需 请 够 权 ( CS CET_ RA , R R T ’ 然后, od i a W 这个线程来启动我们的 D L 建立L aLb r ry L , 任何细节,不在本文的探讨范围之内。而用厂级的钩子则通 L 中实现整个A I P的拦截工作, 。 般有以 下 LaL r W函数是在kr l .I odia br y e e 2 l n 3 d 中定义的, 用来加载D L 常是在普通的D L L
/ dia W的入u 计算LaL r o br y 地址
P HR AD S AR _ OUT NE f S at d = _ T T R T E I p n trAd r
(T R A _ A T R T N ) P H E D S R _ OU I E T
如先更改dcce 录,的备份再修改 D L lah 目 卜 l L 文件、或者利用 Ko n L s nw D L 键值更改D L的默认启动路径等) L ,但是可以顶
wokld)木马D L s o .l c d l。 L 遇到不认识的调用, 使用函数转发器
码并处理。 前对于 日 特洛伊D L L 技术, 微软已有防范 Wi K n 2 的s t 3 口 ye 2 录下设i a e 录, sm Y l c 口 这个口 dc h l 录中存放着 大量
的D L L 文件( 也包括 ・ 峡重要的ee x文件) 。 操作系统发现 , 城
数( e no sokx 在St dwH oE 的参数中指定) Wi 能够对此消息进行适
享, 必须把它存储在一个共享的数据仄域。 C + 在V + 中我们可 以采用预编译指令#r m dt s 在D L # a a e L 文件中创建一个新 pg a g a 的段, 并在D F E 文件中把该段的属性设置为” a d, s r " 这样就 he
\pIt L 键值中定义钩f A p iD s n L 驱动器。 该键值标识的D L L将 在符合条件的应用程序启动时自 动加载。这是Wi o s n w 操作 保护) d 系统内建的机制。 这种注人方式存在的缺点是: 仅适用于N / T he o P cs O eP csP C S C A ET R A oe = pnr e ( O E S E T _ H E Rm t r s e o sR R 2 K操作系统;如果需要激活或停止钩子的注人,只有重新启 D/ I / 允许远程创建线程 P O E S M P R TO I R C S一 - E A IN O / / 允许远
见,未来微软必将更加小心地保护币要的D L L 文件。
G trc des e drs G t dl ad (E T" e e 2) e oA P ( Mou H n l T X ( r l ) e e K n 3" , 0od i a W" L aLb r ) ry ;
3 改写执行代码 . 2
文作,它 只存一 参数: L 文件 对路径名pzi i 儿种方法。 个 D L 的绝 s b l L Fe
Nm ( ae 也就是D L L 的全路径文件名) 由于D L 。 L 是在远程进程 内调用的, 所以首先还需要将这个文件名复制到远程地址空 间:否则远程线程读不到这个参数) ( / L 计算 D 路径名需要的内存空间 L
件,替换原来的 w o k 2dI sc 3 .I将原先的 D L文件贡命名为 ( L
/ ullc、 使用Vra l E 函数在远程进程的内存地址空间分 l Ao t
配D L L 文件名缓冲区
NUL , , M_ MMI , GE R AD Lc ME C b O TP A _ E WR T ) IE ;
i c=1 sl W(s b l a e *i o( Ir n pz i iN m ) s ef H R ; n b ( te t + L Fe ) z WC A )
3 . 1代理D L特洛伊木马) L(
特洛伊D 的工作原理是使用木马D L L L L 替换常用的D L L
文件, 通过函数转发器将正 常的调用转发给原D L 截获并 L, 处理特定的消息。 譬如, 我们知道WID WS o e . N O 的Sc tx k l的 函数存放在wok2 1i 我们另写 一 s k2 l I s 3.1 c d B, t 个wo 3.l 文 c d 木I
网萝 旦全 技木与应用 2 6 1 苦 0. 01
万方数据
由于 后面需要写入远程进程的内存地址空间并建立 远程线
V O E A I N, WRT ) M_ R TO P V M_ IE 。
在A I k o 应用的系统级别方面, PH o 有两类A I P拦截的机 通过一个内核模式的驭动程序来实现,能捕捉到系统活动的
的( : 属J 内核模块) ,所以这个人口地址同样适用于远程进程。
最后, 我们通过建立远程线程时的地址p S r dr f tt d 实 n aA (
际上就是LaLb r od ia W的入口地址) ry 和传递的参数pzi i s bl L Fe 到原先的A I P 函数的地址,然后把该函数开始的几个字 省 用 R m t我们复制到远程进程内存空间的木马D L e o( e L 的全路径文 i 指令代替,从而使得对该 A I mp P 函数的调用能够转向我们 件名) 在远程进程内启动钩子驱动器 D L: L 自定义的函数调用。 / 1 启动远程线程LaL ry 通过远程线程调用用户 odia W, br 3 改写P . 3 E文件的输人地址表 的D L L 文件 P 文件的结构如图2 E 所示。 开始是 ・ O 程序, 段D S 当你 h e o T r dCe e m t h a( e o Po s/ h a= r t e o T r d R m t r es 被 Rm t e e aR e e h e c , / 的程序在不支持Wi o s n w 的环境中运行时,它会显示警告语 d
动Wi o s 不能用此方法向没有使用Ue 2 l n w; d s 3.l r d 的应用程序
注入 D L L ,例如控制台应用程序等;钩 子 驱动器D L将注人 L 程V M操作 P O E SV WRT , 允许远程V _ _ IE/ R CS M M写
F L Ed R moe oes ; w e t rcsl) A S, P d
A I k P H o 关键技术解析 o
刘克胜 王忠寿
解放军电子 〔 程学院网络 〔 程系信息安全教研室 安徽 203 307
摘要:本文分析了A I k P H o 系统的实现结构和系统涉及的 D L注人和A I o L P 拦截两项关键技术的多种实现途径,并结合 应用给出了编程实现的方法。 关键词:A I K;关键技术;解析 P H O O
有许多拦截的方法是基 于可执行代码的改写,第 ‘ 种方
说 面计算 明一卜 ,卜 的其实是本进程内LaL r W的 o ia d br y
人口 地址, 批由于kr ll e ed 模块在所有进程内的地址都是相同 n .l
法是改变在 C L 指令中使用的函数地址。它的从本思路是 AL 检索出日 标进程需要拦截的 A I A L P 的C L 指令,然后把原先 的地址改成为我们在钩 子 驱动器中提供的函数地址。第二种 方法就是常用的 i X X的方法。 l mp X : 要的实现步骤是先找
pzi i e o =P R Vra l E ( e o P cs Rm t ( T ) ullcx Rm t r es f w r交给wokld ;遇到特殊的请求( s bl L Fe e WS i Ao h t eo , o a r d sco .l dl 事先约定的) 就解
/ t r e M m r函数将D L 使用Wr P c s e o i os e y L 的路径名复制到
0 引言
A I k是 项实川的WID WS 一 PH o o N O 系统编程技术,应
用领域十分广泛。A 1 k P H o 通过对应用程序内存映像A I o P调 用的重定向,改变应用程序流程,从而实现对 A I P 函数调用 的监视和控制。
2 . 2建众 系统范围的Wi o s n w 钩子 d
建立了一个共享数据段。
相关主题