说明:以下内容从我的个人博客 blog.zhouzhipeng.com 复制过来,两边同步发布。

首先声明一下,这里并不是给蜘蛛网打广告。自己平时也比较喜欢看电影,刚好蜘蛛网电影app上有一个周六建行5元抢票活动,由于活动很火爆,几乎很少能抢到! 所以想借用程序手段,自动提交抢票接口,来试图能抢到5元电影票。

虽然没有技术含量的东西,主要是想记录一下,方便自己日后来回忆一下,同时也是一个思路的整理。
好了,废话不多说,下面开始hack之旅!

前言

和所有电影app一样,在经过选电影-> 选场次-> 选桌位 之后,来到了确认提交页面,如下:

可以看到上图中活动优惠有很多,我想”破”的就是龙卡星期六 5元看电影 这个 (因为活动时间已过,可以看到它显示的是灰色,我是上午完成的抓包分析以及写代码,图片现在补上的)

理想情况是,你选好要看的电影只有进来这个页面,刚好上午10点整的时候,5元这个活动就可以开始抢了! 现实情况是到了9:59 分快到10点差不多的时候,进来这个页面你会发现被
告知已经”抢完了”!

现实很残酷,考验网速和手速以及运气! 但是身为一名小码农,怎能像一般人一样也在哪里拼手气呢!(?)

第一步:抓包分析

不出意外的话,它的这个订单提交页面应该是http(s) 请求的,既然如此,当时就是先来抓包分析下http请求咯!

因为我的用的是mac电脑,所以用的Charles来抓包,略过配置步骤,直接贴一下抓包的请求:

经过初步的分析和体验(我自己选了一个其他可用的活动提交了一个真实订单), 发现最终提交订单的接口的是

https://film.spider.com.cn/huayins/lockSeatList.html?insBirthday=&insId=&token=455FBE5EF0A0ED9545231547BB3050C6&userId=5da71497b4160d20c806c0568e535e07&hallId=17&feePrice=2.0%257C2.0&cinemaId=31070901&currentVersion=4.9.0&channelId=sfVivo&appVersion=460&version=410&activityId=101511&showId=0170100000000000060598689&userName=xxxxxxxxxxx&partnerPrice=59.00&sign=e3277328f9fa9434efcec30e8259ad23&filetype=json&mobile=13080669828&insName=&filmId=201709909870&fpCount=&parorderId=610024803&seatId=6%253A9%257C6%253A8&key=huayins&fpId=

其中真实的userName 已被我和谐掉了。

postman 工具把参数展开看一下:

凭借这多年的web开发经验(? 装下b), 会发现破案的难点在于上图红框中的两个参数token sign, 一般而已token是登陆用的,而sign则为请求合法性的校验值 (一般sign是多个参数值按照一定顺序拼接之后再用md5加密得来. ? 对的,一般是)

简化问题

上面的lockSeatList 链接中,有很多参数都是相对固定的,像什么活动优惠5元看电影 这个activityId很容从其他抓包得到的查询接口中获取,在此不一一追溯.
而关键参数token通过我刷了几次接口会发现,它在一段时间内也是不会变的,暂时不考虑其生成方式。

那么剩下的最后一个难点问题在于我们怎么能知道sign的生成算法呢?!

对的,靠猜! (☺️) 开玩笑啦,当时是通过反编译看代码!!

第二步:反编译apk

没错,我们先假设蜘蛛网电影安卓app没有很变态的加固、混淆之类的。 (如果有的话,就直接放弃得了,太花时间了。。。)

先到蜘蛛网官网弄一个apk文件(这个很容易!) 这里我不会贴任何下载链接,需要的实践的朋友请自己去找。

拿到apk之后,不要慌张,善于利用一些大牛弄的反编译工具,这里给大家介绍一个 ,真的挺不错的 javadecompilers.com (国外的网站,打开可能有点慢)

进去之后,基本上傻瓜式的操作,直接上传apk文件,点一下Upload and Decompile 按钮,剩下的就是等待了几分钟了。直接可以下载反编译之后的源代码文件!

得到源代码之后,剩下的事情就是分析代码,找出sign的生成算法了!!

第三步:分析代码

用你熟悉的工具代开源代码文件夹,这里我用的是Intellij IDEA ,打开之后如下所示:

有没有。。。。 很懵逼的感觉!!! 特么这么多的文件,从哪找起啊!!!

寻找入口很重要

在做任何事情都不能太盲目,我们要淡定、从容(? )。 先回忆下第一步:抓包分析 中发现的url https://film.spider.com.cn/huayins/lockSeatList.html?xxxx
是的,它就是入口!

找到发起该url请求的地方必定是我们要的,而这里的关键字符串lockSeatList.html 如果不出意外的话肯定是在代码中某个地方写死的!

好的,我们先搜索一下lockSeatList.html在哪里出现:

如上图所示,一共有三处地方,我们一个个的试一下。 先接着搜索第一处 aeC4767f.ae 静态字段出现的地方:

出现了很多处,但是经过简单的分析判断,它并不是我们要的, “第一处” 排除.

接着,看下”第二处”:

恩,很高端的样子,android界出了很多类似这种retrofit的框架,把http调用弄得用注解搞一下就完成了。。 鉴于有点复杂,可以先放一放这个,后面如果”第三处”也不是我们
要的,再回头来分析下这个方法的调用方。

是的 ,直接突击”第三处”疑似点:

接着再搜索f7910W 出现的地方:

刚好只有一处地方出现(第二个是它自己本身,不算),注意看上图红框的地方,是不是有点像! 估计就是它了!!

水落石出

好的,我们进去看一看:

注意我标的红箭头的地方,这些并不是直接字符串,还得一个个的去搜索这些变量的字符串是个啥!
为了节省点大家的阅读时间,这里就不一一上搜索的截图了,搜索变量的方法与上面类似,直接晒一下我们最终要找的sign字段的面貌:

不难发现,正如我们一开始猜想的,sign就是多个参数值拼接起来再加密的! 重点是下面的stringBuffer2

StringBuffer stringBuffer2 = new StringBuffer();
stringBuffer2.append(str).append(str2).append(str3).append(str4).append(k).append(m).append(str5).append(str6).append(stringBuffer).append(str7).append(q).append(str8).append(str9).append(str10).append(str11).append(str13).append(str14).append(str15).append("huayins").append("0779257096").append(v);

好的,接下来的事情就很简单了,按照上面append的顺序,它其实是每个url上的参数的值。 最终sign的拼接顺序为:

showId cinemaId hallId filmId userName userId mobile urldecode(seatId) urldecode(feePrice) parorderId channelId partnerPrice activityId insName insBirthday insId fpId fpCount "huayins" "0779257096" token

模拟请求

有了以上过程后,我们只需要在原来的url参数上,对需要变更的activityId活动编号等做以下更新,动态算出对应的sign值接口。 我自己用
python实现了一版,在此可能不方便直接公开贴出,需要的小伙伴可以 fork 一份:https://git.io/vNbMh

薅羊毛系列之蜘蛛网电影抢票分析相关推荐

  1. 【程序员薅羊毛系列1】京东官方购物返利得钢镚!

    之前我们给大家分享了<京东每月领30钢镚>.<京东股票猜涨跌领钢镚>.<支付宝京东猜涨跌小技巧>.<京东秒赚9元钢镚>. 其中"玩钢镚&quo ...

  2. 【python自动化测试】京东|淘宝|秒杀12306抢票程序揭秘!一起薅羊毛吧【含源码】

    相信老铁们应该也看过很多这样的视频或者帖子:python自动秒杀的程序,京东,淘宝,大麦网抢票,秒杀抢购抢茅台,12306抢票,还有python薅羊毛的,感觉好像需求挺大的,很多人感兴趣.我也看了一些 ...

  3. 薅羊毛软件-抢福袋源码分享

    概述 这是一个系列分享,我会逐步开放更多的分享. 基于AutoJs实现的薅羊毛App专业版源码大分享.我分享的源码,全是正在商业使用的功能源码.源码的质量大家可以自己平衡. 抢福袋(抖音.抖音极速.抖 ...

  4. python自助电影售票机_手把手教你用python抢票回家过年(代码简单)

    首先看看如何快速查看剩余火车票? 当你想查询一下火车票信息的时候,你还在上12306官网吗?或是打开你手机里的APP?下面让我们来用Python写一个命令行版的火车票查看器, 只要在命令行敲一行命令就 ...

  5. 12306 抢票系列之只要搞定RAIL_DEVICEID的来源,从此抢票不再掉线(上)

    郑重声明: 本文仅供学习使用,禁止用于非法用途,否则后果自负,如有侵权,烦请告知删除,谢谢合作! 开篇明义 本文针对自主开发的抢票脚本在抢票过程中常常遇到的请求无效等问题,简单分析了 12306 网站 ...

  6. JUC系列之模拟抢票(N人同时抢票,票不足系统补仓,N-M人继续抢票)

    下载 http://download.csdn.net/download/crazyzxljing0621/9969870 前言 10.1要去苏州玩. 9月初去携程买票,发现过几天才放票 现在可以预约 ...

  7. 高性能零售IT系统的建设08-9年来在互联网零售O2O行业抗黑产、薅羊毛实战记录及打法

    前言 2012年左右转入互联网应用,由于本身在学校时就涉足过远程医疗影像中的DICOM安全领域这块,因此也是机缘巧合我进入互联网第一年就遇上了一次亿级的DDOS攻击以及千万级CC攻击短信系统的对抗.那 ...

  8. 官方“打假”春运加速包,抢票软件痛失春节“摇钱树”?

    临近春节,除了买年货以外,春运就是最受大众关注的事情了. 按照火车票提前15天发售的安排,今年1月17日起可购买除夕当天的火车票,春运也就正式开始了. 今年为了方便旅客购票,铁路12306提前进行了一 ...

  9. 如何定制一款12306抢票浏览器——完结篇

    差不多花了一个星期的业余时间去完成了相关的编码.最后也只是使用了5篇文章将整个大题流程和使用的关键技术介绍了一下.其中有很多酸甜苦辣,其中记忆最为深刻的就是我对图像做了处理后,tesseract-oc ...

最新文章

  1. thinkphp5的目录结构和命名规范
  2. 中文 iOS/Mac 开发博客列表
  3. 虚拟机安装CentOS6.3及常见问题总结
  4. 标准化工作导则2020_最新版 GB/T 1.12020 标准化工作导则 第 1 部分:标准化文件的结构和起草规则标准解读...
  5. 1社会心理学---感知情境
  6. 循环 Request.ServerVariables
  7. JMeter4.0使用笔记 使用Badboy录制脚本,使用代理录制脚本
  8. [贪心算法] 例6.1 FatMouse' Trade
  9. Java之品优购课程讲义_day12(2)
  10. [MS-SHLLINK]: Shell Link (.LNK) Binary File Format
  11. matlab操作视频教程,matlab2019视频教程
  12. cad插件_CAD插件三领外挂7
  13. python xlrd 写入已有的excel并保留原excel格式
  14. 计算机保存文件快捷键,保存快捷键是什么,保存文档的快捷键
  15. SPSS 调节和中介
  16. 什么是数字式KVM远程管理功能
  17. WPF实现DNA螺旋粒子动画特效
  18. 从A15跑分看库克精准刀法:Pro版GPU强很多,mini 6不敌手机
  19. 关于Android适配版本Q
  20. VOS3000在使用过程中如何快速有效地排查出现的问题

热门文章

  1. java 查询大批量数据 内存溢出_mybatis查询大量数据内存溢出解决办法
  2. 什么是PPTP,PPTP的作用是什么?
  3. SnowFlake 算法
  4. 在Ubuntu 19.04/18.04/16.04上安装WPS新版本的方法
  5. JAVA中定义属性或方法的数量上限
  6. 通过100个单词掌握英语语法(十七)could
  7. Install phpbb in godday.
  8. 感情沟通出了问题要怎么解决_感情出现问题怎么办
  9. 亚马逊云成为瑞士电信首选公有云提供商;思科完成收购网络漏洞管理公司Kenna Security | 全球TMT...
  10. 这个网站厉害了!办公必备软件工具一应俱全,让人相见恨晚