这两天 360 和 QQ 围绕用户隐私问题展开了一系列口水战,本来我是不太关注,只是偶尔在休息时看看新闻报道。直到昨天对骂继续升级,以至于开始人身攻击,让我开始有些惊诧,也引起了我的注意。昨天特意去这两家的网站看了看,骂街的意味相当浓!但是有意义的信息却并不多,QQ 并没明确的说有没有窥探用户隐私,而是一味攻击 360,而 360 的申明一打开就看到“腾讯CEO马化腾身价近300亿仍在领取政府发放的住房补贴”,看来都是来者不善。
360 和 QQ 似乎更热衷于互相攻击,而并不在意用户的感受。而我既然无意中被引来围观这场骂战,并且不幸的在自己电脑上都有装过 360 和 QQ,所以决定自己动手弄清真相。
骂战的最近一个由头应该就是从 360 指责 QQ 窥视用户隐私开始的,我的电脑上也装了 QQ,隐私是否被 QQ 窥视确实是个严重的问题。试了一下 360 的隐私保护器,QQ2008 被报告扫描过 C:\WINDOWS 和 C:\Program Files 下的文件,行迹可疑。但是鉴于 360 和 QQ 正在打口水战,360 的报告自然令人怀疑。
看来需要自己动手寻找真相了。
QQ 在 Windows 平台上要扫描文件显然需要调用系统接口,在 Linux 平台上,分析程序调用了哪些 API,包括调用时的参数,用 strace 很方便,但是在 Windows 平台上没有类似的工具。于是我想到了 wine。在 Linux 上用 wine 来运行 QQ,然后利用 wine 的调试功能查看所有文件相关的调用。
环境:
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=10.04
DISTRIB_CODENAME=lucid
DISTRIB_DESCRIPTION="Ubuntu 10.04 LTS"
$ wine --version
wine-1.1.42
QQ 用的 QQ2008,从 http://download.tech.qq.com/soft/17/21/42698/index.shtml 下载。
至于 wine 怎么安装可以 google 一下 "ubuntu 10.04 wine qq",我参考了: http://mucid.me/2010/05/391.html
用 wine 启动 QQ,并把所有文件操作的调试信息保存到一个记录文件:
$ WINEDEBUG=+file wine "c:/Program Files/Tencent/QQ/QQ.exe" > /data/nua/qq2008_file_log 2>&1
替换掉 QQ 号码,最后得到 qq2008_file_log_without_id 用于分析。
让 QQ 运行 10 分钟左右,期间除了用鼠标停靠在好友头像上看好友信息外,不做类似收发文件、导出之类的操作。
根据 MSDN(http://msdn.microsoft.com/en-us/library/aa364419(VS.85).aspx?1288372964),FindFirstFileExW 是为扫描文件准备一个句柄,然后调用 FindNextFileW 遍历文件。通常来说,如果一个软件遍历它的安装和配置目录之外的目录,其行为和动机就很可疑。从日志来看,QQ 扫描了包括系统目录、默认的软件安装目录、开始菜单、桌面等目录,而这些目录跟他们在回应 360 的文章(http://tech.qq.com/a/20100930/000369.htm)中提到的_“当用QQ传文件、另存为、截图时都会出现保存文件的系统对话框,如果选择存在桌面上,那么对话框会显示桌面上应用程序的图标,此时系统会调用PrivateExtraIconW()以及CreateIconFromResourceEx()函数从exe文件里面读取图标来显示,而这两个函数内部会调用CreateFileW()”_显然有出入。该文中并没有提到 FindFirstFileExW 的使用场景和目的。当然,看起来 360 的隐私保护器也没有监视这个 API。
运行 grep FindFirstFileExW qq2008_file_log_without_id | grep -v "Tencent" 得到的部分结果:
trace:file:FindFirstFileExW L"C:\\windows\\system32" 0 0x151c96c 0 (nil) 0
trace:file:FindFirstFileExW L"C:\\windows\\system32\\termsv.exe" 0 0x151c96c 0 (nil) 0
trace:file:FindFirstFileExW L"C:\\windows" 0 0x151c74c 0 (nil) 0
trace:file:FindFirstFileExW L"C:\\windows\\system32" 0 0x151c74c 0 (nil) 0
trace:file:FindFirstFileExW L"C:\\windows\\system32\\termsv.exe" 0 0x151c74c 0 (nil) 0
trace:file:FindFirstFileExW L"C:\\windows" 0 0x151c96c 0 (nil) 0
trace:file:FindFirstFileExW L"C:\\windows\\system32" 0 0x151c96c 0 (nil) 0
trace:file:FindFirstFileExW L"C:\\windows\\system32\\termsv.exe" 0 0x151c96c 0 (nil) 0
trace:file:FindFirstFileExW L"C:\\Program Files" 0 0x151c96c 0 (nil) 0
trace:file:FindFirstFileExW L"C:\\Program Files" 0 0x151c74c 0 (nil) 0
trace:file:FindFirstFileExW L"C:\\Program Files" 0 0x151c96c 0 (nil) 0
trace:file:FindFirstFileExW L"C:\\users\\Public\\Desktop\\*.*" 0 0x151c854 0 (nil) 0
trace:file:FindFirstFileExW L"C:\\users\\Public\\Start Menu\\*.*" 0 0x151c854 0 (nil) 0
trace:file:FindFirstFileExW L"C:\\users\\Public\\Start Menu\\Programs\\*.*" 0 0x151c854 0 (nil) 0
trace:file:FindFirstFileExW L"C:\\users\\Public\\Start Menu\\Programs\\StartUp\\*.*" 0 0x151c854 0 (nil) 0
trace:file:FindFirstFileExW L"C:\\users\\nua\\Desktop\\*.*" 0 0x151c854 0 (nil) 0
trace:file:FindFirstFileExW L"C:\\users\\nua\\Start Menu\\*.*" 0 0x151c854 0 (nil) 0
trace:file:FindFirstFileExW L"C:\\users\\nua\\Start Menu\\Programs\\*.*" 0 0x151c854 0 (nil) 0
trace:file:FindFirstFileExW L"C:\\users\\nua\\Start Menu\\Programs\\StartUp\\*.*" 0 0x151c854 0 (nil) 0
结论:QQ 的确存在可疑的文件扫描,事先没有通知用户,也无法取消!并且在回应 360 的文章里刻意隐瞒!
贴给有兴趣分析的朋友: