逍遥公子 发表于 2013-4-28 08:28:36

检测RING3的IAT HOOK/EAT HOOK

这两天在写一个小软件,名字叫PhoenixUnhooker,由于精力有限,现在只完成了RING3的IAT HOOK/EAT HOOK的检测,于是写下本文,一个是简单介绍一下,其次也算做个学习笔记。

    如果有任何问题,还望留言告知,本程序仅在XP SP3下测试通过。

MAIN:

    IAT、EAT就是PE里的两个函数表,对其进行修改可以实现API HOOK。要是做检测的话,就要找到当前函数地址(内存里),以及原始函数地址(文件里),从理论上讲没什么难度(实际上也没啥难度,不过其中有几个奇葩的问题)。

QUESTION1:IAT的原始地址

    一开始我还以为原始地址也保存在模块文件里,于是直接读取文件解析,可是到最后,发现取到的“真实地址”乱七八糟的,冥思苦想了半天,也不得其解。后来睡觉时突然想到,IAT里的函数地址是在导入模块加载时从导出模块的EAT里取得的,所以说,IAT的原始地址并不在导入模块的二进制文件里。知道了这一点就简单了,分别分析每个导出模块,取得导入函数的原始地址即可。

QUESTION2:EAT的各种地址(当前地址和原始地址)

    程序基本上成型了,可是很郁闷,我发现IAT里有很多钩子,祖国山河一片红,心道不好,肯定是哪里错了。可是找了半天也没发现哪里写错了,最后向Busy神牛请教,热心的Busy神牛帮我调试了半天,最后发现,EAT的函数序号表是按照1-n的顺序排列的,而第1-n个函数的序号未必就是1-n,恰恰不巧的是,EAT的函数地址表是按照函数序号排列的。也就是说,当我们从1-n迭代遍历IAT时,每个函数要先按照迭代变量i定位取得它的函数序号,再通过函数序号定位取得函数地址!悲剧……

QUESTION3:奇怪的HOOK:函数代理

    经过上述两个问题,修改之后,程序基本上就没问题了,IAT/EAT的各种地址都正确。不过,每个模块的IAT里还是有几个钩子,可是用XueTr一查,却没有找到这几个。难道我又错了?仔细观察,我发现这几个被HOOK的函数固定就是那么几个(HeadAlloc、HeapFree、GetLastError、SetLastError,等等)。

    于是我拿GetLastError下手,先定位到当前函数地址处,发现来到了RtlGetLastWin32Error处,如下图:

    很是费解,很显然这不是什么恶意的HOOK,绝大可能是WIN自己”HOOK“的,可是为什么呢?于是我又来到原始地址处,发现是一堆奇怪的Code,像是加了壳一样。再次请教Busy神牛,经过研究,我们发现,原来真正的GetLastError处并不是Code,而是Data!如图:

    尝试GetProcAddress(x, "GetLastError"),发现得到的是”当前地址“(即RtlGetLastWin32Error)而非”原始地址“。着实郁闷,MS为什么要这么做呢?望知道的神牛指点一下。我就姑且称这种函数为”代理函数“好了。而今天的作业还没写完,时间不多,还要写本文,所以没有写特殊处理这类代理函数的代码,检测时仍然会显示挂钩,以后修改一下就是了。

**** Hidden Message *****

liqiao351 发表于 2013-7-17 17:37:30

我来支持了

fgzhanhao 发表于 2013-8-28 06:03:29

我来支持了

dgann 发表于 2014-4-1 19:19:38

支持一下,鼓励分享

晓豪 发表于 2014-6-12 10:27:54

支持一下啊呵呵

qixiubanya 发表于 2014-8-11 11:51:43

鼓励分享鼓励分享

longge87 发表于 2018-10-6 21:55:01

支持楼主一波

shufu 发表于 2018-11-1 01:57:28

以后修改一下就是了。

我们都一样儿 发表于 2019-1-1 16:07:59

https://s2.ax1x.com/2019/01/01/F4bN8K.jpg
中国收藏家协会理事何柏青先生
    朱亚东先生第三次个人书法展今天在此举办,他嘱咐我写一段文字,我很荣幸,也很乐意。朱亚东先生1957年2月22日生于上海,朱熹嫡裔,号“无羁”,现任上海市静安区书法家协会副主席、中国收藏家协会会员、上海市书法家协会会员等。蒙学于父,后转益多师,得到谢稚柳、宋日昌等前辈悉心教导。自幼笔墨研习使书艺日臻完善,真、草、隶、篆、行,五体皆擅,尤以草书苍劲而自然,丰俊而遒美。得知朱亚东要举办个人书法展,97岁高龄的国画大师陈佩秋先生特意为展览题字,也为亚东书法个展,留下一段艺坛佳话。
    亚东的这次书法个展,从书体上看,真草隶篆行俱全;从形式上看,各种形制皆备,可以看到亚东先生较为全面的书法造诣。一个书家,倘若专擅一种或两种书体,已属难得;如能兼擅各体,则极为不易。仔细品味亚东的书法,能感受到深厚的书法功力;这种功力,基于天赋、源自勤奋。亚东深谙书法之道,跬步而积、渐成于不缀,砥砺精进、而至于知行合一、形意相契。亚东先生深知,书法艺术,惟有深入传统、又不囿传统,融于个性、而化于时代,才具生命力,方能走得更为深远。
    亚东最为擅长、也最能展现其性情的,我以为是草书。书法诸体,草书最难,盖因其变化万端,难以驾驭。亚东的草书雍容平和、敦厚典雅,虚实、轻重、刚柔、疏密、顿挫、谐协有致,流自于内心,为其生命最核心的节奏,又与天地相呼应,融技法于无形,脱俗谛于羁绊,彰显书法精神本质之所在。正因如此,亚东兄的草书卓然超群,独步海上书坛,于平淡之中蕴道之真意。
    欣赏亚东的书法,除了气韵、意境的感受,还可以通过品读他的书法线条。线条是书法的生命,也是构成书法的第一要素,书法通过线条表现境界与情感,即便是结体、章法,无外乎是线条的不同形式之组合。线条的风格,多少也能决定书法作品的风格。亚东的书法线条,属于静逸形的,内敛含蓄,不事张扬,有一种古雅之美;尤其是他的草书,蕴有不动声色的禅意。
    亚东书法的收藏,已经拥有一大批拥趸。其实朱亚东出道很早,1988年就在上海美术馆举办个人书法展,这在当时很稀有;不象现在,写了几年字就想办个人书法展。朱亚东也是两区合并后新的静安区书法家协会的副主席,德艺双馨,艺品与人品是圈内公认的,所以他的粉丝很多,很多粉丝也是我的朋友,我知道他们很喜欢也很欣赏亚东的书法。这既是收藏者对亚东书法的欣赏与肯定,也给了亚东极大的自信。书画艺术的创作探索与鉴赏收藏是相辅相成的。纵观海派书画史,其实也是一部字画收藏史,书画家与收藏家共同参与的书画史,才是一个完善的历程。
    最后衷心祝愿亚东兄展览成功,也祝愿亚东对书法之道有新的感悟,不断创作出新的艺术作品留存于世。
                                    中国收藏家协会理事
                                           何柏青
                                       2018.12.16
http://s12.sinaimg.cn/bmiddle/0045p3Alzy7pSwsTaTFab&690
朱亚东作品赏析
https://s2.ax1x.com/2019/01/01/F4bavD.png
朱亚东作品赏析
https://s2.ax1x.com/2019/01/01/F4btC6.jpg
朱亚东作品赏析
https://s2.ax1x.com/2019/01/01/F4bwKe.png
朱亚东作品赏析
https://s2.ax1x.com/2019/01/01/F4bUgO.jpg
朱亚东作品赏析
页: [1]
查看完整版本: 检测RING3的IAT HOOK/EAT HOOK