一个发现多年现在还未修补的bug

# 鬼仔:今天把theme从三栏改成了两栏,又修改了一些细节。两栏的文章阅读区域更大,不知道大家喜欢三栏还是两栏。

作者:zodiacsoft

从来就没有公开过未修补的bug,庆祝今天中午吃到一个很甜的砂糖桔,公开一个05年发现现在还没有修补的中文windows2003的bug。
典型问题出现在quser.exe。query user也是一样的。

main调用DisplayUserInfo,函数开始是:

.text:010017E6 ; __stdcall DisplayUserInfo(x, x, x)
.text:010017E6 _DisplayUserInfo@12 proc near            ; CODE XREF: _main+165 p
.text:010017E6
.text:010017E6 DefaultChar      = byte ptr -10C8h
.text:010017E6 arglist          = byte ptr -10C4h
.text:010017E6 var_10C0         = word ptr -10C0h
.text:010017E6 var_107C         = dword ptr -107Ch
.text:010017E6 var_1064         = dword ptr -1064h
.text:010017E6 cchTime          = dword ptr -105Ch
.text:010017E6 WideCharStr      = word ptr -0C3Ch
.text:010017E6 var_C0C          = dword ptr -0C0Ch
.text:010017E6 var_C04          = dword ptr -0C04h
.text:010017E6 var_804          = dword ptr -804h
.text:010017E6 var_404          = dword ptr -404h
.text:010017E6 var_4            = dword ptr -4
.text:010017E6 arg_0            = dword ptr 8
.text:010017E6 arg_4            = dword ptr 0Ch
.text:010017E6 arg_8            = dword ptr 10h
.text:010017E6
.text:010017E6                  mov      edi, edi
.text:010017E8                  push     ebp
.text:010017E9                  mov      ebp, esp
.text:010017EB                  mov      eax, 10C8h
.text:010017F0                  call     __chkstk

开头是一段检查用户状态的,都很简单,到这里的时候

.text:01001918                  push     offset a20s15s ; "%-20s %-15s "
.text:0100191D                  push     eax              ; FILE *
.text:0100191E                  call     ebx ; __imp__fprintf
.text:01001920                  add      esp, 10h
.text:01001923                  push     1
.text:01001925                  push     dword ptr [ebp+arglist] ; arglist
.text:0100192B                  call     _StrConnectState@8 ; StrConnectState(x,x)

调用了utildll.dll的一个函数。我们来看看中文win2k3 sp2 all hot fix下面的这个函数:

.text:5A9C2C5A ; __stdcall StrConnectState(x, x)
.text:5A9C2C5A                  public _StrConnectState@8
.text:5A9C2C5A _StrConnectState@8 proc near
.text:5A9C2C5A
.text:5A9C2C5A String2          = word ptr -204h
.text:5A9C2C5A var_4            = dword ptr -4
.text:5A9C2C5A arg_0            = dword ptr 8
.text:5A9C2C5A arg_4            = dword ptr 0Ch

开始是一些初始化的,然后在处理字符串的时候:

.text:5A9C2D33                  lea      ecx, [ebp+String2]
.text:5A9C2D39                  push     ecx              ; lpBuffer
.text:5A9C2D3A                  push     eax              ; uID
.text:5A9C2D3B                  push     offset ModuleName ; "UTILDLL.DLL"
.text:5A9C2D40                  call     ds:__imp__GetModuleHandleW@4 ; GetModuleHandleW(x)
.text:5A9C2D46                  push     eax              ; hInstance
.text:5A9C2D47                  call     ds:__imp__LoadStringW@16 ; LoadStringW(x,x,x,x)

这个时候,倘若有一个远程登录的用户登录后关闭了远程桌面,uID应该是0x135,这时候调用LoadStringW的时候,会返回一个unicode字符串”\x31\x55\x47\x72″。
在这种情况下对应的资源Disc,从上下文来看是”Disconnected”的缩写,因此对应中文本来该是“断开”,但是资源中,也就是上面的那个unicode字符串”\x31\x55\x47\x72″,却是“唱片”,这是一个很明显的bug。
顺便说一句,在英文版中,utildll.dll不存在这个问题。

免费公布了一个bug,大牛蛙同学我们俩是两块七分熟的牛排,就不好意思叫你请客了哈~
e1565913fea615225aaf53f0

相关日志

楼被抢了 10 层了... 抢座Rss 2.0或者 Trackback

  • vax

    支持两栏 。。 嘎嘎

  • Neeao

    我FireFox浏览错位了,分辨率1280×1024,再整整吧。

    • 鬼仔

      我FF下调的啊,我这里没问题,分辨率倒是没关系,固定宽度的。

  • 9

    倒,鸡肋中的鸡肋
    八卦中的八卦

  • google_sunzn

    还是2栏的好点,不乱!

  • sExYboy

    agree with sunzn
    这个BUG哇,自己玩玩 呵呵

  • 听宇

    确实有这个问题,当时我查询在线用户,老是显示唱片,我还奇怪呢,以为他在线听歌。

  • 可酷可乐

    晕一下.几年前就发现了.一直以为是MS的特色呢.

  • junojeny

    我想要你的theme

  • junojeny

    能否发份给我,谢谢!

发表评论