Skype 10方通话

March 5, 2006

不,这次不是 Intel 专美了。

不久前大佬和 Skype 的合作协议(Skype Intel )让 Skype 专门为 Intel 的双核芯片“优化”,2.0 里可以允许最多10方的电话会议,其他厂家--当然圈子里一只左手都数得清楚数量--或者Intel自己的非最新双核芯片的机器都只能最多5方通话。再说清楚一点就是,目前只有Intel Centrino® Duo的笔记本,以及Intel® Pentium® D,Pentium Extreme Edition 和 Viiv 的机器才能享受最多十人的盛大聊天。后继动作正在双方计划中,比如除了语音,视频通话的优化,WiFi和WiMAX也是两家刀俎眼中的鱼肉。

不过前天,maxxuss 在他的blog上宣布,Skype 在任何X86机器上的10方通话已经搞定。回头看来,Skype 的哥们--或者合作伙伴Intel的哥们--也忒纯真,如果ID里有“GenuineIntel”,且至少有俩core,就10方,否则5方。Holy CPUID…

这里是详细说明和下载。maxxuss 发布了一个patch,用户用Skype官方下载文件安装或者升级Skype,然后用maxxuss patch过的skype.exe替换原有即可。

页面里有反汇编说明。检查CPU属性的代码返回几个数值,最关键的放在esi中--或许我们可以想象代码中的宏或者枚举-- 0 是 Intel CPU (“GenuineIntel”) ,至少俩core;1 是 Intel CPU (“GenuineIntel”) 但是单核;2 是备受排挤的 AMD (“AuthenticAMD”);3 是不知哪来的野货。所以思路就是想办法让caller 看到返回的 esi 是0。这部分关键代码那部分在加密过的代码段中,Skype也会用checksum或者hash检查完整性,所以maxxuss 的做法是把 patch 代码放入未用部分,然后调用patch,当然,call 指令要在非加密部分,并且在Skype的加密完成后,CPU/双核检查前,执行。哦,最后要cleanup。未用而且不会被检查的部分,文件头是最佳选择,patch用了0×400078 到 0×400100 的区域,然后通过调试器和trial-and-error 方法,maxxuss找到了一个合适的调用点,0xB7CC40。核心过程是,把这个冤大头地址上的指令换成call 00400078,这样就进入patch代码中;在patch中,把 caller 检查返回/输出值的关键部分,地址0x7CCCF1的指令替换成调用回自己,也就是回到0×400078,这样安插好自己人就做好了准备工作;把最开始被替换的0xB7CC40处指令还原;修改堆栈让这次call返回到0xB7CC40,执行原来代码,并且继续往下执行;到判断CPU属性,来到0x7CCCF1的时候,代码已经是先前被替换的call 00400078了;进入patch,if 一番,将被带绿帽的0x7CCCF1指令还原,修改esi成0;修改堆栈,返回后即执行原始的判断esi是不是0继而能不能10方通话的代码--此次大会就此可以胜利闭幕。至于如何让代码段可写,用kernel32.VirtualProtect 解决就行。

[tags]skype, voip, hack, maxxuss[/tags]

Tags: , , , ,

3 comments

AMD也可以使用Skype 10方通話功能…

Skype前些時候與intel簽訂的協議維持時間不久,就被maxxuss破解,目前已經可以在AMD電腦上運作,maxxuss除了對Macosx86的貢獻,Skype也不可忽視阿…

by Anonymous on 2006-03-05 at 8:28 pm. #

[...] maxxuss的blog (English) 刀枪Blue的blog (Chinese) [...]

by Zeal’s Blog » Blog Archive » 允许10方通话的skype patch on 2006-03-06 at 1:11 am. #

[...] via: 刀枪Blue [...]

by iThouGht - » Skype10人同时通话限制被黑客攻破 on 2006-11-24 at 1:56 am. #