一种检查rootkit的方法(wineggdrop)

本文介绍了Windows下Rootkit的检测方法。Rootkit具有隐藏特性,难以查找。文中提出通过远程枚举系统服务,对比远程和本地枚举结果来检测Rootkit隐藏的服务,还给出了相关代码实现,同时提到可用sc.exe工具进行检测。

rootkit本来一直都是*nix系统中流行的一种后门,但现在win下也开始流行rootkit了,由于rootkit一般具有隐藏自己的特性,所以并不是象一般后门那样可以轻易的找出来.现在win下最流行的后门是国外的那个hxdef,代码也已经发放了.hxdef一个不足是主程序在隐藏自己的进程上做得不好,已经有多种方法可以将它本身的隐藏进程查出来,但将来的rootkit会在隐藏进程方面做得更好,或者会使用没有进程的方法另这种查隐藏进程去检测rootkit的方法失效.已知新版的hxdef(还没开始写),已要开始使用另类的隐藏进程方法,也已经有人开发出第三方的工具去隐藏其它程序的进程,而且这种方法可以令klister也无法查到其隐藏的进程.自然还有其它多种方法可以检测rootkit的,我也介绍一种可行的,但会有限制的检查方法.一般的rootkit都无法将隐远程session的,hxdef和国产的ntrootkit都一样,这样就我们只要使用远程枚举的方法,就应该能够检测到rootkit的存在.

                        原理是远程枚举系统的服务,hxdef和ntrootkit隐藏的服务都是无法对于远程的枚举服务进行隐藏的,那我们只要对比一下远程枚举出来的服务和本地枚举出来的服务,就能得到rootkit隐藏了的服务了.这种方法的限制在于需要远程系统允许远程的验证(ipc,rpc等).

                        以下代码是可以进行远程和本地的枚举WIN32类型的所有正在运行的服务,改变枚举的服务类型的话,可以枚举所有的服务(WIN32+Driver),通过比较远程和本地枚举结果,就应该能查出是否存在隐藏了的服务了.远程枚举需要远程系统允许ipc远程验证.

 

                        //********************************************************************************

                        // Version: V1.0
                        // Coder: WinEggDrop
                        // Date Release: NULL
                        // Purpose: To View Local Or Remote WIN32 Service(A Way
                        To Detect Some Rookits)
                        // Test PlatForm: Win 2K Pro And Server SP4
                        // Compiled On: VC++ 6.0
                        // Others:
                        //        A Way To Detect Rootkit By Comparing The
                        Results Of Listing Service
                        //        Locally And Remotely Since Most Rootkit
                        Doesn't Hide Service In Remote
                        //        Session.
                        //        The Code Only List WIN32 Service;Modifying The
                        ServiceType Can List All
                        //        Services(WIN32 + Driver)
                        // Limitation:
                        //        IPC Connection Is Enabled
                        //********************************************************************************

                        #include <stdio.h>
                        #include <windows.h>
                        #include <Winnetwk.h>
                        #include <Shlwapi.h>
                        #include <Winsvc.h>

                        #pragma comment(lib, "Advapi32.lib")
                        #pragma comment(lib, "Mpr.lib")

                        // Function ProtoType Declaration
                        //------------------------------------------------------------------------------------------------------

                        BOOL ListRemoteService(const char *RemoteIP,const char
                        *UserName,const char *Password);
                        BOOL ListSpecifiedTypeService(const char *RemoteIP,const
                        DWORD dwServiceType);
                        BOOL EstablishIPCConnection(const char *RemoteIP,const
                        char *UserName,const char *Password);
                        BOOL DisconnectIPC(const char *RemoteIP);
                        //------------------------------------------------------------------------------------------------------

                        // End Of Fucntion ProtoType Declaration

                        int main(int argc,char *argv[])
                        {
                        if (argc != 4 && argc != 2)        // Argument Number Is
                        Wrong, Display Usage And Exit
                        {
                             printf("Usage:   %s Local / RemoteIP UserName
                        Password/n",argv[0]);
                             printf("Example: %s
//12.12.12.12 test
                        test/n",argv[0]);
                             printf("Example: %s Local/n",argv[0]);
                             return -1;
                        }

                        if (argc == 4)
                        {
                             ListRemoteService(argv[1],argv[2],argv[3]);       
                        // Let's List The RemoteIP Service
                        }
                        else
                        {
                             if (strcmpi(argv[1],"Local") == 0)        // List
                        Local Service
                             {
                                 ListSpecifiedTypeService(NULL,SERVICE_WIN32);  
                             
                             }
                        }
                        return 0;
                        }// End Of Main();

                        //------------------------------------------------------------------------------------

                        // Purpose: To List Service Remotely
                        // Return Type: BOOLEAN
                        // Parameters:  
                        //           In: const char *RemoteIP   --> Remote IP To
                        Connect
                        //           In: const char *UserName   --> User Name
                        For IPC Connection
                        //           In: const char *Password   --> Password For
                        IPC Connection
                        //------------------------------------------------------------------------------------

                        BOOL ListRemoteService(const char *RemoteIP,const char
                        *UserName,const char *Password)
                        {
                        char     RemoteAddress[128] = {0};

                        if (strncmp(RemoteIP,"//",2) != 0)        // Check
                        Whether It's In
//IP Form
                        {
                             sprintf(RemoteAddress,"
//%s/ipc$",RemoteIP);       
                        // Add // If It's Not In
//IP Form
                        }
                        else
                        {
                             sprintf(RemoteAddress,"%s/ipc$",RemoteIP);
                        }

                        printf("Connecting IPC....../r");
                        if
                        (!EstablishIPCConnection(RemoteAddress,UserName,Password))
                               // Fail To Connect IP
                        {
                             printf("Fail To Establish IPC Connection/n");
                             return FALSE;
                        }
                        printf("Connecting IPC OK        /n");
                        DWORD dwServiceType = SERVICE_WIN32;
                        ListSpecifiedTypeService(RemoteIP,dwServiceType);       
                        // List Service RemoteLY
                        return DisconnectIPC(RemoteAddress);
                        }// End of ListRemoteService()

                        //------------------------------------------------------------------------------------

                        // Purpose: To List Service Based On The ServiceType
                        // Return Type: BOOLEAN
                        // Parameters:  
                        //           In: const char *RemoteIP       --> Remote
                        IP To Connect
                        //           In: const DWORD dwServiceType  --> The
                        Service Type
                        //------------------------------------------------------------------------------------

                        BOOL ListSpecifiedTypeService(const char *RemoteIP,const
                        DWORD dwServiceType)
                        {
                        char     RemoteAddress[128] = {0};
                        LPENUM_SERVICE_STATUS lpServices = NULL;
                        DWORD    nSize = 0;
                        DWORD    nServicesReturned;
                        DWORD    nResumeHandle = 0;
                        SC_HANDLE schSCManager = NULL;
                        BOOL     Flag = FALSE;
                        DWORD    i = 0;
                        UINT     j = 0;

                        if (RemoteIP != NULL)        // List Service Remotely
                        {
                             if (strncmp(RemoteIP,"
//",2) != 0)        // Check
                        Whether It's In
//IP Form
                             {
                                 sprintf (RemoteAddress, "
//%s",RemoteIP);      
                         // Add // If It's Not In
//IP Form
                             }
                             else
                             {
                                 sprintf (RemoteAddress, "%s",RemoteIP);
                             }
                        }

                        if (RemoteIP != NULL)
                        {
                             schSCManager = OpenSCManager(RemoteAddress, NULL,
                        SC_MANAGER_ALL_ACCESS);
                        }
                        else
                        {
                             schSCManager = OpenSCManager(NULL, NULL,
                        SC_MANAGER_ALL_ACCESS);
                        }

                        if (schSCManager == NULL)        // Fail To Open SCM
                        {
                             printf("Fail To Open SCM/n");
                             return FALSE;
                        }

                        lpServices = (LPENUM_SERVICE_STATUS) LocalAlloc(LPTR, 64
                        * 1024);        // Allocate Ram

                        if (lpServices == NULL)        // Fail To Allocate Ram
                        {
                             printf("Fail To Allocate Ram/n");
                             goto CleanUP;
                        }

                        // Enum All Service Based On Service Type
                        if (EnumServicesStatus(schSCManager,
                                                dwServiceType,
                                                SERVICE_ACTIVE,
                                               
                        (LPENUM_SERVICE_STATUS)lpServices,
                                                64 * 1024,
                                                &nSize,
                                                &nServicesReturned,
                                                &nResumeHandle) == NULL)

 


                        {
                             printf("Fail To Enum Service/n");
                             goto CleanUP;
                        }

                        // Display The Services
                        printf("%-34s%s/n/n","ServiceName","DisplayName");
                        for (i = 0; i < nServicesReturned; i++)
                        {
                             if (lpServices[i].ServiceStatus.dwCurrentState ==
                        SERVICE_RUNNING)
                             {
                                
                        printf("%d:%-32s%s/n",++j,lpServices[i].lpServiceName,
                        lpServices[i].lpDisplayName);
                             }
                        }
                        Flag = TRUE;

                        // Close Service Handle,Free Allocated Ram And Return To
                        The Caller
                        CleanUP:
                        CloseServiceHandle(schSCManager);
                        if (lpServices != NULL)
                        {
                             LocalFree(lpServices);
                        }
                        return Flag;
                        }// End Of ListSpecifiedTypeService()

                        //------------------------------------------------------------------------------------

                        // Purpose: To Establish IPC Connection
                        // Return Type: BOOLEAN
                        // Parameters:  
                        //           In: const char *RemoteIP   --> Remote IP To
                        Connect
                        //           In: const char *UserName   --> User Name
                        For IPC Connection
                        //           In: const char *Password   --> Password For
                        IPC Connection
                        // This Is Too Simple,I Won't Comment It
                        //------------------------------------------------------------------------------------

                        BOOL EstablishIPCConnection(const char *RemoteIP,const
                        char *UserName,const char *Password)
                        {
                        NETRESOURCE NET;

                        NET.lpLocalName = NULL;
                        NET.lpRemoteName = (char *)RemoteIP;
                        NET.dwType = RESOURCETYPE_ANY;
                        NET.lpProvider = NULL;
                        return (WNetAddConnection2(&NET, Password,UserName,
                        CONNECT_INTERACTIVE) == NO_ERROR);
                        }// End Of EstablishIPCConnection()

                        //------------------------------------------------------------------------------------

                        // Purpose: To Disconnect IPC Connection
                        // Return Type: BOOLEAN
                        // Parameters:  
                        //           In: const char *RemoteIP   --> Remote IP To
                        Connect
                        // This Is Too Simple,I Won't Comment It
                        //------------------------------------------------------------------------------------

                        BOOL DisconnectIPC(const char *RemoteIP)
                        {
                        return (WNetCancelConnection2(RemoteIP,NULL,TRUE) ==
                        NO_ERROR);
                        }// End Of DisconnectIPC()
                        // End Of File


                  其实不需要写程序也可以,有现成的程序可以做到的了,sc.exe可以查看到远程的服务,只不过sc.exe列出来一个服务的信息太多了,我们关心的只是正在运行的服务的服务名和显示名,而且给每个服务前加个编号,比较起来也比较容易.例如远程枚举时最后的服务编号是40,但本地枚举时最后的服务编号是35,那么你已经可以知道有5个服务是被隐藏的了.

                  


 

代码转载自:https://pan.quark.cn/s/8ce4326d996e 对于在 CentOS 7 系统中修改网卡配置文件后无法使设置生效的情况,经过实践验证,可以通过使用 nmcli 命令来进行调整。完成修改之后,需要重新启动虚拟机以使更改生效,这样操作流程即告完成。如果设置仍然无法生效,则表明虚拟机在启动过程中所获取的 IP 地址配置并非针对 eth0,此时可以对其它网卡的配置文件进行修改或将其移除。在 CentOS 7 系统中,网络配置的管理机制与早期版本存在差异,主要体现为采用了 Network Manager 服务来负责网络接口的管理。在某些情形下,尽管修改了 `/etc/sysconfig/network-scripts` 目录下的 `ifcfg-eth0` 文件,但网络配置却未能即时生效。此类问题的发生通常源于 CentOS 7 采用了不同于以往的配置读取方法。接下来将具体阐述如何借助 nmcli 命令来处理这一挑战。 以 root 用户身份登录系统并打开终端界面。nmcli 是 Network Manager 提供的命令行界面工具,它支持在命令行环境下执行网络连接的建立、编辑、查询及管理任务。针对修改 eth0 网卡配置的需求,可以遵循以下步骤进行操作: 1. 导航至 `/etc/sysconfig/network-scripts` 目录: ``` cd /etc/sysconfig/network-scripts ``` 2. 检查该目录内是否存在 `ifcfg-eth0.bak` 文件,该备份文件可能是先前调整配置时遗留下来的,若存在可能造成冲突。若发现该文件,可以选择将其删除: ``` [root@localhost netw...
代码转载自:https://pan.quark.cn/s/46fd08fb879c 网管教程 从入门到精通软件篇 ★一。★详尽的xp修复控制台指令及其应用!!! 放入xp(2000)的光盘,安装时选择R,执行修复! Windows XP(涵盖 Windows 2000)的控制台指令是在系统遭遇某些意外状况时的一种极具效用的诊断、检测以及恢复系统功能的工具。笔者确实一直期望能够将这方面的指令进行归纳,此次由老范辛苦整理了这份极具价值的秘籍。 Bootcfg bootcfg 命令用于启动配置与故障恢复(对大多数计算机而言,即 boot.ini 文件)。 带有特定参数的 bootcfg 命令仅在运用故障恢复控制台时方可使用。能够在命令行界面下运用带有不同参数的 bootcfg 命令。 用法: bootcfg /default 设定默认引导选项。 bootcfg /add 向引导清单中增添 Windows 安装。 bootcfg /rebuild 重复整个 Windows 安装流程并让用户选择需添加的项目。 注意:运用 bootcfg /rebuild 之前,应先借助 bootcfg /copy 命令备份 boot.ini 文件。 bootcfg /scan 探查用于 Windows 安装的全部磁盘并展示结果。 注意:这些结果被静态存储,并用于当前会话。若在当前会话期间磁盘配置发生变动,为获取更新的探查结果,必须先重启计算机,然后再次探查磁盘。 bootcfg /list 列示引导清单中已有的项目。 bootcfg /disableredirect 在启动引导程序中禁用重定向。 bootcfg /redirect [ PortBaudRrate] |[ useBio...
代码下载链接: https://pan.quark.cn/s/fc524f791b68 AA制程,即Active Alignment,被理解为主动对准,是一种用于确定零部件装配中相对位置的方法。在摄像头封装阶段,涉及图像传感器、镜座、马达、镜头、线路板等多个部件的重复组装,而传统的封装设备如CSP及COB等,均是依据设备设定的参数进行零部件的移动装配,因而零部件的叠加误差会逐渐增大,最终在摄像头上表现为拍照最清晰的位置可能偏离画面中心、四边清晰度不均等现象。伴随智能手机和其他高端电子产品的普及,摄像头模组的性能正日益受到重视。高分辨率、卓越的低光表现以及稳定视频输出是现代用户所期望的。在摄像头模组的制造环节,各部件的精准定位对成像质量具有决定性作用。因此,一种名为“AA制程”(Active Alignment)的前沿技术被开发出来,成为摄像头精密对准的核心技术。 AA制程,即Active Alignment,是一种在摄像头封装过程中应用的主动对准方法。该方法在多个组件装配阶段发挥作用,涵盖图像传感器、镜座、马达、镜头和线路板等部件。传统的封装方式,例如CSP(Chip Scale Package)和COB(Chip On Board),依赖于设备预设的参数进行组装,但随着组件数量的增加,误差也会累积,最终影响摄像头的表现。例如在成像质量上可能出现中心位置偏移、四角清晰度不一致等问题。 AA制程技术的核心在于实时监测与主动调整。在组装过程中,它借助先进的检测设备持续监控半成品的状态,并根据实时信息对组装部件进行精确修正,从而显著降低装配误差。通过这种技术,能够确保摄像头模组中各组件的相对位置准确无误,从而使得最终的成像效果更加稳定,特别是在中心区域和四角的清晰度上...
内容概要:本文介绍了一套基于Matlab实现的光子晶体90度弯曲波导的二维时域有限差分法(2D FDTD)仿真代码,旨在通过数值模拟手段深入研究光子晶体波导中的光传播特性。该资源聚焦于电磁场与光子学领域的仿真技术应用,系统实现了FDTD算法在复杂介质结构中的建模过程,涵盖空间网格剖分、时间步进迭代、完美匹配层(UPML)边界条件处理、总场散射场(TFSF)激励源设置、介电常数分布定义及电磁场演化可视化等核心模块,能够有效分析光在90度弯曲波导中的传输效率、模式分布与反射损耗等关键性能指标。; 适合人群:具备电磁场理论基础和Matlab编程能力的研究生、科研人员以及从事光子晶体器件设计与仿真的工程技术人员。; 使用场景及目标:①用于教学演示FDTD方法的基本原理与算法流程,帮助理解麦克斯韦方程的离散化求解过程;②支撑科研工作中对光子晶体弯曲波导结构的传输特性进行仿真分析与性能优化;③作为开发更复杂光子集成器件(如分束器、滤波器)数值仿真工具的基础框架; 阅读建议:建议使用者结合经典FDTD教材(如Taflove著作)深入理解算法理论,并在Matlab环境中逐模块调试代码,重点关注电场与磁场的交替更新过程、UPML吸收边界的设计实现以及TFSF源的引入方式,从而全面提升对时域电磁仿真机制的掌握与应用能力。
内容概要:本文围绕直驱式永磁同步电机(PMSM)的矢量控制仿真模型展开研究,基于Simulink平台构建了完整的电机控制系统仿真模型,涵盖电机本体建模、坐标变换(如Clark变换与Park变换)、磁场定向控制(FOC)、电流环与速度环的PI调节、空间矢量脉宽调制(SVPWM)等核心技术环节,旨在实现对电机转矩与转速的高精度、动态响应良好的控制。通过系统化仿真验证控制策略的有效性与鲁棒性,深入分析各模块间的信号流向与控制逻辑,为电机驱动系统的设计与优化提供理论依据和技术支撑,是理论联系工程实践的重要桥梁。; 适合人群:具备电机学、电力电子与自动控制基础知识,熟悉Simulink/MATLAB仿真环境,从事电气工程、自动化、新能源车辆、智能制造等方向的研究生、科研人员及工程技术人员。; 使用场景及目标:①深入理解永磁同步电机矢量控制的核心原理与系统架构;②掌握在Simulink中从零开始搭建复杂电机控制系统的方法与技巧;③应用于课程设计、毕业论文、科研项目中的控制算法验证、参数整定与性能优化;④为后续的硬件在环(HIL)测试或实物系统开发奠定仿真基础。; 阅读建议:建议结合经典电机控制理论教材同步学习,注重理论推导与仿真实现的对应关系,动手实践模型搭建、参数调试与波形分析,特别关注PI控制器参数整定对系统稳定性、动态响应速度和抗干扰能力的影响,通过反复仿真迭代加深对控制机理的理解。
代码下载地址: https://pan.quark.cn/s/a4b39357ea24 Subversion,即 SVN,是一种在软件开发行业中普遍应用的版本管理工具。它支持团队成员之间的协作,用于管理和监控项目文件的历史版本,并保证多人同时编辑时的数据一致性。本指南将深入讲解 SVN 的核心概念、主要目录的权限设置、用户身份验证方式以及基础操作步骤,是初学者入门的理想学习资料。 一、SVN概述 SVN的中心是版本库,它负责存储所有文件和目录,并构建成文件树的结构。版本库能够允许多个客户端进行连接,执行数据的读取或写入。用户可以通过写操作将自己的修改同步至版本库,而其他用户则可以通过读操作来查看这些变更。这种集中式的版本管理机制使团队协作更加高效和有序。 二、SVN的访问权限配置 在 SVN 系统中,不同的用户或用户团队会被分配不同的访问权限。以质量管理部门的 SVN 实例为例: - 主管朱猛、张凯峰、吕鑫、张颂、马凌具备读写权限。 - 员工陈玲及其他成员仅拥有读权限。 - 项毓毅享有读写权限,主管团队则只有读权限。 - 张凯峰同样拥有读写权限,而其他同事仅能进行读取操作。 三、登录凭证 用户在访问 SVN 时,需要使用基于姓名拼音的用户名和符合特定规则的密码。例如,用户张三的登录名设定为"zhangs",密码为"zhangs#123",这样的设置旨在简化记忆和管理工作。 四、基础操作指南 1. 安装 SVN 客户端:本教程推荐采用 TortoiseSVN 进行安装,可以从指定的 FTP 地址获取安装包。 2. 读取操作: - 项毓毅和管理团队可以直接检出到"质量管理部"目录。 - 其他员工需要分别检出到"部门财富库"和"产品线管理"子目录,因为他们无法访问"部...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值