c语言rootkit,求最大公约数C语言

本文目录一览:

rootkit.win32.apent.awk是什么木马

此病毒是一个Rootkit病毒,由C语言编写的驱动程序,提供破坏杀毒软件的功能。

1、禁止反病毒软件的运行:

病毒调用PsSetLoadImageNotifyRoutine函数注册镜像加载的通知例程,在通知例程中,病毒首先比较加载的镜像的名称是否包含下名称:

vsdatant.sys,watchdog.sys,zclient.exe,bcfilter.sys,bcftdi.sys,bc_hassh_f.sys,

bc_ip_f.sys,bc_ngn.sys,bc_pat_f.sys,bc_prt_f.sys,bc_tdi_f.sys,filtnt.sys,

sandbox.sys,mpfirewall.sys,msssrv.exe,mcshield.exe,fsbl.exe,avz.exe,

avp.exe,avpm.exe,kav.exe,kavss.exe,kavsvc.exe,klswd.exe,ccapp.exe,

ccevtmgr.exe,ccpxysvc.exe,iao.exe,issvc.exe,rtvscan.exe,savscan.exe,bdss.exe,

bdmcon.exe,livesrv.exe,cclaw.exe,fsav32.exe,fsm32.exe,gcasserv.exe,icmon.exe,

inetupd.exe,nod32krn.exe,nod32ra.exe,pavfnsvr.exe,Windows-KB890830-V1.32.exe

对于包含上名称的镜像,病毒检查其是否是有效的PE文件,如是则调用ZwOpenProcess、ZwTerminateProcess函数禁止其运行,以此来禁止反病毒软件、防火墙等安全软件的运行。

2、挂接API:

病毒通过修改cr0寄存器标志位的方法关闭写保护,然后替换KeServiceDescriptorTable中的函数地址来Hook API,并记下原函数的地址。病毒挂接了如下两个API:

ZwQueryDirectoryFile

ZwEnumerateValueKey

3、ZwQueryDirectoryFile钩子过程:

在这个钩子过程中,病毒调用记录的原函数地址调用ZwQueryDirectoryFile函数,然后比较得到的目录、文件名中是否包含”kernelw”字符串,如果包含将返回STATUS_NO_MORE_FILES,反之,将正常的结果返回。

病毒通过挂钩ZwQueryDirectoryFile来隐藏包含有”kernelw”名称的目录或文件,以此来保护自己。

4、ZwEnumerateValueKey钩子例程:

在这个钩子过程中,病毒调用记录的原函数地址调用ZwEnumerateValueKey函数,然后比较得到的节果中的键值是否包含”kernelw”字符串,如果包含则返回错误,反之,将正常的结果返回。

病毒通过挂钩ZwEnumerateValueKey来隐藏键值包含有”kernelw”名称键值,以此来保护自己。

5、钩子保护线程:

病毒通过调用PsCreateSystemThread启动一个新的线程,在这个线程中不断循环检测KeServiceDescriptorTable表中自己挂钩的ZwQueryDirectoryFile、ZwEnumerateValueKey的地址是否被改变,如被改变则再次挂接这两个函数。

6、锁定ntoskrnl.exe文件

病毒通过调用ZwCreateFile、NtLockFile方式锁定ntoskrnl.exe文件,以此来防止其它程序通过读取ntoskrnl.exe中的数据恢复KeServiceDescriptorTable,以此来保护自己的API钩子。

安全建议:

1 安装正版杀毒软件、个人防火墙和卡卡上网安全助手,并及时升级,瑞星杀毒软件每天至少升级三次。

2 使用“瑞星系统安全漏洞扫描”,打好补丁,弥补系统漏洞。

3 不浏览不良网站,不随意下载安装可疑插件。

4 不接收QQ、MSN、Emial等传来的可疑文件。

5 上网时打开杀毒软件实时监控功能。

6 把网银、网游、QQ等重要软件加入到“瑞星帐号保险柜”中,可以有效保护密码安全。

清除办法:

1 Rootkit.Win32.KeyLogger.a(键盘记录器)病毒专杀工具连接:

2瑞星杀毒软件清除办法:

安装瑞星杀毒软件,升级到19.40.20版以上,对电脑进行全盘扫描,按照软件提示进行操作,即可彻底查杀。

补充

别忘了关闭系统还原因为他会利用其再生

还有务必去安全模式下杀

Trojan/Rootkit.o 是什么病毒,有什么危害?

键盘记录器Rootkit”

此病毒是一个Rootkit病毒,由C语言编写的过滤驱动程序,提供键盘按键记录功能。

该Rootkit病毒近期多次被Trojan.PSW.Win32.GameOnline型的病毒释放使用,在该病毒体内可以看到“C:\new-gamehack\GameHack\Driver\bin\i386\mssock.pdb”的字样,从编译路径可以看出该Rootkit显然是作者特意为盗取游戏密码病毒所写。

1、该病毒驱动程序入口函数执行如下操作:

(1) 检查系统是否存在USB键盘设备:病毒首先通过调用ObReferenceObjectByName函数得到\Driver\hidusb的驱动对象,然后遍历该驱动对象创建的功能设备的设备链。对设备链上的每个设备对象,遍历其所在的设备栈,对设备栈上的每个设备对象,通过 DEVICE_OBJECT-DriverObject-DriverName获取每个设备的驱动名称,比较是否是Driver\kbdhid,如果找到表示有USB键盘设备,得到USB键盘设备对象的指针。

(2)对键盘设备挂接过滤驱动:建立名称为“\Device\mssock”、符号链接名为“\??\mssock”、类型为“FILE_DEVICE_UNKNOWN”的设备,然后通过调用函数IoAttachDeviceToDeviceStack将该设备挂接到键盘设备所在的设备栈。

对于USB键盘设备,挂接的目标设备为通过前面搜索得到的USB设备对象。对于没有USB键盘设备的情况,通过调用IoGetDeviceObjectPointer获取名称为“\Device\KeyboardClass0”的PS/2 键盘设备作为目标设备。

(3)填写功能函数地址:填充卸载例程及各个IRP处理例程回调。

2、病毒的IRP_MJ_READ处理例程:设置完成例程后直接调用IofCallDriver向下一设备传递IRP

3、病毒驱动设立的对键盘读的irp包的完成例程:在该完成例程中,病毒驱动实现了获取并记录键盘按键的功能。病毒将读到的按键记录到缓冲区(通过DEVICE_OBJECT.DeviceExtension传递地址)。同时病毒作者在这里和IRP_MJ_DEVICE_CONTROL例程中通过写0x60端口发送命令控制键盘NumLock灯的开闭,可能是作者为了调试时能够方便的知道其过滤驱动的工作情况。

4、病毒驱动的IRP_MJ_DEVICE_CONTROL处理例程:在这个处理例程中,病毒对值为“0x 80102180”和“80102184”的IOCTL进行了处理。对于IOCTL = 0x 80102180 , 进行初始化处理,如清空记录缓冲区、计数器等。对于IOCTL = 0x 80102180 ,病毒将把在缓冲区中记录的按键扫描码返回给调用者。使用这个rootkit的程序可以调用DeviceIoContro函数进行控制和读取按键记录。

5、卸载例程:

调用IoDetachDevice摘除过滤设备

调用IoDeleteSymbolicLink删除符号链接

检查是否有IRP未完成且IRP有效则调用IoCancelIrp尝试取消这个IRP,如果取消IRP失败则等待直到有下一次IRP然后取消。

调用IoDeleteDevice删除设备。

由于该驱动在卸载例程中安全地删除了过滤设备并尝试取消未完成的IRP,所以该Rootkit可以被安全地卸载。不过一般的病毒作者很少会给用户留下安全的卸载例程,所以怀疑该Rootkit是作者从网上抄来的代码,作者有可能甚至不了解该驱动真正的工作原理。

“幻影后门”

这是一个具有感染功能、提供多种连接方式、可配置的后门病毒。

病毒作者在病毒体(客户端控制程序)内留下了明确的签名:

作者:dream2fly 作者网址: 作者邮箱:hyrootkit@126.com

作者的网址(论坛)中提供了多个自己编写的软件,包括本后门病毒。

作者的论坛中称本病毒为UAM (Universal Access Manager),中文名称“幻影远程控制”,提供收费注册使用。

病毒分为5个部分:服务端安装程序(ctfime.exe)、服务端核心程序(SysIdt00.dll)、服务端启动程序(被感染的explorer.exe)、客户端控制程序(UAManager.exe)、隐藏端口的Rootkit (uamanger.sys)。

服务端安装程序由C/C++语言编写,UPX加壳保护。其它部分由C/C++或汇编语言编写。

1、 服务端安装程序

服务端安装程序执行如下操作:

(1) 服务端安装程序运行后从程序资源中释放如下文件:

“%windir%\system32\SysIdt00.dll”、”%windir%\system32\DRIVERS\uamanger.sys”

(2) 然后将自己复制为”%windir%\system32\ctfime.exe”并启动,同时删除原文件。

(3) 将SysIdt00.dll、ctfime.exe、uamanger.sys的文件时间修改为同系统的cmd.exe相同,并将属性设置为“系统+隐藏”。

(4) 修改系统的文件保护,然后感染系统的explorer.exe。

(5) 以隐藏窗口方式启动被感染的explorer.exe。

2、 服务端启动程序(被感染的explorer.exe)

服务端安装程序在感染explorer.exe时,在其最后增加一个大小为0x1000的节写入病毒代码,并将入口点改为指向新的节的开始。被感染的病毒代码执行时通过调用LoadLibraryA装载SysIdt00.dll,然后返回原入口点。病毒感染explorer.exe的目的是为了在系统启动时都能运行SysIdt00.dll,达到自启动的目的。

3、服务端核心程序(SysIdt00.dll)

SysIdt00.dll中是远端监控的核心代码。

SysIdt00.dll通过被感染的explorer.exe被装载后执行如下功能:

(1) 通过调用SeDebugPrivilege等函数提升权限。

(2) 遍历进程对找到的第一个”svchost”进程,将自己将注入其内存,然后通过CreateRemoteThread启动其导出函数”Entry”。

SysIdt00.dll被注入svchost进程后执行如下功能:

(1) 通过尝试打开名为”UAM_4803″的互斥量来检查驱动是否加载,如加载则不做其它操作。

(2) 如果驱动没有加载,根据设置(可在生成服务端时设置是否加载驱动)加载驱动”%windir%\system32\DRIVERS\uamanger.sys”。

(3) 启动工作线程,实现远程监控功能。

(4) 在实现连接时,通过写文件”\\.\UAM”将连接的端口传给驱动,实现隐藏端口。

(5) 根据设置的连接方式和密码连接客户端(控制端)

生成服务端时可以设置三种连接方式:

直接连接方式(设置监听,由控制端来连接服务端)

反弹连接方式1 (设置ip地址和端口,服务端去连接控制端)

反弹连接方式2 (设置网页地址,服务端从这个地址下载ip.txt,按照其内容去连接控制端)

(6) 远程控制可以接受如下命令执行操作:

远程shell (cmd.exe命令操作)

进程管理

文件管理

远程桌面

视频监控

日志管理(查看、删除系统日志)

从任意网址下载、执行文件

远程更新、卸载服务端

4、客户端控制程序(UAManager.exe)

客户端控制程序提供远程连接控制功能,并且可以生成服务端程序。

在生成服务端程序时,可以进行如下设置:

连接方式和地址、连接密码、是否加载驱动、服务端运行时间。

5、隐藏端口的Rootkit (uamanger.sys)

病毒名称为Rootkit.Win32.PortHide.a,该驱动加载后首先创建一个名为\Device\hypy的设备和一个名为\??\hypy的符号链接用来和3环程序交互。这个设备名与3环程序所使用的符号链接(\\.\UAM)不同,所以显然我们所截获的样本是无法正常工作的。

之后该驱动注册IRP处理回调,在IRP_MJ_WRITE处理例程中,该驱动接受3环传入的需要隐藏的端口号,并保存在一个全局变量中。不过该Rootkit作者显然对驱动编写很不熟悉,所有的IRP处理例程均没有通过IofCompleteRequest完成,而是直接返回到I/O管理器。所以该驱动是无法正常地完成所希望实现的功能的。

该驱动通过替换KeServiceDescriptorTable中的函数地址来挂钩ZwDeviceIoControlFile,该Rootkit通过挂钩该API来隐藏指定端口。

“代理Rootkit变种XD”

此程序为rootkit类型程序

1.在驱动初始化时,对设备名和设备符号链接字符串进行解码,并创建设备和相应的符号链接来与用户态程序通信;

2.去除CR0寄存器中的WP位,以防止写只读页出现页异常,然后将内存中的加密字符串解码并写回,此解密字符串将用来与IOCTL传递的参数比较,从而判断是否响应该用户程序的IOCTRL;

3.获取进程的EPROCESS地址,在此结构体中搜索”system”字符串偏移,然后根据此偏移计算进程名在EPROCESS中的偏移,以备比较进程时使用;

4.注册IRP处理例程

支持:创建文件、设置注册表键值、关闭线程和卸载驱动

5.创建系统线程,每隔指定的时间后,尝试写入驱动程序对应的注册表项

6.注册进程创建通知例程,每当创建新进程时,该驱动做如下操作:

1)获取创建进程的EPROCESS,根据计算的偏移获取当前进程名称

2)判断当前创建进程是否为userinit.exe或者是explorer.exe,

如果是则创建系统线程,写入注册表项

\registry\machine\software\microsoft\windows\currentversion\runonce

键值:

%systemroot%\system32\Rundll32.exe %systemroot%\system32\%s.dll,DllUnregisterServer

3)映射ntoskrnl.exe到内存中,获取ntoskrnl.exe的服务表中指定服务函数的地址并保存,利用获取的服务函数地址枚举注册表,试图绕过其他软件的拦截;

4)记录 Winlogon.exe 的启动,但没有做其它操作,可能在以后的版本中会进行相关处理

“哈希信息窃取器”

这是一个C/C++编写的黑客工具。

该工具主要用来获取当前主机用户的LM/NTLM散列,使用者可以通过该散列对主机用户密码进行暴力破解.

支持用法:pwdump2 pid of lsass.exe

主程序行为:

1.若没有指定lsass.exe/pid参数,则执行如下操作:

[1].加载ntdll.dll,获取导出函数

NtQuerySystemInformation

RtlCompareUnicodeString

[2].调用NtQuerySystemInformation,InformationClass=5,获取进程信息列表

[3].遍历列表查找LSASS.EXE,获取该进程ID

2.打开自身进程,添加SeDebugPrivilege权限,以允许当前进程对LSASS.EXE等进程进行内存操作和线程操作

3.打开查找到的进程LSASS.EXE,获取该进程句柄

4.创建一事件,用于与通信线程同步

5.创建通信线程,执行如下操作:

[1]. 根据当前进程ID创建命名管道\\.\pipe\pwdump2-%ID%

[2]. 设置事件为有状态,通知主线程管道创建成功

[3]. 连接到管道并从中读取数据直到关闭

6.在创建的事件上等待,与之前创建的管道通信线程同步

7.向LSASS.EXE进程空间中写入创建的管道名和辅助动态库SamDump.dll导出函数名(DumpSam)作为参数,创建远程线程.

在远程线程中,根据传递的API地址,加载DLL,获取DLL导出函数(DumpSam)并调用

8.等待远程线程返回,释放资源。

动态库SamDump.dll导出函数DumpSam(char *)执行如下操作:

1.根据传入参数打开通信管道

2.加载samsrv.dll,获取如下函数地址

SamIConnect

SamrOpenDomain

SamrOpenUser

SamrQueryInformationUser

SamrEnumerateUsersInDomain

SamIFree_SAMPR_USER_INFO_BUFFER

SamIFree_SAMPR_ENUMERATION_BUFFER

SamrCloseHandle

3.依次调用如下函数

LsaOpenPolicy打开NT工作站

LsaQueryInformationPolicy获取工作站域SID

SamIConnect连接到SAM数据库

SamrOpenDomain根据域SID打开域

SamrEnumerateUsersInDomain枚举域内用户

SamrOpenUser打开域内指定用户,获取句柄

SamrQueryInformationUser枚举域用户信息

SamIFree_SAMPR_USER_INFO_BUFFER

SamrCloseHandle

FU_Rootkit

FU的下载地址:

FU的动画教程:

FU是什么?

简单的来说,FU是一个隐藏进程的工具. 全称好像叫做 FU_Rootkit

官网:

FU_Rootkit也算是“养在深闺人未识”了,比起Hxdef、AFX RootKit来名气小多了,

FU_Rootkit是开源的,用C语言编写。

FU_Rootkit主程序包括2个部分:

Fu.exe和Msdirectx.sys。 Msdirectx.sys能直接载入核心内存,Fu.exe则是相应的应用程序。

先来看看它的部分功能:

[-pl] xxx 列举所有运行进程

[-ph] #PID 隐藏进程标识符为PID的进程

[-pld] 列举所有载入驱动程序

[-phd] DRIVER_NAME 隐藏指定驱动

[-pas] #PID 提升进程标识符为PID的进程权限至SYSTEM

[-prl] 列出可用的权限名单

[-prs] #PID #privilege_name 提升进程标识符为PID的进程权限至指定权限

[-pss] #PID #account_name 改变进程令牌和SID

可以看出FU_Rootkit不仅可以隐藏进程和驱动,改变进程令牌和SID,还可以例举用Hook技术隐藏的进程和驱动。

c语言windows程序,如何给其他程序传递消息。

大概思路是

你要获取这个窗口的句柄,因为有了窗口句柄,你想干什么就可以干什么了。比如枚举窗口下的子窗口句柄,然后发送数据就行了。

可是要获取句柄,是不是应该要找到对应的进程?QQ在内核方面下了功夫,把很多关键函数hook了。所以你需要利用ARK内核级别的软件工具查看到底哪些函数被hook了,然后通过手动或者编程实现还原。这样你才有机会获取QQ的进程。

就上面说的,实现起来就很难了。

说白了就是过QQ的驱动保护,这些技术可以参考《rootkit-windows内核的安全防护》等书籍。不过前提是基础要好,不然看不懂。

我是想在r0上查看系统进程以找到那些可能被rootkit技术隐藏起来的进程

和入侵检测术语字典( NSA Glossary of Terms Used in Security and Intrusion Detection)对rootkit的定义如下:A hacker security tool that captures passwords and message traffic to and from a computer. A collection of tools that allows a hacker to provide a backdoor into a system, collect information on other systems on the network,mask the fact that the system is compromised, and much more. Rootkit is a classic example of Trojan Horse software. Rootkit is available for a wide range of operating systems.

x7d3]1G!?2Rz0SupeSite/X-Space官方站OvP%T}:t_0NEw

好多人有一个误解,他们认为rootkit是用作获得系统root访问权限的工具。实际上,rootkit是攻击者用来隐藏自己的踪迹和保留root访问权限的工具。通常,攻击者通过远程攻击获得root访问权限,或者首先密码猜测或者密码强制破译的方式获得系统的访问权限。进入系统后,如果他还没有获得root权限,再通过某些安全漏洞获得系统的root权限。接着,攻击者会在侵入的主机中安装rootkit,然后他将经常通过rootkit的后门检查系统是否有其他的用户登录,如果只有自己,攻击者就开始着手清理日志中的有关信息。通过rootkit的嗅探器获得其它系统的用户和密码之后,攻击者就会利用这些信息侵入其它的系统。 SupeSite/X-Space官方站J l+br [0x-V

bX#[H5^*`G!r0什么是rootkit

i*Q i [3tj*y3s0@(j0

8mh iuy}D0Rootkit出现于二十世纪90年代初,在1994年2月的一篇安全咨询报告中首先使用了rootkit这个名词。这篇安全咨询就是CERT-CC的CA-1994-01,题目是Ongoing Network Monitoring Attacks,最新的修订时间是1997年9月19日。从出现至今,rootkit的技术发展非常迅速,应用越来越广泛,检测难度也越来越大。其中针对SunOS和Linux两种操作系统的rootkit最多(树大招风:P)。所有的rootkit基本上都是由几个独立的程序组成的,一个典型rootkit包括: SupeSite/X-Space官方站:Rd]#m+a0]X l

SupeSite/X-Space官方站c yNmQO M

以太网嗅探器程程序,用于获得网络上传输的用户名和密码等信息。 SupeSite/X-Space官方站”V’wz,

特洛伊木马程序,例如:inetd或者login,为攻击者提供后门。

;S

可能还包括一些日志清理工具

)M@H3uF/F}0一些复杂的rootkit还可以向攻击者提供telnet、shell和finger等服务。

o_k(F{;Z |#k0还包括一些用来清理/var/log和/var/adm目录中其它文件的一些脚本。

OUzU6R9j q h0Ocrf0SupeSite/X-Space官方站 gerx*eNjl(n,e

入侵者入侵后往往会进行清理脚印和留后门等工作,最常使用的后门创建工具就是rootkit。不要被名字所迷惑,这个所谓的“rootkit”可不是给超级用户root用的,它是入侵者在入侵了一太主机后,用来做创建后门并加以伪装用的程序包。这个程序包里通常包括了日志清理器,后门等程序。同时,程序包里通常还带有一些伪造的ps、ls、who、w、netstat等原本属于系统本身的程序,这样的话,程序员在试图通过这些命令查询系统状况的时候,就无法通过这些假的系统程序发觉入侵者的行踪。 SupeSite/X-Space官方站(m yZ1e3~(L1|

SupeSite/X-Space官方站2dPq+S1| GW/w.Ew l

在一些黑客组织中,rootkit (或者backdoor) 是一个非常感兴趣的话题。各种不同的rootkit被开发并发布在internet上。在这些rootkit之中, LKM尤其被人关注, 因为它是利用现代操作系统的模块技术。作为内核的一部分运行,这种rootkit将会越来越比传统技术更加强大更加不易被发觉。一旦被安装运行到目标机器上, 系统就会完全被控制在hacker手中了。甚至系统管理员根本找不到安全隐患的痕迹, 因为他们不能再信任它们的操作系统了。后门程序的目的就是甚至系统管理员企图弥补系统漏洞的时候也可以给hacker系统的访问权限。 SupeSite/X-Space官方站zY jAUxM)SI\,\w

J J3Ej$u,T#{“jlQ:E0入侵者通过:设置uid程序, 系统木马程序, cron后门等方法来实现入侵者以后从非特权用户使用root权限。

`TC%d;z+O1V’O.]n{0SupeSite/X-Space官方站c8Ai/Jh,K \

设置uid程序。 黑客在一些文件系统理放一些设置uid脚本程序。无论何时它们只要执行这个程序它们就会成为root。

V.W M.B#L4p t1FD0

G4~8t:rC0y0系统木马程序。黑客替换一些系统程序,如”login”程序。因此, 只要满足一定的条件,那些程序就会给黑客最高权限。

qg6kb#F SeC0

s’w.I D Vc5R\~0Cron后门。黑客在cron增加或修改一些任务,在某个特定的时间程序运行,他们就可以获得最高权限。 SupeSite/X-Space官方站*j/y#t{6RGt-~

具体可能通过以下方法给予远程用户以最高访问权限: “.rhost” 文件, ssh认证密钥, bind shell, 木马服务程序。 SupeSite/X-Space官方站m ~?3^8x/B

“.rhosts” 文件。一旦 “+ +”被加入某个用户的.rhosts文件里, 任何人在任何地方都可以用这个账号来登陆进来而不需要密码。 SupeSite/X-Space官方站”t+cR-B_^J N8U9X @

SupeSite/X-Space官方站:l#]_S4\

ssh认证密钥。黑客把他自己的公共密钥放到目标机器的ssh配置文件”authorized_keys”里, 他可以用该账号来访问机器而不需要密码。 SupeSite/X-Space官方站XJ:?0pp.J

SupeSite/X-Space官方站6T\CoY9a}Y

Bind shell。黑客绑定一个shell到一个特定的tcp端口。任何人telnet这个端口都可以获得交互的shell。更多精巧的这种方式的后门可以基于udp,或者未连接的tcp, 甚至icmp协议。 SupeSite/X-Space官方站Ix_F~R M

SupeSite/X-Space官方站~3[+[4?L’h\1j'{a

Trojaned服务程序。任何打开的服务都可以成为木马来为远程用户提供访问权限。例如, 利用inetd服务在一个特定的端口来创建一个bind shell,或者通过ssh守护进程提供访问途径。

XF5Q ~u}u0在入侵者植入和运行后门程序之后, 他会设法隐藏自己存在的证据,这主要涉及到两个方面问题: 如何来隐藏他的文件且如何来隐藏他的进程。

Yk g”e*|I s0为了隐藏文件, 入侵者需要做如下事情: 替换一些系统常用命令如”ls”, “du”, “fsck”。在底层方面, 他们通过把硬盘里的一些区域标记为坏块并把它的文件放在那里。或者如果他足够疯狂,他会把一些文件放入引导块里。 SupeSite/X-Space官方站8~tG5q7f?JfJ;@,w,s

%KSTGJB;N[ Zz0为了隐藏进程, 他可以替换 “ps”程序, 或者通过修改argv[]来使程序看起来象一个合法的服务程序。有趣的是把一个程序改成中断驱动的话,它就不会出现在进程表里了。

fu_rootkit

fu_rootkit可以隐藏进程和驱动,改变进程令牌和SID,例举用hook技术隐藏的进程和驱动,而且它是公开源代码的。

===============================================

我在2004年11期黑防上刊登了《小工具巧删Guest/Administrator账户》这篇文章,有不少朋友来信询问工具是如何编写的,其实这个工具里面大部分代码是我拷贝FU_Rootkit过来的。既然朋友们喜欢,这几天我又多了好多想法,那我就来讲讲怎么充分挖掘利用FU_Rootkit吧!

先去把FU_Rootkit 给Down下来,以前它在Windows 2000专业版下面提升进程权限有问题,新版本已经修复这个问题。FU_Rootkit也算是“养在深闺人未识”了,比起Hxdef、AFX RootKit来名气小多了,不过是金子终究是要发光的,这不,今天我们就让它来发光了!

FU_Rootkit是开源的,用C语言编写,很容易移植。我的开发环境是Windows 2000+SP4+VC6.0。FU_Rootkit主程序包括2个部分:Fu.exe和Msdirectx.sys。 Msdirectx.sys能直接载入核心内存,Fu.exe则是相应的应用程序。先来看看它的部分功能:

[-pl] xxx 列举所有运行进程

[-ph] #PID 隐藏进程标识符为PID的进程

[-pld] 列举所有载入驱动程序

[-phd] DRIVER_NAME 隐藏指定驱动

[-pas] #PID 提升进程标识符为PID的进程权限至SYSTEM

[-prl] 列出可用的权限名单

[-prs] #PID #privilege_name 提升进程标识符为PID的进程权限至指定权限

[-pss] #PID #account_name 改变进程令牌和SID

可以看出FU_Rootkit不仅可以隐藏进程和驱动,改变进程令牌和SID,还可以例举用Hook技术隐藏的进程和驱动。我们今天要做的就是利用Msdirectx.sys完成我们自己的黑客工具集的编写!

权限提升

有了权限我们才能任意地操作,让电脑为我们实现各种功能,所以第一步首先是权限提升。

我们知道,提升进程权限可以用Psu工具,FU_Rootkit也能够实现这个功能,它可以将任意进程提升到SYSTEM权限——不光可以给其它进程提升权限,还可以把自己的进程也提升为SYSTEM权限哦(在下面的文章中你将可以看到这个功能是多么的有用)!

第一步:载入Msdirectx.sys

具体代码见InitDriver()函数。其实朋友们大可不必完全看懂这些代码,把函数直接拷贝过去就OK了。

第二步:查找进程的PID

代码如下:

const char DESTPROC[19] = “UserManager.exe”; // UserManager.exe是程序的进程名称

AddPrivilege(SE_DEBUG_NAME); //提升进程DEBUG权限

HANDLE hRemoteProcess = NULL;

DWORD pid = ProcessToPID(DESTPROC);//这里的pid就是我们进程PID

// ProcessToPID函数如下:

DWORD ProcessToPID(const char *InputProcessName)

//将进程名转换成进程PID的函数

{

DWORD aProcesses[1024], cbNeeded, cProcesses;

unsigned int i;

HANDLE hProcess = NULL;

HMODULE hMod = NULL;

char szProcessName[MAX_PATH] = “UnknownProcess”;

//提升进程权限至DEBUG权限

AddPrivilege(SE_DEBUG_NAME);

// 计算目前有多少进程, aProcesses[]用来存放有效的进程PIDs

if ( !EnumProcesses( aProcesses, sizeof(aProcesses), cbNeeded ) )

{

return 0;

}

cProcesses = cbNeeded / sizeof(DWORD);

// 按有效的PID遍历所有的进程

for ( i = 0; i cProcesses; i++ )

{

// 打开特定PID的进程

hProcess = OpenProcess( PROCESS_QUERY_INFORMATION |

PROCESS_VM_READ,

FALSE, aProcesses[i]);

// 取得特定PID的进程名

if ( hProcess )

{

if ( EnumProcessModules( hProcess, hMod, sizeof(hMod), cbNeeded) )

{

GetModuleBaseName( hProcess, hMod, szProcessName, sizeof(szProcessName) );

//将取得的进程名与输入的进程名比较,如相同则返回进程PID

if(!stricmp(szProcessName, InputProcessName))

{

CloseHandle( hProcess );

return aProcesses[i];

}

}

}//end of if ( hProcess )

}//end of for

//没有找到相应的进程名,返回0

CloseHandle( hProcess );

return 0;

}

第三步:提升进程权限至SYSTEM

具体代码见UpdateToSystem()函数。这样我们的进程UserManager.exe就具备了SYSTEM权限了。

攻击篇

当你得到肉鸡的SYSTEM权限后,当然要把自己的后门进程或驱动器隐藏,然后克隆账号,留个隐藏账号什么的,下面我们就来看看这些功能如何用程序来实现。

1.克隆帐号

各位朋友看到小榕的CA工具是不是很眼馋,想不想自己写一个?在黑防2003年的第7期《C语言克隆账号》上已经有具体介绍。一般来讲,克隆账号的方法有2种:一种是利用系统服务的SYSTEM权限读写SAM文件;第二种是利用驱动提升进程权限。我们这里采用第二种办法。在《C语言克隆账号》一文中,由于其不具备SYSTEM权限,需要手工修改注册表才能够操作注册表SAM文件夹,比较麻烦。在我们这里当然是没有问题的,将其代码COPY过来,粘在我们工程里面就可以了。

2.进程隐藏

进程隐藏实乃木马病毒的必备防身本领,FU_Rootkit中的最基本功能之一就是进程隐藏,首先我们要知道进程的PID或者进程名,然后才能将它隐藏,隐藏代码如下:

DWORD HideProc(DWORD pid)//pid是你要隐藏的进程的PID

{

DWORD d_bytesRead;

DWORD success;

if (!Initialized)

{

return ERROR_NOT_READY;

}

success = DeviceIoControl(gh_Device,

IOCTL_ROOTKIT_HIDEME,

(void *) pid,

sizeof(DWORD),

NULL,

0,

d_bytesRead,

NULL);

return success;

}

假如你要想找出隐藏的进程,可以采用工具RTDector0.62工具,黑防以前就介绍过。

3. 驱动隐藏

驱动隐藏?很少见吧。有经验的管理员一般都会使用命令Drivers.exe来查看载入的驱动(Drivers.exe可以在Windows 2000的资源包里面找到),

看到Msdirectx.sys暴露出来了吧?而FU_Rootkit就可以把自己的 Msdirectx.sys隐藏起来,运行的命令是:“C:\fu.exe –phd msdirectx.sys”。当然这个功能我们也可以很轻松地移植到我们的程序中去。

防御篇

千万不要以为FU_Rootkit得到SYSTEM权限只是用来攻击,不能防守,其实Rootkit是一把“双刃剑”,运用得当,同样是防御的好帮手。同时,作为一名菜鸟,当然是防守为先,所以请看防守篇。

1. 系统用户查看

眼下只要翻开一本黑客杂志,经常看到什么“隐藏帐号”、“不死帐号”什么的,吓得我等菜鸟心惊胆颤,经常对着用户管理发呆,究竟有没有问题呢?这里我们可以利用LPUSER_INFO_3读取用户信息,包括用户名、用户全名、用户描述、登录次数、登录权限以及上次登录时间等参数,代码较长而且简单,这里就不贴了,有兴趣的可以查看DWORD CUserManagerDlg::UserALLE()函数。

当然,列举账号可以直接从SAM\\SAM\\Domains\\Account\\Users\\Names\中读取,然后与LPUSER_INFO_3中读出来的账号进行对比,这样就能找出隐藏的账号,将那些隐藏的、不死的统统打回原形,让你把账号看得“清清楚楚,明明白白”。

2. 删除Guest

先来看看如何删除Guest用户吧。获取SYSTEM权限后,只要删除在注册表SAM文件夹中对应的Guest和000001F5文件夹就OK了!

void CUserManagerDlg::Deleteguest()

{

BOOL upResult;

upResult=UpdateToSystem();

//先查看一下进程提示权限至SYSTEM成功没有

if(upResult)//如果权限提升SYSTEM成功的话

{

// 删除GUEST用户!

BOOL dResult;

dResult=DelNT(HKEY_LOCAL_MACHINE,”SAM\\SAM\\Domains\\Account\\Users\\Names\\Guest”);//删除Guest文件夹

BOOL dResult2;

dResult2=DelNT(HKEY_LOCAL_MACHINE,”SAM\\SAM\\Domains\\Account\\Users\\000001F5″);//删除guest对应的ID号000001F5文件夹

if(dResultdResult2)

{

AfxMessageBox(“成功删除GUEST用户!”);

}

else

{

AfxMessageBox(“删除GUEST用户失败!”);

}

}

else

{

AfxMessageBox(“提升至SYSTEM权限失败!”);

}

}

其中DelNT()函数是专门定义用来删除注册表子键的函数。

3. 删除Administrator

看到标题你可不要吓一跳,Administrator一般情况下是不能删除的,当然你可以到控制面板-管理工具-计算机管理里面重命名该账户,也可以使用NT Resource Kit提供的Passprop工具启用对Administrator的锁定。我们这里当然要挑战极限:删除Administrator!代码跟删除Guest用户的代码差不多,换个参数就可以了,分别删除注册表SAM文件夹中的Administrator和000001F4文件夹就可以了。而且可以在Administrator当前用户下删除,强吧?嘿嘿。假如你只有这么一个管理员账号的话呢,不好意思,恭喜你:你的机器上从此没有管理员了!

小提示:强烈建议删除Administrator之前一定要先创建一个其它名字的管理员账号!据《微软信息安全文集》中说,删除Administrator和Guest系统内置账户有可能导致破坏SAM数据库,不过《微软信息安全文集》的作者同时声明:经他测试,没有发现副作用。

4. 查杀进程篇

朋友们是否经常遇到这种情况:在任务管理器中发现一个未知进程,并且杀不掉,说是权限不够,这个问题在我们获取System权限后就不再是问题,现在病毒、木马等都是双进程,互相监控,给我们查杀进程带来很大不便,需要我们能够同时查杀多个进程。选用Listview控件作为进程的列举控件,将Checkbox选项选中,这样我们就可以同时选中多个进程进行查杀,爽吧?!

5. 列举用Hook技术隐藏的进程和驱动

这个功能就是FU_Rootkit的过人之处了,可以帮助你查找利用HOOK技术隐藏的进程和木马。实现方法比较简单,大家可以去源码中查看ListProc(void *buffer, int buff_size)和ListDriv(void)函数。

本文利用FU_Rootkit获取SYSTEM权限后,完成了很多实用的黑客小工具, System和Administrator权限一般人看起来感觉都差不多,但在一些与系统内核交互的细节上,可以看出System权限要更大一些。譬如说注册表中的某些文件夹、对物理内存有读写能力等方面。因此,获取System权限后所能做的事情远远不止我们上面所说的这些,希望大家共同挖掘。

上有很多开源的好资源,研究并扩展其功能便可以写出很多有用的小软件。将其功能添加到我们小马中去,将会大大提高其生命力。朋友们,现在是不是感觉黑客软件不过如此,人人能写?如果是这样,也不枉费我一番苦心。由于工作关系,时间确实有限,不可能将上面的功能全部一一实现在代码中,其实已经是体力活了,很多功能都只需要把代码COPY进去就可以了。特将删除Guest/Administrator的小工具和FU_Rootkit的代码附上,朋友们升级了可要寄给我一份哦!

原创文章,作者:KYLD,如若转载,请注明出处:https://www.506064.com/n/144915.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
KYLDKYLD
上一篇 2024-10-26 11:53
下一篇 2024-10-26 11:53

相关推荐

  • AES加密解密算法的C语言实现

    AES(Advanced Encryption Standard)是一种对称加密算法,可用于对数据进行加密和解密。在本篇文章中,我们将介绍C语言中如何实现AES算法,并对实现过程进…

    编程 2025-04-29
  • 学习Python对学习C语言有帮助吗?

    Python和C语言是两种非常受欢迎的编程语言,在程序开发中都扮演着非常重要的角色。那么,学习Python对学习C语言有帮助吗?答案是肯定的。在本文中,我们将从多个角度探讨Pyth…

    编程 2025-04-29
  • Python被称为胶水语言

    Python作为一种跨平台的解释性高级语言,最大的特点是被称为”胶水语言”。 一、简单易学 Python的语法简单易学,更加人性化,这使得它成为了初学者的入…

    编程 2025-04-29
  • OpenJudge答案1.6的C语言实现

    本文将从多个方面详细阐述OpenJudge答案1.6在C语言中的实现方法,帮助初学者更好地学习和理解。 一、需求概述 OpenJudge答案1.6的要求是,输入两个整数a和b,输出…

    编程 2025-04-29
  • Python按位运算符和C语言

    本文将从多个方面详细阐述Python按位运算符和C语言的相关内容,并给出相应的代码示例。 一、概述 Python是一种动态的、面向对象的编程语言,其按位运算符是用于按位操作的运算符…

    编程 2025-04-29
  • Python语言由荷兰人为中心的全能编程开发工程师

    Python语言是一种高级语言,很多编程开发工程师都喜欢使用Python语言进行开发。Python语言的创始人是荷兰人Guido van Rossum,他在1989年圣诞节期间开始…

    编程 2025-04-28
  • Python语言设计基础第2版PDF

    Python语言设计基础第2版PDF是一本介绍Python编程语言的经典教材。本篇文章将从多个方面对该教材进行详细的阐述和介绍。 一、基础知识 本教材中介绍了Python编程语言的…

    编程 2025-04-28
  • Python语言实现人名最多数统计

    本文将从几个方面详细介绍Python语言实现人名最多数统计的方法和应用。 一、Python实现人名最多数统计的基础 1、首先,我们需要了解Python语言的一些基础知识,如列表、字…

    编程 2025-04-28
  • Python作为中心语言,在编程中取代C语言的优势和挑战

    Python一直以其简单易懂的语法和高效的编码环境而著名。然而,它最近的发展趋势表明Python的使用范围已经从脚本语言扩展到了从Web应用到机器学习等广泛的开发领域。与此同时,C…

    编程 2025-04-28
  • Python基础语言

    Python作为一种高级编程语言拥有简洁优雅的语法。在本文中,我们将从多个方面探究Python基础语言的特点以及使用技巧。 一、数据类型 Python基础数据类型包括整数、浮点数、…

    编程 2025-04-28

发表回复

登录后才能评论