JS逆向之——天翼云登录
前言
此文章仅用于技术交流,欢迎指出相关问题,感兴趣的可以关注我,有相关python逆向问题可以私信交流讨论。
目标与目的
目标网站:天翼云登录
目的:通过构建登录参数,完成天翼云的登录操作。
相关技术
本题涉及两个方面的参数构造:
- 密码构造:登录时将密码通过加密,生成密文传递给服务器
- 几个相关参数构造:未涉及加密算法,为时间戳与随机数通过一定的计算后生成的几个可变化的值。
本题涉及的js知识点:
(个人理解,或有误,后续认识加深再来调整)
- webpack打包:js代码通过wwebpack打包后会生成固定模式,该模式有标准的三段式,1. 自执行的函数;2. 加载器;3. 具体的模块代码。
- 代码在被调用时会将模块对应的id传给加载器,通过加载器去运行指定代码。
1.目标参数
参数说明
- userName:用户名
- password:密码
- referrer:wep (固定,wep端)
- mainVersion: 300021100 (固定)
- comParam_curTime:时间戳
- comParam_seqCode:计算所得
- comParam_signature:计算所得
- isCheck:true(固定值)
- locale:zh-cn(固定值)
2. 查找密码生成逻辑
-
在控制台搜索关键词"password",这里有一个小技巧:搜索时加上"=" 或者 ":"等赋值符号,可能更快的找到相应位置。(如果搜不到,或者因为粗心没找到,那就可以先搜别的参数,比如 username。或者通过xhr断点向上找堆栈)。可以找到密码的生成位置如下:
-
此时打断点,重新登陆,可以看到a.value就是原始密码
-
现在可以将生成密码的这段代码复制到控制台运行,确定该行代码即是密码生成逻辑
-
把
Object(w["c"])
、Object(w["f"])
、Object(w["g"])
拿到控制台运行,他们对应的是三个函数。 -
分别对三个函数进行分析,发现
Object(w["c"])
中有DES加密,关键点就在p对象。
3. 简单还原密码加密
这里使用第一种方法简单还原密码加密,生成密文。
-
通过使用crypto-js模块,构造p对象,具体代码如下:
-
通过构造p对象,运行代码后,即可完成密码的加密。
-
至此密码已经还原,但是出于学习的目的,应该尽量不用第三方插件来完成。而且若开发者将加密算法进行魔改,那这种引第三方包的方式肯定是不OK的。故继续向下。
4. 通过扣代码完成密文生成
上面已经找到关键点,对象p。此时若能够找到p对象的生成逻辑,将代码拿过来那就可以大功告成了。
- 断点调试查找p的生成过程,可以看出刚进入M函数,p对象就已经生成了。
- 向上找p的生成逻辑,p = t.n(l),l = t(“3452”)
思路到这,大体为找到3452函数,构建函数执行就行,此时全局搜或者查看堆栈都行,我是找的堆栈,然后倒入熟悉的webpack格式。
然后全局搜索3452函数即可,发现有这么多模块需要添加
通过堆栈或者全局搜索exports找到加载器位置,然后将其复制,替换模块即可
由于模块太多了,我就不一一构建了。构建完的函数大体为下:
最后调用代码如下
5. 其他参数构造
其他几个参数不涉及加密算法,还原也较为简单,基本步骤也是先找构造位置,然后把代码提取出来,运行,缺什么补什么。
- 关键词搜索
-
提取代码为:
-
打印结果为
6.书写py代码
导入js文件替换相关参数即可[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
成功登录如下图所示