各位召唤师大家好,
在最近我们逐步替换老客户端的过程中,有很多玩家反馈在启动新客户端(下称LCU)时会出现闪退的情况,腾讯和拳头的工程师就这个问题进行了排查和分析,现将目前所了解到的情况,引起这个问题的原因以及解决方案作一个简单的梳理,希望可以让大家更加清楚如何解决相关Bug的问题。下文中有诸多技术术语,大家可选择直接跳过看后面的解决方案。
注:本文只针对LCU闪退作出说明,其他的游戏问题不在讨论范围内(比如选英雄后的黑屏等)。
当玩家无论用TGP还是官方客户端启动LCU后,会出现弹出英雄联盟英文LOGO(League of Legends)后程序马上退出的问题。玩家看到的类似这样(注意是英文的LOGO):
如何确定你也是这个问题?
玩家可以通过查看以下日志来判断你存在的问题是否属于本文讨论的问题:
C:\Program Files\Tencent\League of Legends\英雄联盟LCU\Game\Logs\LeagueClient Logs\2017-05-15T15-43-32_6200_LeagueClientUx.log
注意,日志的路径和你安装客户端时选择的路径相关,另外目录下有很多日志文件,注意查看LeagueClientUx结尾的日志文件
打开日志文件后如果你发现类似这样的日志,证明你的客户端问题属于本文讨论范围:
| ERROR| ClientWebSocketTransport: OpenSSL error: error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed
问题原因
经过查证,简单来说导致这个问题原因是玩家的系统中存在一种或多种恶意软件,这种恶意软件会尝试在程序发起安全连接时替换掉合法的SSL安全证书。而LCU的安全机制保证了在SSL安全证书被替换后拒绝启动,所以造成了玩家所看到的闪退现象。
详细原理分析
LCU大厅是多进程的, LeagueClient.exe(以下简称Client)和LeagueClientUx.exe(以下简称Ux)是两个主要进程,其中Client启动时会搭建一个WebSocket服务器,等待Ux启动后连接上来,供之后的数据传输用。此WebSocket服务是建立在SSL连接基础之上的。
(有关SSL连接的步骤和操作系统根证书相关的内容,请自行搜索,本文附录中有简单介绍)
问题机器的Windows启动后会加载一个驱动(红色显示的):
该驱动会设置5个内核过滤器:
其中TcpFltnetfilter2可以过滤操作系统内所有TCP连接,木马在检测到有SSL连接时,会在其Server hello环节,替换掉传输过来的证书。
原本Client提供的证书是:
证书的使用组织为Riot Games,而木马加载后,Ux接收到的证书变成了:
证书名字为Sample CA 2,此证书是木马伪造的,可以看到证书的有效期与原证书完全一致。
同时在操作系统的根证书存储区,也可以看到一个木马作者自己签发的根证书:
将此根证书添加进操作系统的根证书存储区的效果是,浏览器在接收到伪造证书后,可以通过认证,然而Ux进程在校验服务器证书时,使用的是自己签发的CA证书
因此伪造的证书无法通过校验,导致Ux拒绝连接:
000003.845| ALWAYS| Trying to connect to app process.
000004.509| ERROR| ClientWebSocketTransport: OpenSSL error: error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed
000004.509| ERROR| Unable to connect to app process.
000004.509| OKAY| Releasing browser process.
000004.509| OKAY| Shutting down CEF.
000004.875| OKAY| Exiting ux.
解决方案
解决这个问题有多个解决方案,需要玩家自行决定哪个方案更适合自己的情况。如果选择的方案修复不成功,可能需要选择其他方案进行尝试。
文案:方案一
如果你的电脑里面本来安装了腾讯电脑管家等杀毒软件,请使用“闪电查杀”功能,电脑管家可以强力清除恶意软件和内核病毒。查杀后可以尝试启动LCU看是否还存在闪退。如果还是会闪退的话可以加入电脑管家问题解决群 320983904寻找管理员帮助。
方案二
如果你没有安装腾讯电脑管家等安全软件,可通过链接(http://guanjia.qq.com/product/sp 。。。 _index.daohang_yxjs)下载最新版电脑管家,直接使用闪电查杀即可解决问题。如有其它问题可加入电脑管家问题解决群 320983904寻找管理员帮助。
方案三
这个方案是最保险但是最麻烦的,如果上述方案都无法查杀到问题的恶意软件,重装windows是最后而且最保险的方案。但我想强调一点是,在很多的案例里面恶意软件恰恰是来自于玩家安装的windows。市面上很多版本的盗版windows,生来就带有恶意软件,所以有些玩家不断重装这些有问题的windows系统都无法解决问题。所以我建议大家从微软的官方MSDN下载windows的安装包并用官方方法激活。
问:如果我电脑系统有问题为什么老客户端没事,就新客户端事儿多?你们这是甩锅了吧
答:在上面的原理介绍里面已经提到过,新的客户端使用的技术和安全机制导致了对安全证书的依赖,可以说LCU对不安全的环境更加敏感,所以会出现老客户端没事,LCU就闪退的情况。出现闪退的问题,我们自己第一时间肯定是怀疑LOL的程序有问题,但经过多天的查证并且有很多玩家的配合,这些案例让我们比较有信心是恶意软件导致的闪退问题。
问:我发现windows注销再登入就可以用LCU了,我不用上面这么麻烦的方案可以么?
答:我们目前还不清楚为什么注销再登入windows会导致恶意软件的证书替换会失效,导致LCU可以暂时使用上,但你明知电脑里面有恶意软件,甚至可以监听你所有的网络连接,这样都不想办法杀一下么?你可以在网上查到这种恶意软件偷取各种银行密码、支付宝密码的案例比比皆是,还是安全点好。。。
问:你们会出一个LOL的版本修复这个问题么?
答:我们可能很难通过LOL版本来解决系统中恶意软件的问题。如果这个问题是我们可以主动从LOL版本解决的,我们一定会用最快的速度进行解决,但很不幸这个不是LOL本身可以解决的问题,所以还是要麻烦各位清理或重装有恶意软件的windows系统,这是最根本的解决办法。
问:我按你们方案三里面说的重装了windows系统还是不行啊!!耍人的吧?
答:就如方案三里面说的,如果你重装的windows是那种网上下载的Ghost镜像之类的盗版系统,很大机会这些windows镜像本来就被植入了恶意软件,无论你重装多少次都会有问题。所以我们强烈建议大家去微软的MSDN官网下载纯净的微软官方windows安装包,这样避免了重装也会遇到闪退问题。
如果大家还有更多关于新客户端闪退的问题,我们可以在此贴下继续交流沟通。
多谢,
-StickyRiceyy 更多资讯请关注韩服lol