转自程序作者BLOG
接到用户反馈,说在打开插件管理页面的时候SREng崩溃。经查,确认是由于用户安装了 Tiny Personal Firewall 2005 v6.5.126 软件所致。
Tiny Personal Firewall 2005 v6.5.126 是一款 CA 出品的个人安全软件。这个软件对 LoadLibraryExA 和 LoadLibraryExW 进行了 Win32 API HOOK操作。
但是由于 Tiny Personal Firewall 2005 v6.5.126 自带文件 UmxSbxw.dll 的BUG,当SREng调用LoadLibrary的时候,由于LoadLibraryExA 被 UmxSbxw.dll 所 HOOK,造成代码流程进入 UmxSbxw.dll 模块里面。由于 UmxSbxw.dll 模块在偏移 UmxSbxw+2485 的地方存在一个越界访问,最终造成 SREng 在调用 LoadLibrary 的时候发生崩溃。从而导致 SREng 整个进程崩溃。
相关的完整信息如下所示:
FAULTING_IP:
kernel32!MultiByteToWideChar+240
7c809e9c 8a08 mov cl,byte ptr [eax]
EXCEPTION_RECORD: ffffffff -- (.exr ffffffffffffffff)
ExceptionAddress: 7c809e9c (kernel32!MultiByteToWideChar+0x00000240)
ExceptionCode: c0000005 (Access violation)
ExceptionFlags: 00000000
NumberParameters: 2
Parameter[0]: 00000000
Parameter[1]: 7dc9174e
Attempt to read from address 7dc9174e
DEFAULT_BUCKET_ID: BAD_PTR_DEREFERENCE
PROCESS_NAME: SREngPS.EXE
ERROR_CODE: (NTSTATUS) 0xc0000005 - The instruction at 0x%08lx referenced memory at 0x%08lx. The memory could not be %s.
READ_ADDRESS: 7dc9174e
BUGCHECK_STR: ACCESS_VIOLATION
LAST_CONTROL_TRANSFER: from 5ff02485 to 7c809e9c
STACK_TEXT:
01ccef38 5ff02485 00000003 00000000 7dc9174e kernel32!MultiByteToWideChar+0x240
WARNING: Stack unwind information not available. Following frames may be wrong.
01ccef5c 5ff0a0a7 01ccef74 7dc9174e 00000001 UmxSbxw+0x2485
01cceff8 5ff0a255 5ff20f18 5ff20efc 00fb8e50 UmxSbxw+0xa0a7
01ccf024 5ff027ee 01480000 5ff20f18 00000001 UmxSbxw+0xa255
01ccf278 7c801d6e 5ff24f14 7ffddc00 00000000 UmxSbxw+0x27ee
01ccf290 7c801da4 01ccf970 00000000 00000000 kernel32!LoadLibraryExA+0x1f
01ccf2ac 004484d4 01ccf970 b3c5f037 01ccf970 kernel32!LoadLibraryA+0x94
01ccf888 7c935a00 01ccf8d4 00000000 01ccfac4 SREngPS!CPluginCtrlDlg::CallInitPlugin+0x74
01ccf2f4 00000000 00000000 00000000 00000000 ntdll!RtlDosApplyFileIsolationRedirection_Ustr+0x346
STACK_COMMAND: ~7s; .ecxr ; kb
FAULTING_THREAD: 00000110
PRIMARY_PROBLEM_CLASS: BAD_PTR_DEREFERENCE
FOLLOWUP_IP:
UmxSbxw+2485
5ff02485 ?? ???
SYMBOL_STACK_INDEX: 1
FOLLOWUP_NAME: MachineOwner
MODULE_NAME: UmxSbxw
IMAGE_NAME: UmxSbxw.dll
DEBUG_FLR_IMAGE_TIMESTAMP: 43099a48
SYMBOL_NAME: UmxSbxw+2485
FAILURE_BUCKET_ID: ACCESS_VIOLATION_UmxSbxw+2485
BUCKET_ID: ACCESS_VIOLATION_UmxSbxw+2485
Followup: MachineOwner
代码流程:
SREng 在 SREngPS!CPluginCtrlDlg::CallInitPlugin 的地方调用了系统的 LoadLibraryA Win32 API,然后 LoadLibraryA 调用系统的 LoadLibraryExA Win32 API,由于 LoadLibraryExA API 被 HOOK,造成了在 LoadLibraryExA 里面调用了 UmxSbxw.DLL 里面的代码。不幸的时候由于 UmxSbxw.DLL 的BUG,导致 UmxSbxw.DLL 发生崩溃并影响到 SREng 进程的稳定性。
小结:这个问题不是由于 System Repair Engineer 造成的。
--------------------------------------------------------------------------------
受影响的产品版本:
System Repair Engineer 2.3
System Repair Engineer 2.2
System Repair Engineer 2.0 RC2
--------------------------------------------------------------------------------
Smallforgs 提醒您:如果你安装了 Tiny Personal Firewall 2005 v6.5.126,请暂时不要使用 SREng 插件功能,或者卸载 Tiny Personal Firewall 2005 v6.5.126 以后再使用插件功能。否则 SREng 会出现由于 Tiny Personal Firewall 2005 v6.5.126 的 Win32 API HOOK 的 BUG 造成的崩溃现象。
Smallfrogs
2006.12.27