免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3937 | 回复: 6
打印 上一主题 下一主题

[转载]3721驻留机制简单研究 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-05-28 15:03 |只看该作者 |倒序浏览
Quaful@水木清华

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

1. CnsMin.dll的驻留方式

3721的核心文件:CnsMin.dll
通常存在于\Downloaded Program Files下。

通过注册表Run键值加载:Rundll32
\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)
  通常存在于\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
2 [报告]
发表于 2004-05-28 15:07 |只看该作者

[转载]3721驻留机制简单研究

我的解决方法。
1 只要你的windows\system32\drivers下有cnsminkp.sys ,肯定中招了。
2 用安装盘启动到DOS,删除所有的cnsminpk.sys cnsmin.dll文件
3 重启运行spybot软件,清除3721,并且加上免疫保护,http://bbs.5ilinux.com/index.php?showtopic=79(就是周明波写的那个3721, CNNIC, POPO, 百度, 中文邮免疫程序 v2.0)

论坛徽章:
0
3 [报告]
发表于 2004-05-28 15:09 |只看该作者

[转载]3721驻留机制简单研究

http://bbs.5ilinux.com/index.php?showtopic=79

就是周明波写的那个3721, CNNIC, POPO, 百度, 中文邮免疫程序 v2.0
是2.0版

论坛徽章:
0
4 [报告]
发表于 2005-07-20 01:21 |只看该作者

[转载]3721驻留机制简单研究

好像很复杂的样子,不过我还是想说的是3721还是功能最好的网上助手软件。至于别的...我不讨论

论坛徽章:
0
5 [报告]
发表于 2005-07-20 16:12 |只看该作者

[转载]3721驻留机制简单研究

[quote]原帖由 "zzaa1111"]好像很复杂的样子,不过我还是想说的是3721还是功能最好的网上助手软件。至于别的...我不讨论[/quote 发表:
             你已经下了结论,还想讨论什么啊?

论坛徽章:
0
6 [报告]
发表于 2005-07-20 19:30 |只看该作者

[转载]3721驻留机制简单研究

我使用了一下
还是瑞星卡卡比较实在

虽然瑞星的杀毒软件做的不怎么样但拦截插件倒是可以!

论坛徽章:
0
7 [报告]
发表于 2005-07-23 04:03 |只看该作者

[转载]3721驻留机制简单研究

不是吧!瑞星还是不行的真的不如3721。不过瑞星只能说现在没有嵌入太多的软件,所以感觉还挺好。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP