HackShield 保护研究
这是第一次研究HackShield,根据前辈的回忆录。HackShield乃安博士旗下的产品,HackShield有普通版和Pro专业版,至于两者确切的区分,目前暂不清楚。天成游戏公司代理韩国跑跑卡丁车已经有几年时光了,游戏保护从最初的GameGard 就是穷凶极恶的NP,到后来使用HackShield,这类保护都来源于棒子的思路,把战斗地点从Ring3直接拖到了Ring0。
Hook API已经是老得不知道掉了几层牙的东西了,但是作为菜鸟,不懂的就是新的,我们也仍然抱着学习新东西的那种新鲜,前去学习,下面是一些学习心得。
HackShield非常烦,尤其是Anti-WinDbg方面,蓝屏的Dump无法分析,不知道是Windbg配置问题还是HS故意破坏PE头。
对Hook的扫描采用大概如下方法,用能用的ARK工具,如果都不能用,那自己打造吧。
扫描后的结果如下,在本机上。
804f9a12
8057a270
80581822
805b5292
805b539c
805bd505
805cc407
805d578a
总共八处Hook 重启Target,用WinDbg逐个分析之,结论大概如下。。。HS在运行的时候会监视KdDebuggerEnabled 这个值,如果为真则直接重启。WRK中该函数直接访问的是一个远程指针,该指针最终记录的是一个Bool变量,标志操作系统是否被内核调试器调试。
1.804f9a12 对这个地址附近的代码进行反汇编,得到如下结论。。。
nt!KiAttachProcess+0x19:
804f9a11 e85afbffff call nt!KiMoveApcState (804f9570)
//这是原版的OS代码,HackShield hook后变为 call Filter。。。
KiAttachProcess是一个非常底层的函数,很多地方都要频繁的调用他,这个函数的功能就是把当前进程上下文切换到目标进程。比如某驱动要读写另外一个进程的Ring3代码,这时候附加也就应运而生。又比如Read/Write其他进程内存的时候,也需要OS将当前进程切换到目标进程。 该函数的详细实现,请参考WRK。
记得某保护是在入口处做一个代理。关于此函数的定位,很多人已经讨论过了,通过搜索KeAttachProcess。 这里再来点废话,KiAttachProcess,最终被调用总共有4处,依次为:
KeAttachPrcoess 2处
KeStackAttachProcess
KeForceAttachProcess , 如果想更邪恶点,不解释。
2.
8057a270
nt!NtDeviceIoControlFile+0x25:
8057a26f e8be6f0000 call nt!IopXxxControlFile (80581232)
8057a274 5d pop ebp
8057a275 c22800 ret 28h
这个API名称真有意思, opXxxControlFile,佩服m$的外星生物, 不用想又是干这样猥琐的勾当。
3. 80581822 暂时有问题,WinDbg告诉我这是opXxxControlFile的函数尾部。
4.805b5292
nt!NtReadVirtualMemory+0x7:
805b5291 e8ea78f8ff call nt!_SEH_prolog (8053cb80)
不解释不掩饰,防止内存读的,这个API,基本都能找到代码直接给残废了。
5.805b539c
0: kd> u 805b539b
nt!NtWriteVirtualMemory+0x7:
805b539b e8e077f8ff call nt!_SEH_prolog (8053cb80)
同4一个道理,不解释。
**** Hidden Message ***** 学习了,谢谢 有道理,我急需要11 谢谢分享谢谢分享 我是来学习的 谢谢楼主 什么都要回复 回复浏览一下 顶了 谢谢楼主共享 毫无用处,都是过时的东西,过不了新版的 参考学习下,我顶!