3721驻留机制简单研究

    技术2022-05-11  163

    3721驻留机制简单研究Quaful@水木清华简单研究了一下3721的机制,写在这里,作为心得笔记吧。大部分收获都来自Softice + 反汇编,不一定适用于某些版本。1. CnsMin.dll的驻留方式3721的核心文件:CnsMin.dll通常存在于<Windows Directory>/Downloaded Program Files下。通过注册表Run键值加载:Rundll32 <dir>/CnsMin.dll, Rundll32CnsMin.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   另外还零散的藏了一些,用关键字查找。 ===================================================================================================

    一个更简单的办法在3721驻入机器之前防止3721的进入:在98系统下:在windows/hosts文件里加入127.0.0.1 cnsmin.3721.com127.0.0.1 download.3721.com在win2000下:winnt/system32/drivers/etc/hosts文件里同样加入如上代码就行了注意:127.0.0.1和DNS名字之间的空格必须用TAB键输入,它并不是用空格键输入的! 如果你的机器上没有 hosts 这个文件可自己手动建立就行.


    最新回复(0)