xx同城【2020.12】| 登录

在这里插入图片描述上:
写文章用于个人记录与分享。第一次记录写得详细一点。本文对xx同城的登录做逆向分析与简单实现。
目标网址:aHR0cHM6Ly9wYXNzcG9ydC41OC5jb20vbG9naW4v(大佬们的文章都这么写b64一下)

中:
首先打开chrome,ctrl+shift+N打开无痕模式,F12打开控制台,进入目标网址,输入账号密码(错误密码)登录,抓包分析;
在这里插入图片描述找到post登录的请求;再用其它浏览器同样操作一遍抓包对比携带参数;
在这里插入图片描述username就是用户名;password就是加密后的密码;然后就是token、path和fingerprint这三个参数在变,其它都没有变;一个一个来。
ctrl+shift+F全局搜索password;
在这里插入图片描述结果有点多,我是慢慢找下来找到的(mobilelogin这个js)。大佬们肯定有更好的办法。点进去,格式化,ctrl+F再搜索password;
在这里插入图片描述依然很多,还是慢慢找
在这里插入图片描述找到可疑的位置,下面有几个差不多也是这样的可以都打上断点试试;
(然后发现就是这第一处826行)
再点击一遍登录,断到了;
在这里插入图片描述追进去找到了这个encrypt函数,e就是输入的密码;在这里插入图片描述先把函数粘到webstorm;这里已经写着是rsa哈,那两个rsa的值就是加密的模数和模量;一般都是固定的,有的会写死在js里或者是HTML里,这里是请求来的;
在这里插入图片描述了解大体逻辑我们就可以改写一下这个函数;

get_password = function(password) {
    var rsaExponent = '010001';
    var rsaModulus = "008baf14121377fc76eaf7794b8a8af17085628c3590df47e6534574efcfd81ef8635fcdc67d141c15f51649a89533df0db839331e30b8f8e4440ebf7ccbcc494f4ba18e9f492534b8aafc1b1057429ac851d3d9eb66e86fce1b04527c7b95a2431b07ea277cde2365876e2733325df04389a9d891c5d36b7bc752140db74cb69f";
    var i = 1411093327735 - (new Date).getTime();
    var o = (new Date).getTime() + i;
    return encryptString(o + encodeURIComponent(password), rsaExponent, rsaModulus)
};

现在还缺这个encryptString函数;缺啥补啥;继续追进去慢慢看;
在这里插入图片描述发现这些调用的函数都在这个ppt_security的js里,这也就四百多行,直接全部抠走;
在这里插入图片描述运行一哈缺window,开头加上 var window = this;
在这里插入图片描述再运行一哈缺RSAUtils,先加上 var RSAUtils = {}; 试试。
在这里插入图片描述完事;
然后是token;我们可以看看rsa请求上面的那个长的挺像的那个请求;
在这里插入图片描述发现token就躺在里面;
在这里插入图片描述不过这也要搞定这两个参数才能拿得到;
全局搜索path,发现就在html里,可以直接把值放里面搜;(当时我还在js里找了半天找不到还去问了卞大佬)
在这里插入图片描述其实也可以发现path的值就是https%3A%2F%2Ffz.58.com%2F%3Fpts%3D + 13位时间戳;
然后就是callback;观察可以发现这个参数也是JsonpCallBack + 一串数字,不过这并不是简单的时间戳;
所有我们可以直接搜"JsonpCallBack" +;
在这里插入图片描述发现依然是这个js;进去搜发现有两处,两处都打上;(104行和1392行)
在这里插入图片描述都打上断点刷新页面就会重新发送请求,果然进入了断点;
在这里插入图片描述分析一下生成逻辑就是这个啦;

"JsonpCallBack" + (new Date).getTime() + Math.floor(1e3 * Math.random())

可以直接用python改写;懒就直接js生成;
现在我们就只剩下最后一个fingerprint啦;
在这里插入图片描述一搜fingerprint和finger2都出来了;不过这两个只是定义的js;
(慢慢摸索出来的)
在这里插入图片描述先进去fingerprint在可疑的地方都打上断点,刷新页面;
断到的是getnew这里;
在这里插入图片描述调用它的js在右边调用栈慢慢看;又是那个mobilelogin的js;
点进去看看,意外发现了finger2;
点进去瞅一眼;
在这里插入图片描述
在这里插入图片描述生成逻辑就在第189行;有空可以慢慢研究一下;我看了前面几项是网页浏览器的一些基本属性,地区语言分辨率什么的;反正最后会生成出一个固定的值;(不同浏览器和不同设备值都会不同,这就是指纹吧)
回到fingerprint,这里我们只需要了解它的生成逻辑就好了;
在这里插入图片描述可知fingerprint就是正则匹配的finger_session这个cookie的值;
在这里插入图片描述所以我们只要知道这个cookie怎么来的就完事啦;
找cookie大佬们都用的hook cookie;不会的就慢慢在请求里找cookie是什么时候出来的;(我就是)
这里要重新打开一个无痕浏览器才能找到那个请求;
在这里插入图片描述

在这里插入图片描述
就是你啦;还需要带着finger2和callback去请求就能获得那两个finger的cookie啦;

收工;

下:
总结一下整个登录逻辑:请求获取path→js生成password和callback→请求获取token→请求获取cookie得到fingerprint→模拟请求携带参数post登录。
技术难度不高;要了解弄清楚整个逻辑还是要花点时间。
我踩的坑就是登录过多会出现需要手机或者邮箱验证的情况,当时一直以为是我代码问题,后面手动在网页用验证码登一遍就好了;

完整代码:https://github.com/WhySoFoolish/js-/tree/main/58%E5%90%8C%E5%9F%8E
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值