5.0 SoftICE与Skype
Q:
启动Skype时报"Skype is not compatible with system debuggers like SoftICE", 然后就退出了。显然Skype检测到本机安装有SoftICE,尽管未启动SoftICE,Skype仍 拒绝运行。当初安装SoftICE确实是出于调试目的,后来VMware+SoftICE的解决方案 出台,几乎再未在本机启动过SoftICE。但要是为了Skype而卸载SoftICE,实在于心 不甘。
A: scz & hume 2005-07-13 15:00
曾经以为Skype只是简单检测NTice服务存在:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NTice
于是将NTice改名为_NTice,未能躲过Skype的检测。上Google搜了搜,有人说安装了 IceExt用了它的一个什么功能就可以躲过Skype的检测。lgx还建议我去找Netguy,用 他常用的那套隐藏SoftICE的办法。我装SoftICE根本就不是为了破解,从未想过要隐 藏SoftICE,现在临时抱佛脚怕是有很多后续麻烦,所以放弃了这个想法。
实在不甘心之余,用OllyDbg加载Skype,尝试着剁它。结果在貌似忠厚老实的hume同 学的指点下,用了10分钟左右简单剁掉了Skype启动时对SoftICE的检测,但我不确保 Skype没有后续检测啊。下面的记录仅为备忘之用,不是完整解决方案,如有问题, 勿找我麻烦。
我们修理的Skype.exe属性如下:
用OllyDbg加载Skype.exe,因检测到本机安装过SoftICE,Skype弹框告警。想想,有 可能用到这么几个函数:
user32!MessageBoxA user32!MessageBoxExA user32!MessageBoxExW
按Ctrl-F2重新加载Skype.exe。Alt-E调出"Executable modules"窗口,选中user32, Ctrl-N调出"Names in user32"窗口,分别选中MessageBoxA、MessageBoxExA、 MessageBoxExW并按F2设置断点。按F9运行,拦截住MessageBoxA。Alt-K查看调用栈 回溯,"Called from"栏显示Skype.00E7E8EA,查看该地址附近代码:
00E7E8D3 . E8 90B173FF call Skype.005B9A68 00E7E8D8 . 84C0 test al, al 00E7E8DA 74 1A je short Skype.00E7E8F6 00E7E8DC . 6A 00 push 0 ; /Style = MB_OK|MB_APPLMODAL 00E7E8DE . 68 A4F4E700 push Skype.00E7F4A4 ; |Title = "Skype" 00E7E8E3 . 68 ACF4E700 push Skype.00E7F4AC ; |Text = "Skype is not compatible with system debuggers like SoftICE." 00E7E8E8 . 6A 00 push 0 ; |hOwner = NULL 00E7E8EA . E8 F5A158FF call <jmp.&user32.MessageBoxA> ; \MessageBoxA
怀疑只需修改那个je指令即可。在0x00E7E8D8处按F2设置断点,按Ctrl-F2重新加载 Skype.exe。刚设置的这个断点在Skype.exe中,不在动态链接库中,重新加载后断点 仍在。按F9运行,断点命中,此时AL为0x01,在OllyDbg中动态修改AL为0,按F9继续 运行,发现Skype已经启动起来了。
既然如此,hume建议我尝试直接修改je为jmp:
LordPE->PE Editor->Skype.exe->FLC->VA:00E7E8DA->DO->Offset:00A7DCDA->74 1A 6A 00 68 A4 F4 E7 00 68->Hex Edit
在这里将74改为EB,保存后退出LordPE。现在双击Skype.exe,已经可以启动了。