猿人学题库十四题——js_fuck核心代码加密

44 篇文章 3 订阅
37 篇文章 58 订阅

猿人学题库十四题——js_fuck核心代码加密

 

1.  首先 进入 浏览器的开发者工具,

查看 网页Network的请求,多点击几次,查看请求的参数变化,可以看到 就俩个参数

  1. page:  页数

  2. uc:      加密的参数 (每次请求都是不一样的)

POST 请求,返回数据是对应的上的 

2. 解析请求参数

想找到请求的JS函数,可以在 请求的Initator栏目里面的找到 js 方法行数

点击跳转进去后,可以看到 [][(![]+[])[!+[]+!![]+!![]]+([]+{})[+!![]  这些乱七八糟的 【】 的骚操作,肯定看不懂

把看不懂的【】 东西,复制到 复制到控制台打印,把最后一个 () 去掉就好(这里()结尾是一个 JS的自执行函数),看到的就是 函数本体了

这里可以看到 js 做了什么操作,执行了 window.a 方法,有赋值给了   window.a

这里我们看到 上面的 window.a 函数里面是个 加密的操作  CryptoJS.AES,ECB 模式,

1. 可以用python实现,

2. 也可以直接搬就好了 (JS 调试工具),或 手动扣 JS 

AES 加密的参数  是  window.t + '|' + window.num ,window.t 是 上面的时间戳,好实现,

在上面的请求发送的地方,我们可以看到  window.a 就是 请求的 uc 参数,这样就可以模拟实现 us 参数了,

点击下一页可以看到 num为2, window.num 也是等于 num 的,call 函数的参数,后面可以看到 就是当前页面的 页数

到这里就可以知道 俩个参数的由来,可以模拟实现请求的过程了。

 

3.  撸代码 

通过 JS调试工具 直接复制出 加密的 JS 方法,用python调用

1.  扣 JS 代码 

下面 我打开 JS 调试工具 演示如下:

                   

# 这里 key 加密的密钥 改成自己的就好
var k = 'wdf2ff*TG@*(F4)*YH)g430HWR(*)' + 'wse';
var key = CryptoJS.enc.Utf8.parse(k);

2.  python 代码

# -*- encoding=utf-8 -*-
import requests
import execjs
import time

cookies = {
    '__jsl_clearance': '1608261821.430^|0^|clD4VpfqhdaLBWywKWy^%^2FZyfi6d_ec7ca97682d99d81fce6db1bdab965553D',
    'Hm_lvt_337e99a01a907a08d00bed4a1a52e35d': '1608000796,1608016679,1608255922,1608624452',
    'sessionid': 'cxmtcjx4lmxe707wp40qdi0n9pvc0v51',
    'Hm_lpvt_337e99a01a907a08d00bed4a1a52e35d': '1608624789',
}
headers = {
    'Proxy-Connection': 'keep-alive',
    'Pragma': 'no-cache',
    'Cache-Control': 'no-cache',
    'Accept': 'application/json, text/javascript, */*; q=0.01',
    'X-Requested-With': 'XMLHttpRequest',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36',
    'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
    'Origin': 'http://www.python-spider.com',
    'Referer': 'http://www.python-spider.com/challenge/14',
    'Accept-Language': 'zh-CN,zh;q=0.9',
}

with open('./JS/AES.js') as f:
    Str_code= f.read()
js=execjs.compile(Str_code)

t = int(time.time())
word = str(t)+'|'+'1'
result=js.call('AES_Encrypt',word)
word2=js.call('AES_Decrypt',result)


Count = 0
for i in range(1,101):
    t = int(time.time())
    word = str(t) + '|' + str(i)
    result = js.call('AES_Encrypt', word)
    data = {
      'page': str(i),
      'uc': result
    }
    response = requests.post('http://www.python-spider.com/api/challenge14', headers=headers,data=data, verify=False)
    res = response.json()
    print(res)
    for data in res['data']:
        Count +=int(data['value'])

    print('Count -->>',Count)

# 答案 5175137

 

总结 :

通过 参数加密的方式来进去反爬虫,而我们需要找出网站加密参数的方式和逻辑,然后生成参数携带请求获取正确的数据,这里可能要了解一下加密的知识可以补充一些,多活用根据吧

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

.含笑.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值