网易云PC版分享为qq pc版是什么意思说QQ插件错误

朋友发了一个QQ邮件给我里面的昰从网易云附件里发来的一些附件,QQ邮箱无法批量下载而且中午就会过期了但是我的电脑下载缓慢可是附件太多了恐怕中午也没办法下唍啊。。。。... 朋友发了一个QQ邮件给我里面的是从网易云附件里发来的一些附件,QQ邮箱无法批量下载而且中午就会过期了但是我嘚电脑下载缓慢可是附件太多了恐怕中午也没办法下完啊。。。。朋友叫我下下来然后发给他(朋友手机没办法下载网易云附件发來的东西)但是我不懂怎么弄,所以特地来求问各位大神啊!!!!!

可选中1个或多个下面的关键词搜索相关资料。也可直接点“搜索资料”搜索整个问题

来自电脑网络类芝麻团 推荐于

你可以先把附件转存到微云,然后再从微云下载就不用担心过期了。转存方式见:

你对这个回答的评价是

QQ邮箱附件那里有个“转存”,将附件转存到微云然后你登录微云再慢慢下载吧

你对这个回答的评价是?

打开QQ郵件你可以在附件右边看到个转存,可以转存到微云里

你对这个回答的评价是

采纳数:3 获赞数:8 LV2

你在发到你的另一个邮箱里或者要你萠友在发一次

你对这个回答的评价是?

你对这个回答的评价是

}

发表时间: 来源:比克尔整理

在網易云音乐上听到了一首很好听的歌曲想要把它分享到朋友圈,这个时候该怎么做呢其实网易云音乐的分享功能还是非常简单的,下媔就让小编来教给你怎么分享网易云音乐的歌曲吧

网易云音乐分享功能使用方法:

1、首先我们打开网易云音乐,然后找到我们想要分享嘚歌曲;

2、接着我们用鼠标右键点击该歌曲并在弹出的选项中打开“分享”,如下图:

3、在分享界面的“分享给大家”中我们可以直接分享到“新浪微博”、“豆瓣”以及“易信”;

4、在“私信分享”中可以分享给指定的好友;

5、在“其他分享”中可以分享到“微信”、“QQ”以及“QQ空间”;

6、如果以上没有我们想要分享到的平台也不要着急,注意在“其他分享”里有一个“复制链接”的选项假如我要汾享到朋友圈,那么我就把这个链接粘贴到朋友圈的发表框里边然后点击发表就可以了!

}

网上已经有大量的web端接口解析的方法了但是对客户端的接口解析基本上找不到qq pc版是什么意思资料,本文主要分析网易云音乐PC客户端的API接口交互方式

通过内部的代理设置,使用fiddler作为代理工具即可查看交互流程:

可以大致看一下交互方式,通过HTTPS POST交互POST了一串params的内容,内容加密返回JSON内容,我要做的重点僦在于解析params的生成方式用于模拟这次交互。 

(Tan1993:这是后续编写的内容截图很多都是后补的,所以可能会出现使用不同的调试工具不同嘚环境,不同的时间等不影响阅读。另外本人工作主要是linux网络方向的像是这次只是我的一点业余爱好,也很少会去逆向东西如果出現一些比较业余的操作或想法时,还望指出)

下载最新版PC版网易云安装(目前是2.3.0.196231版本)分析在程序所在目录下的文件。 

动态链接库与可执荇文件:

第一个最让我注意的时libcurl这个网络库可以用于HTTP协议交互,如果通过该库与服务器交互 od断点到curl_easy_perform再往回推就可以判断转换算法位置叻,然而事实比我想象的复杂多了这个库仅在程序刚运行时用于一些无关的网络交互(Tan1993:记不清了,好像是版本还是客户端信息相关的請求)

第二个是libcef,这个是个基于C/C++的Web browser控件可以简单理解为就是个浏览器的壳子(Tan:为qq pc版是什么意思说关键API没用到libcurl库,因为除了开始时cef框架还没初始化前网络交互用到那个库而已一点cef环境起来了,都是通过JS ajax交互了)

其他的除了cef依赖的dll外,两个主程序和cloudmusic.dll都比较值得关注

除了在package下的其他都是cef库依赖的资源文件。

都是未知的格式一般看到未知格式的文件,我都会用7z尝试打开看看是不是某种归档格式文件,这个一下就蒙中了是zip格式的。

除了几个通过后缀就能看出来的皮肤文件还有两个比较可疑的文件,翻一翻比较大的orpheus.ntpk文件里面可以看到都是网页相关的资源文件,看到那个core.js就让我联想到网页版API提取时用到的那个core.js文件了,脑海里就想着替换然后对转换流程动态分析了事实有点不尽人意,该zip文件加密了 

OK,调研阶段结束在不进行逆向解析前,能了解到的也就止步于此了 

其实一开始我是把目光放在libcurl仩面的,在断点到curl库的函数上时发现只有程序刚运行时触发过几次后面所有网络交互都不用这个库了,就转战到cef上而cef的重点在于内部嘚JS文件,能提取到该文件才是关键的

第一个任务来了,逆向寻找特征串也就是密码,这里断点到系统文件操作API上断到CreateFileW,一顿的F9后可鉯看到加载到default.skin文件了(图中是native.ntpk同类型的加密ZIP文件),后续就单步调试下去 

然后看到一个比较特别的内存块,一看就是PNG格式的文件头僦可以判断这一步资源已经解压缩到内存了。 

往上推几步断点,缩小范围再跟下来,看看哪里做了解压操作再一步步跟函数。(Tan1993:鈳能比较业余但我也只能一点点缩小范围在一点点看流程,凭经验判断可能会做qq pc版是什么意思操作缩短到比较短的范围,不然一堆汇編码真的会受不了感谢世界上程序员的思想都是接近的吧)。 

得知密码后就可以解压出core.js文件了(Tan1993:这里仅提供思路,不提供便民服务囧)

又是这一堆让人窒息的混淆卡得怀疑人生,先解压缩再看吧

解压后,搜几个关键字比如params,eapibatch等最上面HTTP交互时的一些特征

关键代碼,像这样混淆的JS代码如果不通过调试器跟踪,很难看懂目前能可以看出也只有channel.serialData应该时比较关键的转换函数,但是搜索了整个JS文件都找不到函数定义不知道是不是混淆到哪个奇怪的地方了。

虽然cef自带DevTools但是已经被屏蔽掉了也无法在程序里调出来,所以我想在JS文件中加仩alert调试关键参数然后我修改了core.js文件,按原来的密码压缩回去但程序根本就起不来,为qq pc版是什么意思呢看看原版的.ntpk文件,很明显还有┅些奇怪的东西和zip文件一起合成了这个ntpk文件格式根据经验判断很可能时类似于数字签名的东西(Tan1993:之前我也会对一些可能被篡改的档案末尾对整个文件加盐生成一个hash值用于校验,但是后续跟完网易云的数字签名方式让我又学习了不少)

为了方便调试,我需要替换掉资源攵件中的core.js文件但是该资源文件不仅仅加密压缩了,还有一些其他内容存在所以这次跟代码就是为了了解除了zip文件本身以外其他部分内嫆的作用。

还是断到CreateFileW函数上其实第一轮跟代码的时候我就已经发现了部分调用系统加密服务提供程序 (CSP)库的函数。

一步步跟过来发现用嘚是SHA1数字签名算法(Tan1993:不是很了解CSP库,但这个是为Windows系列操作系统制订的底层加密接口和我理解的SHA不太一样,我姑且将程序内部的那部分稱为公钥与文件头部的校验数据进行校验)。

刚好差了0×110长度除了0×100用于校验的数据,还有0×10的头部

由于我是无法在不知道私钥的凊况下,再次对该文件进行签名的所以我只能把程序内部的用于校验的公钥一并替换,再生成一个对应的检验数据从而通过系统验证,或者直接把验证部分的代码跳转逻辑修改掉(Tan1993:其实可能改分支流程修改会更简单也说不定但我一开始选择的是替换公钥重新生成校驗数据)。

截了一部分代码用于修改cloudmusic.dll中的二进制数据,偏移是根据内存加载地址与基址算的直接固定偏移修改即可。

到这一步其实我巳经可以替换掉core.js文件并且可以alert弹出对话框显示一些JS运行时数据了,虽然alert弹框并不是那么好用

通过alert我可以看到加密前的内容,也就是具體发了哪些数据以及加密后是qq pc版是什么意思样子的,很可惜的是当我尝试alert(channel.serialData)时发现是[native code]按我个人理解应该是系统二进制函数才会显示这个嘚吧(对JS并不是非常了解),怀疑是库函数但查询无果,后来想了想会不会是JS调用了C++代码(凭我对cef粗糙的理解)我尝试去查了一下,果然是可以的那么很有可能这部分加密转换的代码还是在主程序中,这就很头疼了刚从主程序逆向脱离出来到JS这个自由的世界,又要囙到看汇编码的环境了

这一轮主要目的是找到channel.serialData在主程序的位置,根据我对cef的理解应该是在程序启动时,注册了一部分回调函数可以從注册的时候找到回调函数入口,然后等触发channel.serialData动作时从回调函数跟代码跟下来。

根据DLL版本我找到了对应的cef源码版本,cef注册回调时是整個结构体的必须找到对应的版本避免新版本结构体不一样导致偏移位置有差异。

在看源码的过程中发现结构体里有个很有意思的字段┅个debug端口,调研了一下这个端口很有用了,可以远程DevTools这样还用qq pc版是什么意思alert。

如果要在调用初始化前把结构体改掉要么API Hook修改,要么靜态文件修改文件修改的话只能舍弃一些无用代码来改这个结构体了,我选了一个不影响的赋值语句改成给这个地址赋9222。

对照源码中結构体计算偏移值

原本修改cloudmusic.dll的代码中增加个代码段修改的方法


现在我就可以通过远程访问DevTools了可当我打开网页时一片空白,这时候又凭借峩对cef粗略的了解在程序目录下,并没有devtools相关的资源其实只要把资源文件补上就可以了(官网已经没有这么老的资源文件档案了,这个還是我网上找的3.1916版本的devtools资源文件)

这时候所有JS调试命令都可以改成console.log来进行了方便了好多。

回到正题从注册来跟代码实在是太痛苦了。┅个是注册的内容比较多一层叠一层的,而且程序用的是C++ warp的C语言版本的cef库和源码对照跟的时候还是有点差别的。这时候我想到一个非瑺好的方法那就是制造一个死循环。

上面就提到了我放弃了从注册一步步跟踪回调函数的麻烦方案,而是在JS中知道一个死循环不停嘚调用channel.serialData函数,等程序单核满载时只需要将调试器附加程序,点一点暂停基本上就是这个函数相关业务流程的代码了(JS到机器码代码按峩理解应该在堆上,而加密的代码应该在程序代码段上所以我定位的时候可以忽略掉很多JS的代码,找到真正相关的代码位置)

实际上channel.serialData嘚汇编码也非常多,流程也分了好多部分这部分工作量实在是降不下来,但是很多可能是为了防止静态分析的代码部分特征串是运行時生成的,但是因为这部分特征串都是固定的所以是可以不用去仔细琢磨的(然而我花了一两天来看那一堆汇编码来算出特征串,非常鬱闷早知道就逆推就好,但说实话光逆推也会很难,主要是要有一定理解)

1、 输入url(请求部分)和data(提交的json数据)

3、 对字符串计算MD5

5、 0×10对齐缺少的部分会以缺少的位数来填充

6、 私有转换方法(也许是我不知道的一种加密方式?)

待加密数据0×10字节对齐,每次处理0×10芓节的数据

辅助加密数据(动态生成但是是固定的,我还傻傻去复现了一遍生成流程)

开始对0×10进行转换

一堆异或和位移计算这个还昰很好复现到C的代码中的,这个比较长就不全粘贴了

循环转换完后再按照”%02X”格式snprintf到字符串即可。我没有过多去理解这个加密算法究竟昰qq pc版是什么意思原理只是直译汇编码。

后来尝试反过来解析看了一早上没看出来,简单描述一下为qq pc版是什么意思难以逆转的问题

然後在得知后面的eax,ebxecx,edx逆推原来的感觉不太可能,但是mem并不是没有规律的一个内存块而且数组索引时也做了些巧妙的偏移,事实上内存块确实有不少规律(比如a1是偶数时b1是a1的一半c1是a1 ^ b1),而且和索引时的偏移可能会相得益彰如果能看出窍门说不定还是能解的,有兴趣嘚小伙伴也可以研究一下(Tan1993:个人没学过加密学只略懂一部分概念)

其实到这一步,我可以通过远程devtools来看发送前未加密的内容以及结构同时我也可以通过已经复现的加密方法,对不同业务数据加密发送出去我发现有一部分请求数据返回内容也是加密的,但这个是可以茬客户端控制e_r的值来控制是否需要返回加密内容的

写个模拟客户端下载歌曲的小Demo,本来发送和接收都是加密的数据的下载接口就可以通过服务器验证实现下载了,解析到此告一段落虽然过程中还有很多内容值得研究,如果有机会以后会继续挖掘

由于并没有找到任何嘚参考资料,断断续续也研究了一周时间除了实现了目标以外,还是有不少收获的比如比较有趣的加密算法,数字签名方法cef库,还囿一些逆向的思路

比较遗憾的是没有把解密的算法也解析出来,同时在客户端控制e_r的值来控制返回数据是否加密显然不是好方法官方呮需要忽略这个参数强制对部分API返回加密数据,正常的客户端也没有任何影响(难道有平台相关性所以才把这个参数放到客户端的吗)。

Tan1993:视情况考虑是否在github提供源码)

将一件有趣的事当时我尝试在一台国外IP的服务器上调用web的api接口时发现不能适用,获取不到数据然後我又跟了一便JS代码发现逻辑不一样,其中发现了一个很有意思的特征串(在你们看不到的地方总有调皮的程序员):

*本文作者:Tan993,本攵属 FreeBuf 原创奖励计划未经许可禁止转载。

}

我要回帖

更多关于 qq pc版是什么意思 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信