zoukankan      html  css  js  c++  java
  • 猿人学第一题比赛题目保姆级教程

    水一篇,和大佬们的差距不是一丁点的大啊~~~~~

    URL:http://match.yuanrenxue.com/match/1

     就是计算所有费用的平均值。

    F12,debugger出现

    右键点击,选择箭头这个

     接下来刷新,就可以跳过debugger了查看网络面板

    明显的XHR请求

     看一下请求参数

     直接打上XHR断点,查看堆栈进行调试,不熟的话,推荐这个:https://www.cnblogs.com/ajaxlu/p/11855343.html

    还有各偷懒的地方

     直接点这个跳转,进去看到一长串,这行没法格式化,直接找在线js解析,或者创建html,把该删除的一删除

     下方点击美化,然后看着点删除

    然后就剩这么点了

     下方点击美化,这下就看着很清爽了

    建议下载个webstorm,随便搞个激活码,这里推荐:微信公众号 -- 前端码农仔,回复:获取webstorm激活码

    webstorm新建js文件,把美化过的js代码放进去,Ctrl+Alt+L再次格式化代码,剩下的该手动的手动调下

     差不多这样,然后最后一行加:

    console.log(oo0O0())

    缺啥补啥就行,下面的错误截图稍微记录下

     干掉这行,顺带e,f,g,h,w()都干掉,就剩个dd(),一看就是调用嘛,那就是没扣的,接着去扣代码

     还是刚才那个界面,Ctrl+F,输入dd(),然后把上面那个dd()函数扣下来

    ​​​​不太好复制,有点恼火啊

    接着跑,又出错

     这里加个window = {};

     再跑,又错

     加window.a,还是一样,在刚才的查看源码界面搜索 :window.a

     你没看错就是这一长串,好好粘贴,不要偷懒搞错了,我就是这里马马虎虎的粘贴的,后面一直找错误

    接着跑,又错

     差不多就是这样吧,接着控制台输出下这个f和h

     包括前面的e和g也都输出下

     拼接起来你就看的出来这是js的方法

    window.b += String.fromCharCode(window.a[i].charCodeAt() - i - window.c)

    改写完就是这样,接着跑,又报错

     atob这个函数可以去搜一下,js中base64转码的函数,在控制台输出下

     window['b']其实就是一长段base64的代码,J('0x0', ']dQW')和J('0x1', 'GTu!')可以在webstorm中输出看一下

    还有'x27' + mw + 'x27'

     就是把'mw'替换成了oo0O0(mwqqppz)

    注意看下面,oo0O0(mwqqppz)也就是返回了一个空

     

     那么也就是m = window.f

    那这个window.f是哪里的值呢?

    还记得刚才的window.b的转码吗,将控制台输出的那段base64的代码放在js在线解析的在线工具中美化查看下

     最后一行,我们看到了window.f的操作,熟悉的mwqqppz,也就是说将oo0O0(timestamp.toString())传入hex_md5()中就出来了

    将转码的这段代码复制下来,创建js文件

    将window.f = hex_md5(mwqqppz)

    修改为:

    var timestamp=Date.parse(new Date());
    f = hex_md5(timestamp.toString()) + "|" + timestamp/1000;;
    console.log(f)

    就是和之前辛辛苦苦扣下来的代码没有关系了,然后运行,提一嘴,安装个node.js环境

    这样就出来了,用python代码去执行这个js文件,再拿着结果去请求这个网站就可以了

    第二种的话,你可以选择去修改之前扣下来的代码

    细看之后发现这两行没啥用,那就干掉

    关于这里,简单来说这个atob不行,那就换个方式去解码base64

    m = eval((new Buffer.from(window['b'], 'base64').toString('utf8')).replace('mwqqppz', "'" + mw + "'"))
    return m + ''+timestamp / 1000

    可以搜一下from和atob方法的解释哈

    现在呢后面的时间戳已经出来了,然后我们把oo0O0()和dd()合并在一起

    m呢就是mw,也就是mwqqppz,所以在dd()函数中定义下,list这个变量可以干掉,至于m我们已经重新在dd()中已经定义了

    所以mw呢就是timestamp.toString(),window.f就是下面转码计算出来的了

    整体代码如下:

    运行结果如下:

    爬取结果如下:

    自有风云来时雨, 似有风霜沾蓑衣
  • 相关阅读:
    C语言第0次作业
    c语言博客作业02循环结构
    C语言博客作业04数组
    存储过程,函数参数默认值的一些问题
    路线查询
    C# 猜数字
    使用 Ext.Net TreePanel,TabPanel控件 布局
    SQL SERVER 2005 动态行转列SQL
    CROSS APPLY 和OUTER APPLY 的区别
    处理表重复记录(查询和删除)
  • 原文地址:https://www.cnblogs.com/meipu/p/13880075.html
Copyright © 2011-2022 走看看