利用驱动程序读取BIOS.docx

上传人:b****1 文档编号:2092105 上传时间:2022-10-26 格式:DOCX 页数:9 大小:19.62KB
下载 相关 举报
利用驱动程序读取BIOS.docx_第1页
第1页 / 共9页
利用驱动程序读取BIOS.docx_第2页
第2页 / 共9页
利用驱动程序读取BIOS.docx_第3页
第3页 / 共9页
利用驱动程序读取BIOS.docx_第4页
第4页 / 共9页
利用驱动程序读取BIOS.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

利用驱动程序读取BIOS.docx

《利用驱动程序读取BIOS.docx》由会员分享,可在线阅读,更多相关《利用驱动程序读取BIOS.docx(9页珍藏版)》请在冰豆网上搜索。

利用驱动程序读取BIOS.docx

利用驱动程序读取BIOS

利用驱动程序读取BIOS

用BIOS的内容作为硬标记进行加密,应用程序可以通过检测bios的特定内容,如主板日期、厂家信息等。

如果符合要求,就让程序正常运行;如不符合要求,就判断为盗版,禁止运行。

这样可以

起到一定的加密锁的作用。

    如何得到bios的内容呢?

我们已经通过驱动程序进入ring0,在ring0中是无所不能的,有一个简单的函数,可以帮助我们达到目的。

它就是MmMapIoSpace函数,在DDK文档中看到该函数的说明如下

:

PVOIDMmMapIoSpace(

INPHYSICAL_ADDRESSPhysicalAddress,

INULONGNumberOfBytes,

INMEMORY_CACHING_TYPECacheType);

在Masm32v8中声明的有4个形参

MmMapIoSpace    protostdcall:

DWORD,:

DWORD,:

DWORD,:

DWORD

为什么参数个数会有不同呢?

原因是MmMapIoSpace第一个参数传递的是一个结构而非结构的指针,而该结构实际的大小是2个双字,结果在masm32中表现为总共4个dword参数。

调用非常简单,invokeMmMapIoSpace,物理地址低32位,0,长度,MmNonCached

若成功该函数返回影射后的线性地址,否则返回NULL。

这样就可以间接达到读取物理地址中内容的目的。

bios开始地址在实模式下是F000:

0,也就是0f0000h,长度是64k,也就是10000h

这样我们就可以用一句invokeMmMapIoSpace,0f0000h,0,64*1024,MmNonCached;把BIOS的物理地址映射为线性地址,返回值在eax中。

然后把eax指向的线性地址中的内容复制到系统的缓冲区中,让驱动程序传给ring3下的应用程序。

bios_test.bat是驱动源码。

bios_test.asm是调用驱动的ring3级程序,它把驱动传回的bios内容写入文件bios_tst.bin,是16进制的,可以用16进制编辑器来查看。

实际使用时,可以传递一个随机的密钥给驱动程序,驱动程序负责把bios内容加密后返回,这样可以一定程度上增加解密的难度。

程序中已经预留了接口,实现起来很简单,有兴趣者可以自己实现。

以下是程序源代码:

已在xp和vista下调试通过。

;gotomake

;文件名bios_test.bat作者:

盛玉增2009年10月20日用masm32v8和kmdkit1.8在winxp及vista下调试成功。

.386

.modelflat,stdcall

optioncasemap:

none

include\masm32\include\w2k\ntstatus.inc

include\masm32\include\w2k\ntddk.inc

include\masm32\include\w2k\ntoskrnl.inc

includelib\masm32\lib\w2k\ntoskrnl.lib

include\masm32\Macros\Strings.mac

IOCTL_GET_INFOequCTL_CODE(FILE_DEVICE_UNKNOWN,800h,METHOD_BUFFERED,FILE_READ_ACCESS+FILE_WRITE_ACCESS)

.const

CCOUNTED_UNICODE_STRING    "\\Device\\bios_test",g_usDeviceName,4

CCOUNTED_UNICODE_STRING    "\\?

?

\\bios_test",g_usSymbolicLinkName,4

.data

buff1  db128*512dup(0f6h);

key_1  db32dup(0);

.code

;:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

;                                  DispatchCreateClose                                            

;:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

DispatchCreateCloseprocpDeviceObject:

PDEVICE_OBJECT,pIrp:

PIRP

    ;CreateFilewascalled,togetdriverhandle

    ;CloseHandlewascalled,toclosedriverhandle

    ;Inbothcasesweareinuserprocesscontexthere

    moveax,pIrp

    assumeeax:

ptr_IRP

    mov[eax].IoStatus.Status,STATUS_SUCCESS

    and[eax].IoStatus.Information,0

    assumeeax:

nothing

    fastcallIofCompleteRequest,pIrp,IO_NO_INCREMENT

    moveax,STATUS_SUCCESS

    ret

DispatchCreateCloseendp

;:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

;                                    DispatchControl                                              

;:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

DispatchControlprocusesesiedipDeviceObject:

PDEVICE_OBJECT,pIrp:

PIRP

localstatus:

NTSTATUS

localdwBytesReturned:

DWORD    ;实际返回的字节数

    anddwBytesReturned,0

    movesi,pIrp

    assumeesi:

ptr_IRP

    IoGetCurrentIrpStackLocationesi

    movedi,eax

    assumeedi:

ptrIO_STACK_LOCATION

    .if[edi].Parameters.DeviceIoControl.IoControlCode==IOCTL_GET_INFO

        .if[edi].Parameters.DeviceIoControl.OutputBufferLength>=30

            moveax,[esi].AssociatedIrp.SystemBuffer

                      

                      pushad

                      pusheax

                      movesi,eax

                      movecx,30

                      movedi,offsetkey_1

                      cld

                      repmovsb  ;保存传过来的数据到key_1,以备做密钥,加密数据后返回。

                      

                      invokeMmMapIoSpace,0f0000h,0,64*1024,MmNonCached;物理地址映射为线性地址,返回值在eax

                      cmpeax,0  ;eax==0,失败

                      jnz  next_1

                      jmpnext_2

            next_1:

    

                        movesi,eax

                        popedi

                        movecx,10000h

                        repmovsb

                        popad

            movdwBytesReturned,128*512

            movstatus,STATUS_SUCCESS

            jmpnext_3

            next_2:

popeax

                  popad

                  movstatus,STATUS_INVALID_DEVICE_REQUEST

            next_3:

        .else

            movstatus,STATUS_BUFFER_TOO_SMALL

        .endif

    .else

        movstatus,STATUS_INVALID_DEVICE_REQUEST

    .endif

    assumeedi:

nothing

    pushstatus

    pop[esi].IoStatus.Status

    pushdwBytesReturned

    pop[esi].IoStatus.Information

    assumeesi:

nothing

    fastcallIofCompleteRequest,esi,IO_NO_INCREMENT

    moveax,status

    ret

DispatchControlendp

;:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

;                                      DriverUnload                          

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

当前位置:首页 > 自然科学 > 数学

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

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