博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
手把手教你给偶像刷票。偶像来了?程序员来了!Charles实战
阅读量:6146 次
发布时间:2019-06-21

本文共 3084 字,大约阅读时间需要 10 分钟。

有人说程序员不懂浪漫,还有一些梗说即使是女神/男神,换行不同也不相为谋。 更别说,有的 女生/男生 有自己喜欢的 小哥哥/小姐姐,黑我们作为程序员不懂他们的追星乐趣。

OK,我们可能不懂追星的那份乐趣,但是如果能够让你们开心。那我们也愿意。

接下来,就实战演示一下,如何讨好你的追星另一半。

(虽然我只在安卓手机上测试过,iphone应该同理)

  1. 首先,你需要一部手机,装一个你想要投票的APP/网页/小程序。
  2. 电脑上安装一个抓包软件,这里我使用的是。
  3. 等,能模拟网络请求的工具。

在手机上抓包数据

打开Charles,用手机连接它。

  1. 菜单里面找到 Proxy => ProxySetting =>查看自己的端口(一般都是8888)
  2. 然后查看自己的IP地址,window在CMD中输入ipconfig, Mac/Linux 在terminal中输入 ifconfig 并在手机中配置

填入自己的IP地址即可。图上是我的本机IP地址。

这个时候就可以看到这样的画面了

可以看到左边请求的地址来自于https,进行了加密,我们的请求API也变成了unknown。如果我们想要获取SSL的内容,需要给手机安装证书,获取权限。

在菜单选择Help => SSL Proxying => Install Charles Root….,根据自己的设备进行选择。如果是手机,就选择第四项。如图。

然后会弹出这个画面

在手机上用chrome浏览器(系统默认浏览器可能导致识别证书,就无法安装)访问 即可下载证书,按照提示安装之后。就会发现,之前unknown的API变的可见啦!

之后你在手机上的每一步操作,都会在这里得到提示。

模拟请求

得到了我们想要的数据之后,我们该怎么做呢? 就拿我使用的这款小程序来说,它的设限是每隔两分钟可以偷一次花,一次可以偷5个人。 但是我每天都要上班,时时刻刻的掏手机给偶像进行投票?可能不太好吧?

这个时候,我们需要的是在手机上先进行一次投票操作,就可以在charles的左边菜单栏获取到对应的请求。 这个时候,我们需要对想要模拟的请求点击右键,选择repeat。就可以进行重复投票了。

点击右边contents可以看到两个参数,一个叫 openid,是你自己在这个小程序的唯一编码,相当于你在这个小程序的身份证。另一个是mid,是偷取的明星的编号。

你偷取5个明星,记录5次API,每隔2分钟,请求这几个API,就能保证自己不会错过任何一朵花。

难道需要一直开着Charles?

答案当然是否定的啦! 这个时候需要另一个工具,叫做Postman。是一个可以模拟HTTP请求的一个工具。 你在里面只要输入,请求的API地址,再填入一大堆配置参数,以及header等等,就可以发送成功了。

有没有简单的方法呢? 有! 在Charles里面对请求点右键,选择Copy cURL Request

然后在Postman里面,点击最上栏的Import。

选择Paste Raw Text 将刚刚复制的地址,粘贴进去。

然后在右侧窗口就会生成一个模拟好的请求,点击Send!

偷取成功!

再进一步,让一切都自动化起来。

这个时候,你在想,我为什么一定要隔2分钟点一次? 我就不能让程序自动化起来吗?

在这里用nodejs做例子。 执行cURL命令去调用API。

var exec = require('child_process').exec;var sys = require('sys');const hasFlowers = [];//通过上面教的方法,将想要偷取的明星mid放入数组。const idolsIds = [];function sleep(ms) {  return new Promise((resolve) => setTimeout(resolve, ms));}async function asyncForEach(array, callback) {  for (let index = 0; index < array.length; index++) {    await callback(array[index], index, array);  }}async function createCurlRequestLink() {  const startTime = new Date();  //填入你的OpenId	const openid = 'XXXX';  await asyncForEach(idolsIds, async (number) => {    // for(let number = 1150; number<=3000; number++){    const a = `curl XXXXXXX '{\"openid\":\"${openid}\",\"mid\":${number}}' --compressed`;    await sleep(280);    exec(a, (error, stdout, stderr) => {      try {        console.log(stdout);        const json = JSON.parse(stdout);        if (json.status > 0) {          hasFlowers.push(number);          console.log(`鲜花总数: ${hasFlowers.length * 8}`);        }      } catch (err) {        console.log(err);      }    });  });  const endTime = new Date();  console.log(`花费时间: ${(endTime - startTime) / 1000}`);}createCurlRequestLink();// 每2分钟去偷取一次setInterval(createCurlRequestLink, 120000);复制代码

然后用 node 文件名 就可以运行它了。

把它丢在服务器上,用screen放在background进程里跑起来。

不知不觉中,几十万的花已经到手啦!

原理是什么?开发者就不能进行防护吗?

不论是小程序还是APP,都是在你的手机上。它需要和远程的服务器进行数据交互,也就是API请求。 本质上,我们只是进行了一次模拟请求,相当于你手机进行了点击。 而讲到刚刚的部分,我们也依旧是在合理的操作范围许可内。并没有任何的作弊行为,只不过让偷花的行为变得自动化了起来。能够在凌晨也让电脑替我们偷花。

至于开发者能不能防护呢? 这个答案是肯定的。 比如,对每一个openid进行来源监测,访问设备的监控,请求的时候携带额外参数判断来源。 如果短期内Openid进行了多个设备的更换,标记为可疑,等等。

但是是否值得,就是另一个讨论的范畴了。

总结

看到了这里,你可以随心所欲的给你的女神/男神去刷票啦! 既没有浪费时间去一直等待投票的时间,又得到了心里的满足。 如果你看完了这篇文章,那恭喜你,还学到了新知识。

/为了免去不必要的麻烦,我隐去了我使用的投票软件。/

转载于:https://juejin.im/post/5be45d83e51d454b80298a6e

你可能感兴趣的文章
使用native 查询时,对特殊字符的处理。
查看>>
maclean liu的oracle学习经历--长篇连载
查看>>
ECSHOP调用指定分类的文章列表
查看>>
分享:动态库的链接和链接选项-L,-rpath-link,-rpath
查看>>
Javascript一些小细节
查看>>
禁用ViewState
查看>>
Android图片压缩(质量压缩和尺寸压缩)
查看>>
nilfs (a continuent snapshot file system) used with PostgreSQL
查看>>
【SICP练习】150 练习4.6
查看>>
HTTP缓存应用
查看>>
KubeEdge向左,K3S向右
查看>>
DTCC2013:基于网络监听数据库安全审计
查看>>
CCNA考试要点大搜集(二)
查看>>
ajax查询数据库时数据无法更新的问题
查看>>
Kickstart 无人职守安装,终于搞定了。
查看>>
linux开源万岁
查看>>
linux/CentOS6忘记root密码解决办法
查看>>
25个常用的Linux iptables规则
查看>>
集中管理系统--puppet
查看>>
分布式事务最终一致性常用方案
查看>>