这段时间,百度知道和微博里反映电脑蓝屏的数量明显变多。根据蓝屏dump分析,这是百度杀毒驱动程序在10月中旬更新时出现的BUG引发的,从蓝屏网友发帖来看,很多人就是通过百度搜索下载软件后中招的(百度软件下载默认勾选捆绑百度杀毒)。
使用反汇编工具分析百度驱动BDMWrench.sys_1.5.0.01062(MD5: 1548660B9855A319BBA703C426D33D99 ) ,发现其中有针对其他安全软件驱动程序DsArk.sys的修改代码。
BDMWrench.sys会保存不同版本DsArk.sys驱动的关键函数偏移、指令信息、时间戳和校验和:
上图为BDMWrench.sys保存1.0.0.1032版本的DsArk.sys的关键信息,其中保存的校验和是0x221A0,其中一个需要修改的函数的偏移是0x9BC8. 以下是DsArk.sys_1.0.0.1032版的文件信息,其中校验和为0x221A0 , 与BDMWrench.sys保存的校验和数据相吻合:
当BDMWrench.sys驱动初始化时或者发现DsArk.sys加载时,会读取操作系统驱动目录下的DsArk.sys文件,以获取该磁盘文件的时间戳、校验和
当BDMWrench.sys发现系统已加载DsArk.sys,就会比较内存中DsArk.sys的时间戳、校验和与从磁盘上读取的DsArk.sys的校验和、时间戳,判断二者是否相等:如果相等,BDMWrench.sys就执行指令修改函数。
在BDMWrench.sys执行指令修改函数之前,内存中DsArk.sys的指令如下:
0: kd> u f851e000+0x2725 l3
f8520725 ff15383d53f8 call dword ptr [f8533d38]
f852072b 3bc3 cmp eax,ebx
f852072d 7d14 jge f8520743
0: kd> u f851e000+0x9bc8 l3
f8527bc8 8bff mov edi,edi
f8527bca 55 push ebp
f8527bcb 8bec mov ebp,esp
在BDMWrench.sys执行指令修改函数之后,内存中DsArk.sys的指令如下:
0: kd> u f851e000+0x2725 l3
f8520725 83c408 add esp,8
f8520728 33c0 xor eax,eax
f852072a 90 nop
0: kd> u f851e000+0x9bc8 l3
f8527bc8 33c0 xor eax,eax
f8527bca c20c00 ret 0Ch
f8527bcd 83ec14 sub esp,14h
DsArk.sys的指令被修改后,会导致DsArk.sys的功能失效,其中包括DsArk的升级功能。
一旦磁盘上DsArk.sys文件升级后,操作系统驱动目录下的DsArk.sys文件校验和、时间戳与内存中DsArk.sys的校验和、时间戳不一致。如果BDMWrench.sys发生了升级,会再次执行针对DsArk.sys的指令修改函数,此时会根据磁盘上的DsArk.sys时间戳、校验和来设定需要修改的函数偏移地址,并依据此地址修改内存中DsArk.sys的指令。
由于BDMWrench.sys破坏了DsArk.sys的升级机制,导致磁盘文件DsArk.sys并未加载到内存中,BDMWrench.sys根本没有判断磁盘文件DsArk.sys是否已升级到内存中,修改的目标地址就是一个错误的地址。
2: kd> !chkimg -lo 50 -d !DsArk
b7f95bc8-b7f95bcc 5 bytes - DsArk+0x9bc8
[ 0c 8b d0 f7 d2:33 c0 c2 0c 00 ]
5 errors : !DsArk (b7f95bc8-b7f95bcc)
2: kd> u DsArk+0x9bc8 l3
b7f95bc8 33c0 xor eax,eax
b7f95bca c20c00 ret 0Ch
b7f95bcd 23550c and edx,dword ptr [ebp+0Ch]
这是一个蓝屏dump的崩溃原因,BDMWrench.sys修改了DsArk.sys偏移0x9bc8处的指令,导致用户电脑蓝屏。
2: kd> !analyze -v
*******************************************************************************
* Bugcheck Analysis *
*******************************************************************************
KERNEL_MODE_EXCEPTION_NOT_HANDLED_M (1000008e)
This is a very common bugcheck. Usually the exception address pinpoints
the driver/function that caused the problem. Always note this address
as well as the link date of the driver/image that contains this address.
Some common problems are exception code 0x80000003. This means a hard
coded breakpoint or assertion was hit, but this system was booted
/NODEBUG. This is not supposed to happen as developers should never have
hardcoded breakpoints in retail code, but ...
If this happens, make sure a debugger gets connected, and the
system is booted /DEBUG. This will let us see why this breakpoint is
happening.
Arguments:
Arg1: c0000005, The exception code that was not handled
Arg2: b7f95bcc, The address that the exception occurred at
Arg3: b1cce764, Trap Frame
Arg4: 00000000
Debugging Details:
------------------
EXCEPTION_CODE: (NTSTATUS) 0xc0000005 - 0x%08lx
FAULTING_IP:
DsArk+9bcc
b7f95bcc 0023 add byte ptr [ebx],ah
TRAP_FRAME: b1cce764 -- (.trap 0xffffffffb1cce764)
ErrCode = 00000002
eax=19327360 ebx=2001024c ecx=aba1024c edx=301373c6 esi=b1cce8a0 edi=fc5a6bba
eip=b7f95bcc esp=b1cce7d8 ebp=b1cce828 iopl=0 nv up ei ng nz na po nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00010282
DsArk+0x9bcc:
b7f95bcc 0023 add byte ptr [ebx],ah ds:0023:2001024c=??
Resetting default scope
STACK_TEXT:
WARNING: Stack unwind information not available. Following frames may be wrong.
b1cce828 b7f95fa5 9820a478 745b737e 00000034 DsArk+0x9bcc
b1cce844 b7f96059 b1cce8a0 b1cce864 00000008 DsArk+0x9fa5
b1cce870 b7f8fab3 b1cce8f8 b1cce8a0 89b79f78 DsArk+0xa059
b1cce90c 804f01f9 8b132f18 89b79f68 89b79f68 DsArk+0x3ab3
b1cce91c 80584232 8b132f00 892ec334 b1cceab4 nt!IopfCallDriver+0x31
b1cce9fc 805c04bc 8b132f18 00000000 892ec290 nt!IopParseDevice+0xa12
b1ccea74 805bca48 00000000 b1cceab4 00000040 nt!ObpLookupObjectName+0x53c
b1cceac8 a8924191 00000000 00000000 00000001 nt!ObOpenObjectByName+0xea
b1cceaf8 a8924203 0012e584 00000000 00000001 360boost+0x7191
b1cceb98 805779c8 0012e5e4 c0100080 0012e584 360boost+0x7203
b1ccebf4 8057a0d2 0012e5e4 c0100080 0012e584 nt!IoCreateFile+0x8e
b1ccec34 b7f1672c 0012e5e4 c0100080 0012e584 nt!NtCreateFile+0x30
b1ccec88 b2426912 0012e5e4 c0100080 0012e584 TSFLTMGR+0x372c
b1ccecf4 b3f3b826 0012e5e4 c0100080 0012e584 QQProtect+0x10912
b1cced34 805427e8 0012e5e4 c0100080 0012e584 bd0001+0x4826
b1cced34 7c92e514 0012e5e4 c0100080 0012e584 nt!KiSystemServicePostCall
0012e5dc 00000000 00000000 00000000 00000000 0x7c92e514
STACK_COMMAND: kb
CHKIMG_EXTENSION: !chkimg -lo 50 -d !DsArk
b7f95bc8-b7f95bcc 5 bytes – DsArk+0x9bc8 [ 0c 8b d0 f7 d2:33 c0 c2 0c 00 ]
5 errors : !DsArk (b7f95bc8-b7f95bcc)
|