斗鱼password加密参数调试生成案例
下午逛论坛的时候,看到一个老哥的js逆向视频,发现这个案例挺不错的,我就写了一份博客,蹭个热度。
斗鱼登陆 输入账号密码,拖动滑块后会向登陆接口发起请求。
通过抓包发现请求体 Formdata 中的 password 进行了加密。
本案例演示如何通过控制台调试找到加密js方法。
最后使用python来模拟生成,文末附有代码。
1.确定接口
https://img-blog.csdnimg.cn/20200902134614601.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzU4MjEwMQ==,size_16,color_FFFFFF,t_70#pic_center
https://img-blog.csdnimg.cn/20200902134644510.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzU4MjEwMQ==,size_16,color_FFFFFF,t_70#pic_center
2.断点调试
点击控制台的 initiator ,可查看当前的请求是哪一行触发。
然后点send,进入js文件
https://img-blog.csdnimg.cn/20200902135653271.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzU4MjEwMQ==,size_16,color_FFFFFF,t_70#pic_center
点击左下角 {} ,格式化文件
https://img-blog.csdnimg.cn/20200902135849580.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzU4MjEwMQ==,size_16,color_FFFFFF,t_70
然后点击左侧行数,打上断点
https://img-blog.csdnimg.cn/20200902165909900.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzU4MjEwMQ==,size_16,color_FFFFFF,t_70#pic_center
再次请求登陆
https://img-blog.csdnimg.cn/20200902170015563.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzU4MjEwMQ==,size_16,color_FFFFFF,t_70#pic_center
等待断点拦截
https://img-blog.csdnimg.cn/20200902170244756.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzU4MjEwMQ==,size_16,color_FFFFFF,t_70#pic_center
然后看右侧的 call stack 函数调用栈,一层一层往上找。
在_enter时 查看到了 o.md5_m 。
没看到_enter时 刷新再来一遍。
https://img-blog.csdnimg.cn/20200902170358175.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzU4MjEwMQ==,size_16,color_FFFFFF,t_70#pic_center
“52c69e3a57331…” 为加密后的值
https://img-blog.csdnimg.cn/20200902170524651.png#pic_center
然后再看 o.md5_m 怎么来的
往上一行可以看到 o.md5_m = CryptoJS.MD5(k).toString()
https://img-blog.csdnimg.cn/20200902170623956.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzU4MjEwMQ==,size_16,color_FFFFFF,t_70#pic_center
鼠标移上去之后点击匿名函数
然后可找到 CryptoJS ,CryptoJS是支持加密的JavaScript库。
https://img-blog.csdnimg.cn/20200902170853527.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzU4MjEwMQ==,size_16,color_FFFFFF,t_70#pic_center
你也可以接着断点查看具体的加密过程。
3.模拟生成
把这段js复制下来。写入html,然后在控制台测试。
这个时候其实可以写一段代码直接通过浏览器的驱动来生成了。
https://img-blog.csdnimg.cn/20200902173352918.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzU4MjEwMQ==,size_16,color_FFFFFF,t_70#pic_center
4.Python调用
调用CryptoJS的md5模块时,加密的结果是一个数组,而不是我们常见的MD5值。
https://img-blog.csdnimg.cn/20200902174347786.png
在 js中可以使用CryproJs的 toSting来直接转换成字符串。
https://img-blog.csdnimg.cn/20200902174518955.png
我们用python实现的话,把这段函数拿出来用就行了
https://img-blog.csdnimg.cn/20200902180654807.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzU4MjEwMQ==,size_16,color_FFFFFF,t_70#pic_center
整体调用代码见博客:https://blog.csdn.net/weixin_43582101/article/details/108360637
打印结果和浏览器中调试结果相同。
本篇案例到此为止了。有兴趣的同学可以加群一起学习
更多文章可前往csdn博客:https://blog.csdn.net/weixin_43582101
https://img-blog.csdnimg.cn/20200902181045530.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzU4MjEwMQ==,size_16,color_FFFFFF,t_70
登录不难,难在数美风控 66 66 666 66 赞 66666 1 11