欢迎来真孝善网,为您提供真孝善正能量书籍故事!

【每日JS】解析咪咕视频登录RSA加密技术

时间:10-27 现代故事 提交错误

大家好,今天来为大家分享【每日JS】解析咪咕视频登录RSA加密技术的一些知识点,和的问题解析,大家要是都明白,那么可以忽略,如果不太清楚的话可以看看本篇文章,相信很大概率可以解决您的问题,接下来我们就一起来看看吧!

抓包或者右键查看框架源码,可以看到弹出的登录框URL为:

https://passport.migu.cn/login?sourceid=203021apptype=2forceAuthn=trueisPassive=falseauthType=display=nodeId=70027513relayState=loginweibo=1callbackURL=http%3A%2F%2Fwww.miguvideo.com%2Fmgs%2Fwebsite%2Fprd%2Findex.html% 3FisIframe%3Dweb

0x02 定位JS

1.输入账号和密码验证码即可。如果有验证码,请输入正确的验证码。点击登录即可查看提交的参数。

1.png 可以看到,发出了两个请求,第一个是获取密钥,第二个是登录。登录包中有加密后的参数,密码enpassword、伪指纹fingerPrint、fingerPrintDetail。

2.Ctrl+Shift+F 调出搜索面板,搜索enpassword,只看到一个结果,就是该网页的源代码。

2.png 乍一看,毫无头绪。其实这个值是通过Class来定位的。也就是说,你可以尝试再次搜索Class的值:J_RsaPsd。可以看到有两个结果。第二个是我们上次搜索的结果肯定不是加密点,所以应该在第一个结果中。

3、点击第一个png结果,点击大括号格式化,Ctrl+F搜索J_RsaPsd,找到三个结果。稍作分析后,在每个可疑的地方设置断点。

4.png3.重新输入账号和密码验证码,点击登录,JS中断。我们想要的加密点位于第328-338 行。扣除该代码以供以后使用。

success: 函数(a) {

if (a.status=g.ajax.SUCCESS) {

c.each(函数() {

var b=$(这个),

c=新j.RSAKey;

c.setPublic(a.result.modulus, a.result.publicExponent);

var d=c.encrypt(b.val());

b.siblings(".J_RsaPsd").val(d)

});

var b=i.page.rsaFingerprint(a.result.modulus, a.result.publicExponent);

d.filter(".J_FingerPrint").val(b.result).end().filter(".J_FingerPrintDetail").val(b.details)

}这段代码是当异步请求Key(1中抓包看到的两个请求中的第一个)成功时,根据Key进行加密操作。

其中,b.val()为明文密码,a.result.modulus和a.result.publicExponent为第一次请求得到的Key,直接固定。 i.page.rsaFingerprint 用于计算其他两个加密参数。

将鼠标悬停在j.RSAKey上(这里是新建的对象,需要先找到来源),点击弹出的内容,直接跳转进去。

5.png4.进入对象的定义函数,发现都是这个。然后把整个上层拿走并继续翻阅它。找到的上层代码从第3916行开始,到第4521行结束。

定义("lib/rsa/rsa",[],函数(a,b,c){

函数d(a, b, c) {

null !=a ("number"==typeof a ? this.fromNumber(a, b, c) : null==b "string" !=typeof a ? this.fromString(a, 256) : this.fromString(a , b))

}

***

忽略

***

ab.prototype.nextBytes=_,

db.prototype.doPublic=fb,

db.prototype.setPublic=eb,

db.prototype.加密=GB,

c. 出口={

RSAKey:db

}

}),5.此时就可以开始重写密码加密部分了,但是还有两个参数也加密了,所以我就把它们一起拿出来重写。

同上,在337行设置断点,然后在这里运行。将鼠标悬停在rsaFingerprint上,点击弹出内容,直接跳转进去。

6.直接从png中扣除定义函数即可。

rsaFingerprint: 函数(a,b){

if (!$.指纹)

返回{

详情:"",

结果: ""

};

var c=$.fingerprint.details

, d=$.fingerprint.result

, e=c.长度

, f=""

, g=新l.RSAKey;

g.setPublic(a, b);

for (var h=g.encrypt(d), i=0; e i; i +=117)

f +=g.加密(c.substr(i, 117));

返回{

详情: f,

结果: 小时

}

}参数a和b是第一次请求的Key,可以直接固定; $.fingerprint 可以在控制台输出中查看。它是与浏览器和请求头相关的信息。可以说是伪指纹。暂时修好了,终于回来了。是一个对象,正好是login包中的另外两个参数。

0x03 改写JS

1.先写一个调用函数。

var p1="00833c4af965ff7a8409f8b5d5a83d87f2f19d7c1eb40dc59a98d2346cbb145046b2c6facc25b5cc363443f0f7ebd9524b7c1e1917bf7d849212339f6c1 d 3711b115ecb20f0c89fc2182a985ea28cbb4adf6a321ff7e715ba9b8d7261d1c14 0485df3b705247a70c28c9068caabbedbf9510dada6d13d99e57642b853a73406817 ",

p2="010001"; //因为另一个加密也需要调用这两个值,所以它们在函数外部定义并用作全局变量。

function getP(pass) {//密码加密计算函数,写在加密点代码后面。

var c=新的RSAKey;

c.setPublic(p1, p2);

var d=c.加密(pass);

返回d;

}2.重写RSAKey对象定义

窗口=这个;

导航器={}; //首先用要使用的值定义空对象

//删除第一行,暴露内部函数(最后对应的括号也删除)

//define("lib/rsa/rsa", [], 函数(a, b, c) {

函数d(a, b, c) {

null !=a ("number"==typeof a ? this.fromNumber(a, b, c) : null==b "string" !=typeof a ? this.fromString(a, 256) : this.fromString(a , b))

}

***

忽略

***

ab.prototype.nextBytes=_,

db.prototype.doPublic=fb,

db.prototype.setPublic=eb,

db.prototype.encrypt=gb;

//将原来的逗号替换为分号来结束语句。

//,

//c.exports={

//RSAKey:db

//}

//本来是用exports来导出的,现在直接定义对象就可以了。

var RSAKey=db;

//}),现在可以通过getP(pass)对明文密码进行加密。

3.重写rsaFingerprint 定义

首先将之前在控制台输出的浏览器信息定义为变量,然后将函数部分改为普通定义。

删除一开始的if判断,将这里对应的值改为,如*.RSAKey改为RSAKey。

var详细信息="{"user_agent":"Mozilla/5.0(Windows NT 10.0; WOW64)AppleWebKit/537.36(KHTML,如Gecko)Chrome/70.0.3538.25 Safa","语言":"zh-CN","color_depth" :"24","像素比":"1.25","硬件并发":"4","分辨率":"1536,864","可用_分辨率":"1536,824","时区_偏移":"-480", "session_storage":"1","local_storage":"1","indexed_db":"1","open_database":"1","cpu_class":"未知","navigator_platform":"Win32","do_not_track ":"unknown","regular_plugins":"Chromium PDF 插件:可移植文档格式:application/x-google-chrome-pdf~pdf,Chromium PDF View","webgl_vendor":"Google Inc.~ANGLE (Intel(R) HD Graphics 530 Direct3D9Ex vs_3_0 ps_3_0)","adblock":"true","has_lied_languages":"false","has_lied_resolution":"false","has_lied_os":"false","has_lied_browser":"false","touch_support": "0,false,false","js_fonts":"Arial,Arial Black,Arial Narrow,Book Antiqua,Bookman Old Style,Calibri,Cambria,Cambria Math,Century,C"}",

结果="2754353484e6bed2ec7cf41dddba8bce"

rsaFingerprint=函数() {

var c=详细信息,

d=结果,

e=c.长度,

f="",

g=新的RSAKey;

g.setPublic(aaaa, "010001");

for (var h=g.encrypt(d), i=0; e i; i +=117)

f +=g.加密(c.substr(i, 117));

返回{

详情: f,

结果: 小时

}

}此时就可以运行了。

关于【每日JS】解析咪咕视频登录RSA加密技术的内容到此结束,希望对大家有所帮助。

用户评论

孤独症

终于看到一篇关于咪咕视频JS逆向的文章了,我一直想了解一下他们的登录机制。

    有11位网友表示赞同!

凉话刺骨

rsa加密是挺有挑战性的,这篇文章能帮我学习学习吗?

    有5位网友表示赞同!

↘▂_倥絔

感觉JS逆向技术越来越常见了,以后要好好研究学习。

    有12位网友表示赞同!

軨倾词

这篇应该能解答很多和我类似好奇心的人吧!

    有5位网友表示赞同!

她最好i

咪咕视频的安全性一直很高,这个文章让我更了解了他们的技术手段。

    有7位网友表示赞同!

心悸╰つ

期待作者能分享更多关于JS逆向的知识和技巧。

    有9位网友表示赞同!

执笔画眉

学习这种东西需要一定的基础知识,不知道这篇文章对初学者友好吗?

    有5位网友表示赞同!

荒野情趣

每天都有新的JS进阶内容分享,感觉技术进步很快。

    有18位网友表示赞同!

不相忘

RSA加密在各个领域都有应用,这是一个很实用的技术。

    有10位网友表示赞同!

浮光浅夏ζ

喜欢学习这些逆向技术和安全知识,能让我对计算机更加深入了解。

    有10位网友表示赞同!

那伤。眞美

这篇文章或许能让想破解咪咕视频登录的人获得一些启发。

    有8位网友表示赞同!

心已麻木i

分享的好文啊!可以帮助很多人解开这个谜题。

    有18位网友表示赞同!

繁华若梦

我对JS逆向一直感兴趣,但缺乏学习资源,这下很好的机会了。

    有17位网友表示赞同!

挽手余生ら

这篇文章一定会让我对JavaScript有更深刻的理解。

    有20位网友表示赞同!

景忧丶枫涩帘淞幕雨

感觉这种技术的应用范围很广,未来可能会发挥更大的作用!

    有6位网友表示赞同!

铁树不曾开花

希望作者能详细讲解RSA算法的整个过程。

    有20位网友表示赞同!

盲从于你

学习JS逆向需要一定的耐心和毅力,值得一试!

    有13位网友表示赞同!

堕落爱人!

这种技术掌握起来,对以后的工作很有帮助。

    有6位网友表示赞同!

追忆思域。

赞赏作者分享这份宝贵的技术!

    有16位网友表示赞同!

良人凉人

这个标题太吸引人了!我一定要去看这篇文章。

    有9位网友表示赞同!

【【每日JS】解析咪咕视频登录RSA加密技术】相关文章:

1.蛤蟆讨媳妇【哈尼族民间故事】

2.米颠拜石

3.王羲之临池学书

4.清代敢于创新的“浓墨宰相”——刘墉

5.“巧取豪夺”的由来--米芾逸事

6.荒唐洁癖 惜砚如身(米芾逸事)

7.拜石为兄--米芾逸事

8.郑板桥轶事十则

9.王献之被公主抢亲后的悲惨人生

10.史上真实张三丰:在棺材中竟神奇复活