ETW绕过半小时:一个让我又爱又恨的深夜折腾记录
说真的,我本来没打算写这个的,但你懂那种感觉吧?就是凌晨两点,你盯着屏幕,咖啡已经凉透了,然后突然发现——诶?居然真的跑通了?那一刻我就想,不行,这事儿我必须记下来,不然对不起我掉的头发。

事情是这样的,前几天接了个小活儿,需要研究一下 ETW绕过半小时 到底能不能搞定,对,你没看错,就是那个让无数人头疼的 Event Tracing for Windows,老板丢过来一句“半小时够了吧”,我嘴上说着“试试呗”,心里其实在骂街,半小时?你当是泡方便面呢?
但没办法啊,硬着头皮上吧,我先翻了翻资料,好家伙,各种补丁、各种回调、各种内核层面的弯弯绕绕,我当时就想,这玩意儿要是真能在半小时内绕过,我当场把键盘吃了,结果你猜怎么着?ETW绕过半小时 这个说法,居然还真有点道理——前提是你得知道往哪儿捅。
我先试了最笨的办法,直接 patch 用户态的那几个函数,嘿,你别说,还真能过掉一部分检测,但问题来了,这玩意儿就跟打地鼠似的,你堵住一个口子,另一个地方又冒出来了,我当时就烦躁了,对着屏幕嘟囔:“大哥,你咋这么多眼睛啊?” 后来换了个思路,从 provider 注册那块下手,哎,这下清爽多了,整个过程掐表一看——嚯,从开始到跑通第一个 demo,还真就卡在半小时左右,你说巧不巧?
当然啦,中间踩的坑我就不一一细说了,比如有一次我改错了一个偏移,直接蓝屏,重启回来发现刚才改的文件没保存,那一刻我真的想把显示器给掀了,还有一次,我以为自己绕过了,结果一跑检测工具,红彤彤一片,全是被抓的记录,我当时就笑出声了——苦笑,你懂吧?就是那种“我果然是个傻子”的笑。
不过话说回来,ETW绕过半小时 这事儿吧,真不是吹牛,关键是你得把思路捋顺了:先搞清楚哪些回调是必须处理的,哪些可以偷懒跳过,然后别贪心,别想着一次性全绕完,就跟吃鱼似的,你得先挑大刺,小刺慢慢来,我最后跑通的那个方案,其实就动了两个地方,简单粗暴,但有效,当然啦,具体细节我就不在这儿展开了,你懂的,有些东西写太明白反而不好。
写这篇文章呢,纯粹是因为今晚心情好,对,就是那种“折腾了半天终于能睡个安稳觉”的好,如果你也在搞类似的东西,听我一句劝:别死磕,先泡杯茶,把思路理清楚再动手。ETW绕过半小时 不是神话,但也别指望闭着眼睛瞎搞就能成,反正我是再也不想凌晨两点对着蓝屏发呆了——除非下次老板再加钱,嘿嘿。
行了,不啰嗦了,如果你觉得这篇啰里啰嗦的笔记还有点用,欢迎点个赞或者转发一下,要是你有更骚的操作,评论区见,咱互相伤害啊不对,互相学习!