考虑第一种方案的时候还没有不重启加10分的规定,先从苯办法开始
基本思路是:
- 先开调试权限
- 然后利用木马为了自我更新保留的后门,先恢复SDT并屏蔽掉木马的文件保护
- 接下来尝试查找并挂起SYSTEM进程内的木马驱动线程
- 将木马文件移动到临时目录下,并调用MoveFileEx在重启后删除
- 删除木马驱动服务
- 设置重启后自动运行修复工具一次
- 重新启动计算机
- 重启后删除剩余的两个木马自启动注册表键值
相对比较有意思的函数包括:
接下来继续尝试用户模式下其他方案
- 还是先开调试权限
- 检测木马驱动并恢复SDT,屏蔽木马文件及进程保护
- 终止System.exe进程并释放木马的鼠标钩子
- 扫描内存(这里包括挂起木马驱动线程,关闭SYSTEM进程内的HBKernel32.sys文件句柄,及利用远程线程将其他进程中被加载的HBQQXX.dll卸载)
- 删除木马注册表键值
- 删除木马文件
有意思点的函数包括:
再来尝试内核模式下的其他玩法,因为硬盘空间不多了也懒得装完整的ddk,所以还是用masm+kmdkit偷个懒
第一种考虑是patch木马无限循环的控制字节HBKernel32.sys基地址+3F20h, 只需将该字节修改为非零,就可以让木马自己退出无限循环保护并释放所有截获的api然后退出木马线程
第二种考虑是保留木马线程,但我们把所有的保护都跳过, 将所有被截取的api第一句指令都修改成短跳转EB ??,并跳转到该函数的最后一条指令以直接跳回原始函数
因为时间的原因就没有尝试更多的方式了,总的来说这个木马本身并没有很特别的地方,但似乎这个驱动HBKernel32.sys被广泛应用于多种在线游戏盗号木马中
对于此类木马最简单的预防就是监视SSDT以及重要API的非法劫持
其次类似空函数的全局钩子也很值得关注
另外解决方案还可以有其他的,例如在驱动中直接调用木马驱动中的代码ImageBase+3566h修复SDT,在驱动中调用ZwTerminateThread终止木马驱动线程等等
最后贴一下功能分析:
因为木马程序频繁使用了同一种简单的字符串保护方式,因此先写一个IDA script小函数用于解密字符串
木马安装主程序流程非常简单
木马监视主程序System.exe的功能和执行流程和上述安装程序有一些类似,额外部分包括如下几点:
木马盗号动态库模块HBQQXX.dll主要功能是从进程QQLogin.exe和tty3d.exe中盗取密码
如果成功盗取密码将保存入系统目录下的Xunxian.dat文件中
木马驱动程序通过截取api达到如下功能:
- 保护指定进程
- 保护木马相关的文件
- 保护"AppInit_DLLs"注册表键值
- 无限循环重新设置木马驱动服务注册表键,以及另两个木马自启动注册表键值