心想,有什么难度啊,估计可能就藏在那个页面里

5分钟后,坐在办公室和同事点了根烟,思考究竟是哪里出了问题

简单总结一下页面

2.png (441.58 KB, 下载次数: 0)

2019-5-14 13:58 上传

初步发现页面的内容都是经过JS渲染上去的,所以但从Chrome的开发人员看不出太多内容来,但是这时候就差不多知道这个站点一定用到了大量的JS

点开筛选器,只显示JS,搜索"登录"这个词

3.png (259.25 KB, 下载次数: 0)

2019-5-14 13:58 上传

仔细观察了一遍,发现没有什么有用的信息,不过也间接的多学习了JS的技术。

打开调试,点击登录按钮,发现根据JS动态生成了一个弹窗,新加载了一些js和css,从这里入手看一下。

4.png (271.61 KB, 下载次数: 2)

2019-5-14 13:58 上传

这么多东西我们无法一个接着一个看,所以,根据抓包的内容中,rohrtoken进行搜索。

5.png (125.57 KB, 下载次数: 0)

2019-5-14 13:57 上传

发现有两个JS还有一个html涉嫌跟这个rohr有关系,逐一排查一下。

先将html的代码复制出来,用bejson的js/html格式化功能进行格式化,放到sublime中方便我们查看。

在sublime中搜索rohr关键字,得到结果

7.png (20.15 KB, 下载次数: 1)

2019-5-14 13:56 上传

继续看另外两个

Rohr.js里有不少代码操作了Rohr

8.png (68.11 KB, 下载次数: 1)

2019-5-14 13:56 上传

9.png (72.93 KB, 下载次数: 2)

2019-5-14 13:57 上传

大概找到了入手点,开发人员工具中点开Sources,进行调试。

发现这里面操作了ip这个对象,我们在var iP处加上断点,刷新页面后发现此处在页面加载时被执行过。逐步分析,在iP.reload处加上断点,刷新页面,点击登录按钮,随意输入账号密码点击登录。

10.png (186.4 KB, 下载次数: 1)

2019-5-14 13:56 上传

Emmmm ,是不是觉得胜利就在眼前了呢,我当时也是这么想的。

根据惯例,我们发现jv的值其实是基本固定的,取出备用。

那么我们可以直接调用这个ip.reload函数么,因为返回的jw就是我们想要的值,其实是可以的,下面我们单独写一个html页面,将下列我们在html页面中发现的内容粘贴到我们的html中。

然后调用Rohr_Opt.reload()这个函数。

为什么要调用Rohr_Opt.reload,因为我们在前面的途中发现了ip被赋给了Rohr_Opt,因为我们定义Rohr_Opt为Object,并且在js中有如下判断

[JavaScript] 纯文本查看 复制代码if (typeof (Rohr_Opt) === _$_543c[2]) {

iP.bindUserTrackEvent();

Rohr_Opt.reload = iP.reload;

Rohr_Opt.sign = iP.sign;

Rohr_Opt.clean = iP.decrypt

})

简单检查下代码,执行我们自己的html,如果没什么问题的话,你会显示出来一段Token,但是这个Token其实是有问题的,我们放到下面说。

这时候我们可以用PostMan测试一下我们的Token,不出意外的话应该会显示如下的响应。

11.png (64.04 KB, 下载次数: 0)

2019-5-14 13:55 上传

到这里我们要开始反思,究竟是哪里不对。

现在根据我们的计算jw = iI(iP)这个方法的参数iP来对照正常提交的参数。

这是我通过浏览器正常操作的iP

12.png (80.14 KB, 下载次数: 0)

2019-5-14 13:55 上传

下图为我们自己html的iP

13.png (84.91 KB, 下载次数: 0)

2019-5-14 13:55 上传

可以发现,我们与正常操作的变量多少有一些区别,缺少aT、kT、mT,另外bI也与正常的不同,我们看一下bI的代码是怎么加载的。

bI是通过iL()函数来赋值的.

[JavaScript] 纯文本查看 复制代码var iL = function() {

var jb = document.referrer;

var ja = window.location.href;

return [ja, jb]

};

可以看到这个数组里的内容,但是我们知道document.referrer是只读属性,无法更改,那我们有什么办法来更改呢,试过了很多方法,最后觉得还是直接改js来的快一些。我们将整个rohr.js下载下来,直接赋值jb和ja的值。

[JavaScript] 纯文本查看 复制代码var iL = function() {

var jb = "https://e.maoyan.com/user/login?next=%2F";

var ja = "https://epassport.meituan.com/account/unitivelogin?bg_source=6&service=movie&continue=https://e.maoyan.com/backend/account/user/entry/merchant";

return [ja, jb]

};

更改下html代码,将js放到同等目录下。

[HTML] 纯文本查看 复制代码

Rohr_Token计算

window.Rohr_Opt = new Object;

window.Rohr_Opt.Flag = {

flag: 100043

};

window.Rohr_Opt.LogVal = "rohrdata";

var data = 'https://epassport.meituan.com/api/account/login?loginContinue=https://e.maoyan.com/backend/account/user/entry/merchant&&only_auth=undefined';

var n = void 0;

n = window.Rohr_Opt.reload(data)

onload = function() {

divd = document.createElement("div");

divd.id = 'Rohr_Token';

divd.innerHTML = n;

document.body.appendChild(divd);

}

再次实验token的有效性,结果发现还是需要滑块验证。

那么,我们需要对另外三个参数进行研究。

这块具体怎么实施就不做赘述了。还是调试就行。

这三个参数其实就是对我们的键盘按键进行一个类似于特征分析的记录器。

这一部分可以自己手动写死或者随机写几组值进去。

再次实验,如果我们记错的话应该就是可以通过验证,返回成功了。

16.png (67.09 KB, 下载次数: 0)

2019-5-14 13:54 上传

那么,我们就已经可以正确的得到rohrToken的取值方法了。

至于如何使用这个html,我的方案是使用phantomjs去加载页面执行js。

但是这里又遇到一个问题,用电脑的浏览器打开html页面取得token是可以通过验证的,但是phantomjs的还是需要滑块验证。由此,我分析应该在代码中有webdriver的检测,搜索js代码果然发现了几处地方有webdriver的检测,另外,还有phandomjs检测,就在我们最开始截图中,定义iP的地方有一个aM = ik方法,直接赋值空字符串就可以解决。

另外,我也使用chrome headless模式去试过这个网站,但是发现无法切换driver至登录窗口从而无法获得控件,如果有做过的小伙伴可以指点一下。

ps:小小的吐槽一下,没有草稿箱么。。。我好几次苹果鼠标误触返回手势然后这个帖子我写了4次。。。

-------------------------------------更新一波------------------------------------

如果在生产环境已经记得给webdriver开端口

针对phantomjs在CentOS环境下的部署不多做阐述,网上很多,但是有几点要注意的,在2.X版本的selenium中,生产环境一般会报错,因为有防火墙,所以注意指定端口。

但是在3.X版本的selenium里,报错不会提示你端口问题,而是提示你Can not connect ,所以大家还是要注意一下。

另外,我是用的Django做的接口获取登录后的cookie,但是必须需要做一个接口去响应我们之前写的html,也就是做一个跳转,再用phantomjs去请求这个接口加载页面。

因为我发现在Django里的views里直接用phantomjs去读取本地文件是不会触发渲染的,所以请务必切记这一点。

java 爬虫 token,【跟我一起做爬虫】XX商家后台登录rohrToken的加密方式【更新】...相关推荐

  1. Python爬虫详解:爬虫是什么,如何做爬虫?

    Python爬虫详解:爬虫是什么,如何做爬虫? 读前必看: 本篇文章为教学向文章,通俗易懂的语言难免有不合适的地方,请大佬自行退场 爬虫是什么? 去查网,你会看到这样的解释: 爬虫是一种按照一定的规则 ...

  2. python写爬虫的优势-用Python做爬虫有哪些优势 该怎么学好Python

    用Python做爬虫有哪些优势?该怎么学好Python?除了人工智能和数据分析,Python最广为人知的应用当属爬虫.所谓爬虫,是指按照一定的规则,自动地抓取万维网信息的程序或者脚本.接下来千锋小编程 ...

  3. java web 怎么用solr_使用web过滤器增加solr后台登录验证

    solr后台自带是没有登录功能的,默认访问地址是:http://localhost:8983/solr/#/(内置jetty运行). 要给sorl后台增加登录验证方法: 1.使用web服务器的登录验证 ...

  4. 深圳java培训:Java也能做爬虫。

    深圳java培训:Java也能做爬虫. 现在提到爬虫人第一个想到的就是python,其实使用Java编写爬虫也是很好的选择, 下面给大家展示一个使用Java基础语言编写的爬取小说的案例: 实现功能: ...

  5. java做爬虫解决521错误

    欢迎访问github 最近做爬虫时碰到了521错误,500开头的都是服务器错误,521错误有很大可能是请求头参数不对,比如下面这个 这是错误的 这是正确的 就是这一堆东西可能有哪些少了或是错误,而在爬 ...

  6. 用Java做爬虫爬取王者荣耀的英雄头像

    大家好,今天我和大家分享一下用Java做爬虫爬取王者荣耀的英雄头像. 首先我们需要王者荣耀的网址,然后获取连接,通过IO读取网页的源代码,用正则表达式筛选我们需要的代码,在每个筛选对象(图片的地址)前 ...

  7. php和python写爬虫-为什么选择用python做爬虫

    什么是网络爬虫? 网络爬虫是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成.传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当 ...

  8. python的爬虫库_python做爬虫常用库

    python做爬虫常用库 一.总结 一句话总结: urllib:一系列用于操作URL的功能. requests:基于 urllib 编写的,阻塞式 HTTP 请求库,发出一个请求,一直等待服务器响应后 ...

  9. jsoup爬虫简书首页数据做个小Demo

    代码地址如下: http://www.demodashi.com/demo/11643.html 昨天LZ去面试,遇到一个大牛,被血虐一番,发现自己基础还是很薄弱,对java一些原理掌握的还是不够稳固 ...

最新文章

  1. linux与window中sleep函数的头文件
  2. ln -s命令 linux,linux ln命令详解
  3. 谈谈dpdk应用层包处理程序的多进程和多线程模型选择时的若干考虑
  4. 2018.09.15 vijos1053Easy sssp(最短路)
  5. 锁屏界面显示某些设置已隐藏_iOS 14 隐藏功能,只要轻点手机背面就能截屏
  6. Android App罕见错误和优化方案
  7. Linux学习之Vim使用
  8. JQuery Easyui/TopJUI 基本树形表格的创建
  9. 如何下载Idea专业版
  10. python中去除空格用什么函数_python中用什么函数去掉空格
  11. [好歌推荐4]侯德建 - 归去来兮
  12. 润乾报表v4-统计图中如何弹出超链接窗口
  13. 计算机开机长响一声,电脑开机一声长响三声短响是什么原因?
  14. Android Studio连接手机调试出现Session 'app': Error Installing APK
  15. linux编辑原列表后怎么保存,linux下vi命令 修改文件及保存的使用方法(转)
  16. amd显卡用黑苹果输出黑屏_AMD锐龙Ryzen系列黑苹果教程
  17. office2019安装步骤
  18. 城市轨道交通信号系统
  19. 【NLP基础理论】03 文本分类
  20. java中byte和short类型的相互转换(不是用隐式转换)

热门文章

  1. 【中土世界】精灵的主要分支
  2. Linux驱动中SD/MMC卡增加多个分区
  3. golang如何编译一个最小的带GUI的标准exe
  4. 在任何时候我们都认为是美丽的10种颜色
  5. STM32编程中,float转u32和u32转float的方法
  6. LVS介绍与工作模型和调度算法
  7. 色彩空间类型(精简)
  8. C盘下Anaconda瘦身
  9. 币圈创新教程之:自己动手创建个性化EOS币账户
  10. 二次开发qduoj板娘拉取和删除教程