数学建模社区-数学中国

标题: 手工添加系统服务 完全版 [打印本页]

作者: 韩冰    时间: 2005-2-4 23:55
标题: 手工添加系统服务 完全版

作者:Darkness http://boy.804.cn/

* H% W- K6 G0 ], _3 n

现在很多的木马、后门、蠕虫病毒都是通过修改注册表中的RUN键值来实现自启动。* i% U% q, s3 M0 G( M 但是这种自启动模式不是很隐蔽的,稍微懂点安全的人,一般发现电脑被黑,都会查看RUN键值的。 # T ~- w7 P7 t) x6 C' o于是系统服务便成为了一种相对隐蔽的自启动模式。比如冲击波杀手就采用系统服务来自启动病毒程序。 # ]* ?/ z6 I1 a1 b/ K* g5 d6 g* H现在添加系统服务工具很多,最典型的就是netservice。但是我们这里讲的是手工添加系统服务,所以工具的使用不在本文的讨论范围之内。 ( {" @0 U: X! a3 @) ]9 X! T" S* C , V3 h. O2 @8 h7 DWINDOWS里的很多东西都是跟注册表息息相关的,系统服务也不例外。- }# c$ Y9 `: I4 {) E * F' c' h. ^- R* s# ]) w4 m系统服务跟以下的注册表几个项目相关: ) ?5 \& K5 _6 S4 ^2 O+ V4 m5 N$ X( a2 E$ F; [) ? HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices - T+ t* v: X! V7 s ]! ?& V" U, f2 X, \9 B2 R; I1 b. O8 R HKEY_LOCAL_MACHINESYSTEMControlSet001Services 7 S8 D8 u7 _- X q 9 j5 d* F( c% [3 p- RHKEY_LOCAL_MACHINESYSTEMControlSet002Services" U9 d& W0 c" o1 G/ w 我们完全可以找到在系统服务中已注册的服务的键值来依样画葫芦。 , R+ D9 }, E& W2 _) T 0 g7 q; m, w0 J在以上任何注册表列中添加一个新项: % a3 ]) L% b) h. \' v# ~& t 8 N0 D1 w( U6 @名字是你想要添加系统服务的名字,比如Backdoor。. D( ^; S3 X$ U: k3 C1 R$ e% V- y & ~$ ]2 ^( h" \6 U在BACKDOOR项下新建一个字符串,数值名称Displayname 数值数据为要添加服务' F& g% o8 N# v6 [" _ ! q5 [1 j* Y3 g6 w) t0 J 名称Backdoor。3 g5 v& m" b7 d 下面列出一个表,会直观一些: . D& v4 E9 `* E- `1 J . K3 y e, q+ ?+ A/ w9 g名称 类型 数据 备注 8 V( o$ ]1 V# T. n6 A! k 5 l( ] Q. G8 r, a4 P2 a3 }* fDisplayname REG_SZ 想要添加服务的名称 想要添加服务的名称$ c8 W" v+ a2 @ Description REG_SZ 服务的描述 服务的描述8 L7 |- K- r' D$ Q% E ImagePath REG EXPAND SZ 程序的路径 9 C8 T6 E: R Z1 s8 B( c- h5 uStart REG_DWORD 0,2,3,4 2代表自动启动,3代表手动启动服务.4代表禁用服务,0代表系统对底层设备驱动(一般不需要这个) : V; J* x9 M& b k mErrorControl REG_DWORD 1) W Z) T2 ~" X: _ Type REG_DWORD 10 or 20 一般应用程序都是10,其他的对应20. e. u, N) r/ O5 l! Z ObjectName REG_SZ LocalSystem 显示本地登陆 : q) q( c* j# o( @9 q% x0 \+ A" s. O! N' | 注意:在XP/2003下可以完全手工来添加REG EXPAND SZ类型。在XP/2003下直接修改ImagePath 键值就可以了。但是在WIN2000下却不可以。原因我也不清楚:(。但是在WIN2000下我们写一个REG来直接注册系统服务,这样WIN2000下添加系统也能很轻松了。这里同样需要注意的是注册表文件里的ImagePath的数值类型必须是HEX(16进制)。可以拿WINHEX来把程序的绝对路径转换成16进制的。每一个数值用逗号搁开。比如我的ImagePath键值是C:winntnukegroup.exe那就应该转换成: ' K* S! M4 u# K1 |63,3A,5C,77,69,6E,6E,74,5C,6E,75,6B,65,2E,65,78,65(无空格)" H3 L1 O( D4 w( [0 c ?& L : q! o4 e! c U8 G F* T打开记事本,敲入以下内容:. U/ x: h5 `( Q9 v U4 Y ' V' f3 O3 B) I8 v: P. q( w+ XWindows Registry Editor Version 5.001 `$ V0 \5 B' w# d0 | " H* D. a3 ?, u4 W+ m# z6 S[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesSRVTEST]* J( w+ I9 y4 ~" | G" y2 K 9 C* l- f6 A# V7 n; a( a6 a"Type"=dword:00000010 , f: A0 N/ ]7 Z, Y+ W5 b5 |6 O 3 e* X0 G; d( z+ P8 H1 i7 h"Start"=dword:00000002 0 I( a4 L" A& P9 T5 `; q! R8 i1 T4 O! a$ a( o7 u( t( K "ErrorControl"=dword:00000001 F# A! G3 `& }, t( J8 ~( b * h @' i N+ h: I: d"ImagePath"=hex(2):63,3A,5C,77,69,6E,6E,74,5C,6E,75,6B,65,2E,65,78,65 s" j& b9 _# J1 [2 x* @ 9 y2 A- \' p: f, y# V4 m3 _/ U2 `( w"DisplayName"="SRVTEST"2 w5 K( y" z' }4 W: u& ]9 T & d$ H/ _/ J/ t, K9 S9 ^5 P "ObjectName"="LocalSystem") \) _. C0 H1 D+ T% b% y+ g* L + B W* f5 Y" `; I0 t+ ^+ P"Description"="系统服务测试") j0 l, \, Q& G6 c3 n ' y4 `$ H0 [6 k 把以上信息保存为addsrv.reg,我们就可以依靠命令来导入注册表,从而达到添加系统服务的目的。. r" C+ R( E1 |# } ! Y. E5 Z( ]5 I3 W% K7 ^ 我们在命令控制台输入regedit /s addsrv.reg,等机器重新启动,这个服务就被成功添加了。% T; B* a4 d- n 5 r( R, A' m4 X. q9 R$ Y+ i 但是我在真正实验的时候就遇到困难了。ImagePath的数值是乱码(图1)(图2), . R; b: u% p. u, P5 a6 A- p! ~( ^1 q# P! U& C/ S N9 S * [, X* ~- F8 b6 w# d) Q) W7 _ / q' O" _& G- m0 d2 Y" Q3 L/ c" y$ O" A( S9 l0 L% g8 c c 怎么想也不明白。但是这时可以把乱码修改成绝对路径了。如果直接把REG信息写成这样6 h3 r" F" F7 ]# F& |$ A "ImagePath"=hex(2):C:WINNTNUKEGROUP.EXE( o# t& C( F1 \ 8 W0 x, y& F- n9 e: F( j其他的键值都可以添加,这个键值就不可以了?总之我们可以先添加乱码的ImagePath,然后再修改成C:winntnukegroup.exe 这样也不是不可能的。就是在命令行下来添加就很麻烦了。(图3) 9 Q5 L, ]' t2 } , b4 f3 Z7 j0 r以上是Windows 2000手工添加系统服务的方法,对于Windows 98 注册表结构是不一样的,但是Windows 98仍然可以通过注册表来实现添加系统服务,而且还要更简单一些。


作者: 韩冰    时间: 2005-2-4 23:56
在项目“HKLM/SOFTWARE/Microsoft/WindowsCurrentVersion/RunServices”下添加一个新字符串数值。" B3 B# X, ]7 l7 _. D3 r3 C / x. @# y( w6 |/ n' O 比如,如果程序的名字叫做“BACKDOOR”,就建立一个名为“BACKDOOR”的字符串数值,然后在数据域中输入执行程序的完整路径。/ U$ Q% a. t: d/ _# ` * ]. } F9 w2 o' P手工添加一个系统服务就这么简单,手工删除系统也是一个道理。通过注册表来实现,这里就不多说了。 6 V+ s" o9 @; b 6 L/ B8 [4 h8 {* y2 n ( `, B3 E$ _+ N3 o! \; z , A8 y t% \6 ]: z9 H' M+ V * t& u& B; t: J$ }) o$ h1 G-----------------2 U t' e7 S9 p3 e Windows服务简介 - I& j3 |; L8 c服务控制管理器拥有一个在注册表中记录的数据库,包含了所有已安装的服务程序和设备驱动服务程序的相关信息。它允许系统管理员为每个服务自定义安全要求和控制访问权限。Windows服务包括四大部分:服务控制管理器(Service Control Manager),服务控制程序(Service Control Program),服务程序(Service Program)和服务配置程序(Service Configuration Program)。+ C/ C J8 m, `9 {! f9 G+ P 3 j% G8 c8 W4 I9 m& ]% c- g 1.服务控制管理器(SCM)4 i1 E5 J, |; m, E J4 ]4 i* X 服务控制管理器在系统启动的早期由Winlogon进程启动,可执行文件名是“Admin$\System32\Services.exe”,它是系统中的一个RPC服务器,因此服务配置程序和服务控制程序可以在远程操纵服务。它包括以下几方面的信息:- U6 m8 E5 Z% Q/ Z$ n% u" r 已安装服务数据库服务控制管理器在注册表中拥有一个已安装服务数据库,它在服务控制管理器和程序添加,删除,配置服务程序时使用,在注册表数据库的位置为:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services。它包括很多子键,每个子键的名字就代表一个对应的服务数据库中包括:服务类型(私有进程,共享进程),启动类型(自动运行,由服务控制管理器启动,无效),错误类型(忽略,常规错误,服务错误,关键错误),执行文件路径,依赖信息选项,可选用户名与密码( X0 U3 Q* R0 z1 B' G' O自动启动服务:系统启动时,服务控制管理器启动所有“自启”服务和相关依赖服务服务的加载顺序:顺序装载组列表:HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\ServiceGroupOrder;指定组列表:HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\GroupOrderList;每个服务所依赖的服务程序。在系统成功引导后会保留一份LKG(Last-Know-Good)的配置信息位于:HKEY_LOCAL_MACHINE\SYSTEM\ControlSetXXX\Services。 5 U0 h' T! Y" a8 m& [因要求而启动服务:用户可以使用服务控制面板程序来启动一项服务服务控制程序也可以使用StartService来启动服务服务控制管理器会进行下面的操作:获取帐户信息,登录服务项目,创建服务为悬挂状态,分配登录令牌给进程,允许进程执行。 ! |3 f" l& ?! w C9 `, ~# S7 K* l服务记录列表:每项服务数据库中都包含了下面的内容:服务名称,开始类型,服务状态(类型,当前状态,接受控制代码,退出代码,等待提示),依赖服务列表指针。& W2 F9 h4 ]3 x 服务控制管理器句柄:服务控制管理器支持句柄类型访问以下对象:已安装服务数据库服务程序,数据库的锁开状态。9 h" P [: A" g. k, b8 d # y) s! {, s3 l 2.服务控制程序(SCP) % a( D ~6 o. `: ^% `% t9 t9 G$ f) D服务控制程序可以执行对服务程序的开启,控制和状态查询功能: / I3 V( D4 m. |2 w% B开启服务:如果服务的开启类型为SERVICE_DEMAND_START,就可以用服务控制程序来开始一项服务。在开始服务的初始化阶段服务的当前状态为:SERVICE_START_PENDING,而在初始化完成后的状态就是:SERVICE_RUNNING。 8 ]1 J( A0 m. d) I/ _向正在运行的服务发送控制请求:控制请求可以是系统默认的,也可以是用户自定义的。标准控制代码如下:停止服务(SERVICE_CONTROL_STOP),暂停服务(SERVICE_CONTROL_PAUSE),恢复已暂停服务(SERVICE_CONTROL_CONTINUE),获得更新信息(SERVICE_CONTROL_INTERROGATE)。 {5 W2 y! P# b) \9 ~+ }! X/ T! A y5 D9 E) m6 V 3.服务程序 6 [% d+ Y5 D# F" Y4 P+ V- I一个服务程序可能拥有一个或多个服务的执行代码。我们可以创建类型为SERVICE_WIN32_OWN_PROCESS的只拥有一个服务服务程序。而类型为SERVICE_WIN32_SHARE_PROCESS的服务程序却可以包含多个服务的执行代码。详情参见后面的Windows服务编程( E# A, ?; V8 ?1 e/ { / O- V" I9 [7 s' p2 S" f) C: r: P1 H4.服务配置程序 ) D- m- X5 c: K编程人员和系统管理员可以使用服务配置程序来更改,查询已安装服务的信息。当然也可以通过注册表函数来访问相关资源。 $ w4 U% V( A+ l# G3 X) ~ U4 h/ f1 k) u服务的安装,删除和列举:我们可以使用相关的系统函数来创建,删除服务和查询所有服务的当前状态。 6 Y) H0 ~0 \8 w, t9 ?) V! v服务配置:系统管理员通过服务配置程序来控制服务的启动类型,显示名称和相关描述信息。 6 D9 N2 y8 S. W3 u7 F7 Y------------------7 M0 S9 Y- d* n/ k3 p! E1 ^! U ObjectName REG_SZ LocalSystem & H9 u5 D9 Y- C3 E) D改这里可以实现指定用户" g9 I% Y0 p' y& M+ S) _ 因为LOCALSYSTEM是最高级的权限,所以没有提到其他权限选项." d( |; r0 G4 P3 E / S3 S2 Q$ ?6 m5 o$ o* } 下面是关于系统服务的简单描述 0 t. Q, @ Z5 e, n4 u. B1 k服务仅在登录到某一帐户的情况下才能访问操作系统中的资源和对象。大多数的服务都不更改默认的登录帐户。更改默认帐户可能导致服务失败。如果选定帐户没有登录服务的权限,Microsoft 管理控制台 (MMC) 的服务管理单元将自动为该帐户授予登录所管理计算机服务的用户权限。但这并不保证启动服务。Windows 包括三个内置的本地帐户,分别用作各系统服务的登录帐户: w/ E( @/ A) ?6 T7 Z 8 n, `# a' p3 }2 _本地系统帐户:本地系统帐户功能强大,它可对系统进行完全访问,并作为网络中的计算机工作。如果某服务登录到域控制器的“本地系统”帐户,则该服务可访问整个域。有些服务的默认配置是登录到“本地系统”帐户。不要更改默认服务设置。帐户名称是 LocalSystem。该帐户没有密码* i3 U* J$ U. {7 t+ R / N8 J# K3 I8 d; \" l" [- X; V B 本地服务帐户:本地服务帐户是一种特殊的内置帐户,类似于经身份验证的用户帐户。就访问的资源的对象而言,“本地服务”帐户与“Users”(用户)组成员权限等同。这种限制性访问有助于在个别服务或进程受损时保障系统安全。以“本地服务”帐户运行的服务使用有匿名凭据的空会话来访问网络资源。帐户名称是 NT AUTHORITY\LocalService。该帐户没有密码6 y% k& J2 I. G: ?+ v; O( o3 N6 j6 d; M/ e* L2 U; Y( H1 Q& ^ 网络服务帐户:网络服务帐户也是一种特殊的内置帐户,类似于经身份验证的用户帐户。就访问的资源的对象而言,“网络服务”帐户与“Users”(用户)组成员权限等同。这种限制性访问有助于在个别服务或进程受损时保障系统安全。以“网络服务”帐户运行的服务可使用计算机帐户的凭据来访问网络资源。帐户名称是 NT AUTHORITY\NetworkService。该帐户没有密码! w( t& r: a7 H, c8 Y . `" P/ |! ^, f% z % k/ i( j4 r: K2 e: W1 |, s2 S 如果更改默认服务设置,重要的服务可能无法正常运行。最重要的是,更改启动类型一定要谨慎,要使用配置了自动启动服务的设置来登录。




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5