开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 11112|回复: 10
收起左侧

[技术专题] 小万学逆向第三期:网易云音乐的AES和RSA算法

[复制链接]
结帖率:100% (2/2)
发表于 2022-8-20 19:42:45 | 显示全部楼层 |阅读模式   山东省德州市
学习网址:https://music.163.com/

依然还是熟悉的流程,打开抓包软件,输入账密登录,抓包,可以看到这个login包只有两个参数,那么一看就是加密后的,这一期主要讲解这两个参数的加密方法
第一张.png
两个加密参数,分别是params  和 encSecKey,我们直接打开F12,搜索一下第一个参数params,搜索出来的数量不是很多,我们全部下断点,在登录一下看看会不会断下来
第二张.png
下完断点再去登录,发现在这个地方断了下来,而且看了一眼参数,看的第一个参数我就看到了我输入的phone,那么可以断定加密就是在这个地方了,
o.encText = a(e, r),
o.encText = a(o.encText, i),
o.encSecKey = c(i, t, n)
看下代码,是不是看到了一个很熟悉的参数,我们的第二个加密参数encSecKey直接就出来了,  encSecKey = c(i, t, n),三个参数,调用C函数,我们先一步一步分析,从第一个开始看
,鼠标放到上面就可以看到a是我们的原文"{"countrycode":86,"phone":"17515111111","password":"84610bd0b6bdfe4a6aae99a7c76fc78f","rememberLogin":"true","secureCaptcha":"CN31_OG-sNATnDdXNNpB-V-xCisIL9vYOT4c47hgD.OjRqewkPSC0ENs1_bAr8mdS4f-ePFTNWPuygyvXAdFGSMM.siufv5.QV0B97Y116WCtCbefUO5t5s1S-2NJ0ylxA6l7xBItsXsYlfl7I4uMo1MlrKqavioJ8OcPy0VfpmWVXL21-a9FxBmSxOCqArv86caGW0wjFSrWYUtpQBMZmePIZGs74EmMfusvcBbeXcgG1YsSSLv7wJg5OPGv7d_7WLXx-Ahih2kROK6XfqI7aeAvMFtnRApU1DpL.6t2aex_qdJCAMhX.aEdrY6vH_Fp05w4DVUanQzdFOynyuvOx6OyHstCEFbFj2hNEVatqlFDgPftF0qsmIKvEbQU7lL9few9mZD6SkcMvfeLWhbpSs8noIXOe-CFiiNXOlyaKZXuM-NDlLjXoOEGKqtTtdFVdK85IX9nREwTlwA.b_h0nEaYpySAEFGfhJLSHF-RjZG4Tor-YWoHwu.rzQd_Vxm3","checkToken":"9ca17ae2e6ffcda170e2e6ee8aea4fa6878d86c725aca88ba2c14b828e8bb0c4608ff58390f252a98c9da2ea2af0feaec3b92a93b1b694c95bb687f88fcc4b969f9bb3d14e948e9daff143b4eabbd9b46d88baee9e"}"
里面的参数,phone就是我们输入的账号,没有发生改变,看第二个参数名password,那么就是我们的密码了,只不过是加密后的,我们上一期讲过,32位的特征是什么?于是我直接打开我们的调试工具去测试一下。
第三张.png

直接输入了我们的明文密码,看着这生成结果,我陷入了沉思~~~怎么也不加个key呢,真没技术含量,不过也好,我们可以节约时间去找这个函数了,到时候直接调用加密库就好了。
然后看下其他函数secureCaptcha这一个是我们的wy滑块的返回结果,不用多分析了。后面的checkToken,多次抓包发现是一个固定值,那么我们可以直接忽略他了。我们继续研究刚刚的加密地点o.encText = a(e, r),,熟悉的手法,鼠标放到a上,跟进去
function a(e, t) {
            var n = r.enc.Utf8.parse(t)
              , t = r.enc.Utf8.parse("0102030405060708")
              , e = r.enc.Utf8.parse(e);
            return r.AES.encrypt(e, n, {
                iv: t,
                mode: r.mode.CBC
            }).toString()
        }

我直接一眼看懂了,这也太明显了吧。下次请混淆一下! 直接看到了我们的加密方式,这地方可能会有一些基础不稳固的觉得只能看懂90%,那么我来解释一下吧。
看到了AES.encrypt,说明这个地方的AES的加密过程,同理以后如果看到AES.decrypt,那么就是解密过程。 mode: r.mode.CBC这个函数说明了他的加密方式,是CBC的加密方式,
CBC需要传入两个加密条件,ker和参数Iv
EBC需要传入一个加密条件,key-----------------这两句请记住
既然是两个条件,但是只传入了两个参数,其中一个是需要加密的数据,那么也就是说只传进来了一个参数,那么肯定还有一个,
t = r.enc.Utf8.parse("0102030405060708")
这地方是什么东西,为什么会有0102030405060708这么的一堆数据,看不懂看不懂,那么我们就把他当作是另一个加密条件吧.[手动滑稽]

好了,废话不多说,继续讲解:首先这个函数传进来了两个值,第一个是我们的明文e,也就是我们明文(需要加密的数据),第二个参数t,在外面o.encText = a(e, r)这一步的时候可以看到,他是一个固定值0CoJUm6Qyw8W8jud。这是通过多次测试阅读代码得知的
第四张.png
通过上面是数值,我们可以看出,这个a函数确定就是加密点了
那么我们第一条代码也可以解释出来了,
o.encText = a(e, r),
参数encText=AES.CBC(明文,固定值0CoJUm6Qyw8W8jud),调用加密库试一下,确实就是跟上面图的结果是一致的。
接下来,继续看第二条o.encText = a(o.encText, i),
还是调用这个a函数,只不过第二个值变了,而且多次测试,发现这个值i是每次都会发生改变的,那么我们找一下他的生成方法
i = function(e) {
                    for (var t, n = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", r = "", o = 0; o < e; o += 1)
                        t = Math.random() * n.length,
                        t = Math.floor(t),
                        r += n.charAt(t);
                    return r
                }(16)

就在代码上面,看到了i的值是通过这个函数生成的,此函数就是一个随机生成16位字符的函数,我们也可以直接随机,或者调用这个js。
那么第二条解释:
o.encText = AES.CBC(第一步的加密结果,随机值i)                  //注意这个地方随机值i后面还是要用到的


接下来就是我们的第二个参数o.encSecKey = c(i, t, n)
是通过调用c函数进行的,我们首先鼠标放到上面看下它的值是什么
i="agGpqf9nOgpKy8k4"   //这边i是我们的随机值,这个地方就进行传入了
t="010001"
n="00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7"
这边记录下这三个值,然后追踪函数c

function c(e, t, n) {
            return o.setMaxDigits(131),
            n = new o.RSAKeyPair(t,"",n),
            o.encryptedString(n, e)
        }
发现c是一个RSA加密,还是基础的代码,这边不懂的小伙伴就多联系一下,时间久了就可以一眼看懂特征了。
那么调用方式知道了,我们就直接打开调试工具运行一下
第五张.png
这边运行提示o未定义,直接就改写一下,把o去掉,结果就是我图中的代码了,那么我们肯定要找到里面的三个函数,那么直接搜索一下,开始扣代码,js技巧:缺啥补啥
最终得到我们所需要的全部js代码,那么就拿去调用一下就可以了。
第六张.png

好了OK,今天的两个加密方法就全部出来了,我写了一个易语言的例子,也顺便给你们打包了,js也在里面。

易语言的自用模块直接删掉就以了  xx_替换引号 (data)  这个自己改一下,就是单引号替换双引号

然后那个wy滑块我就不发布了,给你们替换成了输入框的,自己想测试的话去对接吧

---------------------------------------------------------------------------
结尾:我是小万,js,Android逆向交流群:948145929




第三节.zip

266.97 KB, 下载次数: 117, 下载积分: 精币 -2 枚

易语言源码+rsa的js


发表于 2024-9-11 10:39:29 | 显示全部楼层   广东省佛山市
666666666666666666666666666666666666666666
回复 支持 反对

使用道具 举报

签到天数: 11 天

发表于 2024-6-25 12:53:51 | 显示全部楼层   湖北省武汉市
感谢分享
回复 支持 反对

使用道具 举报

签到天数: 6 天

发表于 2024-5-29 08:30:37 | 显示全部楼层   山东省临沂市
感谢大佬的分享
回复 支持 反对

使用道具 举报

结帖率:83% (53/64)
发表于 2024-4-21 11:06:06 | 显示全部楼层   江苏省镇江市
66666666666666666666666666
回复 支持 反对

使用道具 举报

发表于 2023-7-29 17:28:44 | 显示全部楼层   广东省汕头市
phone":"17515111111","password":"84610bd0b6bdfe4a6aae99a7c76fc78f","rememberLogin":"true","secureCaptcha":"CN31_OG-sNATnDdXNNpB-V-xCisIL9vYOT4c47hgD.OjRqewkPSC0ENs1_bAr8m
回复 支持 反对

使用道具 举报

发表于 2023-7-12 22:36:41 | 显示全部楼层   广东省汕头市
948145929948145929
回复 支持 反对

使用道具 举报

结帖率:70% (42/60)
发表于 2022-8-26 11:17:46 | 显示全部楼层   山东省滨州市
歌词适配 https://gcsp.lanzoui.com/b0e895h2b  五音助手 https://www.6yit.com/42.html  怎么解密啊
回复 支持 反对

使用道具 举报

结帖率:0% (0/1)
发表于 2022-8-26 07:58:53 | 显示全部楼层   山东省菏泽市
感谢分享,很给力!~
回复 支持 反对

使用道具 举报

结帖率:81% (17/21)
发表于 2022-8-23 23:44:27 | 显示全部楼层   湖南省长沙市
11111111111111111111111111111111111
回复 支持 反对

使用道具 举报

结帖率:100% (4/4)
发表于 2022-8-20 22:39:58 | 显示全部楼层   浙江省衢州市
群不给进?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表