3721驻留机制简单研究

 
3721驻留机制简单研究   [ 日期: 2006-04-30 02:33 | 作者: d99 | 来自: 转载 | 晴天 | 心情指数: +2 ] 
3721驻留机制简单研究
www.hacker.com.cn 黑客防线


简单研究了一下3721的机制,写在这里,作为心得笔记吧。大部分收获都来自 
Softice + 反汇编,不一定适用于某些版本。 

1. CnsMin.dll的驻留方式 

3721的核心文件:CnsMin.dll 
通常存在于<Windows Directory>/Downloaded Program Files下。 

通过注册表Run键值加载:Rundll32 <dir>/CnsMin.dll, Rundll32 

CnsMin.dll提供了一个函数Rundll32供Rundll32.exe调用 
但这个函数只是调用一个真正的驻留函数Rundll32Main()。 

Rundll32Main()伪代码: 

void Rundll32Main() 

hMutex = createMutex("CNSMINMUTEX"); 
if(ERROR_ALREADY_EXISTS) 

CloseHandle(hMutex); 
exit; 

if(IsWindowsNT()) { 
SetProcessSecurityInfo(); 

else { 
RegisterProcessAsService(); 

CheckVersion(); 

// CnsMinKP.sys/vxd 内核驱动程序,保护3721关键文件和注册表项不被删除 
ContactWithCnsMinKPDriver(); 

// 关键的hook,负责将CnsMin.dll注入其他进程空间 
InstallCBTHook(); 

// 关键的hook,负责将CnsMin.dll注入其他进程空间 
InstallCallWndProcHook(); 

// CnsMinIO.dll 负责IE地址栏下方的提示 
InitCnsMinIO(); 

// 一些注册表信息 
InitRegistry(); 

// 保护CnsMin.dll的钩子不被卸载或抢先 
InstallGuardTimer(); 

createMsgWindow(); 

// Message loop 
while (true) 

GetMessage(&msg); 
TranslateMessage(&msg); 
DispatchMessage(&msg); 



CnsMin主要是通过WH_CBT和WH_CALLWNDPROC两个全局钩子注入IE进程空间的。注入 
IE后,又安装了WH_KEYBOARD,WH_DEBUG等钩子。其中对3721实现其"实名转换" 
有用的是WH_KEYBOARD。这是一个本地钩子。 

CnsMin为了保证自己的优先级最高,用了一个定时器函数反复安装钩子,无疑会造成 
系统性能的下降。 

我曾经尝试过自己安装一个WH_DEBUG钩子阻止3721钩子的调用,确实起到了效果, 
立即可以使3721失效。但这种方法3721仍然驻留IE进程内,属于指标不治本的方法。 

强制结束Rundll32进程,可以暂时卸载3721的驻留代码。但CnsMin.dll通过COM注册已经 
嵌入IE组件中,重新启动IE后,该进程又会重新启动。 

2. 3721的防删除手段 
文件系统驱动:CnsMinKP*.sys 针对NT/2000/XP有不同版本(98下面是CnsMinKP.vxd) 
通常存在于<System directory>/drivers/目录。 

驱动程序,由Windows启动时加载。 

该驱动程序过滤了对文件和注册表的删除操作。试图删除3721的关键文件和注册表项时, 
直接返回一个TRUE,使Windows认为删除已经成功,但文件和注册表实际上还是在那里。 
该驱动程序还有一个黑名单(保存在某个外部文件中),阻止Windows读取其他3721的 
竞争对手的插件文件。 

目前还没有找到停止该驱动的方法。 

删除方法:在Windows启动前(例如,98下面退出到DOS)删除CnsMinKP*.sys文件。 
注意:3721具有自恢复能力。某些关键文件被删除后,其它模块会试图从3721网站重新 
下载。所以彻底删除前需要断开网络连接。 

3. 针对目前版本的删除步骤: 
a) 运行3721自己提供的删除程序。可以删掉大部分的文件。 
b) 从DOS启动,删除残存文件,如CnsMin.dll,CnsMinKP*.*等 
可能的目录:Downloaded Program Files目录,Program Files/3721目录,drivers目录 
c) 启动Windows,进入桌面时Windows会报告一些模块找不到的错误,不用理会,删除 
注册表中3721的值。 
可能的位置:HKEY_CURRENT_USER: Software/3721 
HKEY_LOCAL_MACHINE: Windows/CurrentVersion/Run 
SYSTEM/CurrentControlSet 
另外还零散的藏了一些,用关键字查找。 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值