爬与反爬,就相当于矛与盾,攻与防,与普通爬虫相比,反爬虫愈发普遍,相对于普通爬虫,逆向爬虫的困难度提升了不少,非常考验选手的专业素养,当然也难倒了本渣渣这种业余选手。
可能不少新人对于反爬比较畏惧,尤其是常见的JS反爬,需要涉及到多方面的知识,不是简单的post或者get请求可搞定,折腾到头秃。
下面带来本渣渣分享的保姆级图文教程,获取某名片网js逆向后的真实数据,后期会更新一系列的JS逆向反爬文章,欢迎关注本渣渣,同时强烈欢迎大佬哥大姐大带带本渣渣,真的学不会了。
网站地址:
aHR0cHM6Ly93d3cucWltaW5ncGlhbi5jb20vZmlub3NkYS9wcm9qZWN0L3BxdWVyeQ==
网站特征:
加密json数据段:encrypt_data
保姆级图文教程
所谓保姆级,那么截图一定要大而全,图片较多,建议wifi下浏览,土豪随意。
抓包分析数据,ctrl+f 搜索关键字 encrypt_data
2.关键js文件
3.打开这段js文件 open in sources panel
4.解析js格式
5.解析后格式效果
6.ctrl+f 继续搜索关键字 encrypt_data 可以看到有6处
7.找到最可疑的一处,也就是第5处,有关键字信息 return
8.打上断点,开始调试
9.刷新调试,可以看到断点处数据情况
10.console.log 打印输出 验证
11.很明显加密数据与post请求一致
12.一步步调试,断点下一步
13.数据出来了 t
14.console.log t 打印输出 验证
15.t.data 数据验证
16.关键加密函数 关键字 JSON.parse
17.点击进入查看函数
18.打上断点,调试
19.刷新网页调试,打印输出看到e的值
20.o函数
21.decode 函数
22.规整化格式函数
23.两个缺失的参数
24.解密数据验证查询
踩的坑
浏览器断点调试不会搞
多找相关教程,多调试,多尝试试试看!
js代码未扣完全
未扣全的js代码段,一般运行js会报错,需要排查,当然前提是需要学习和熟悉一下js代码,console.log 打印输出多用!
一是代码未扣全,二是丢失参数,需要补齐!
Python 调用js文件报错
这里报错 UnicodeDecodeError ‘gbk‘ codec can‘t decode byte 0x86 ,搜索找到答案,估计后期还会出现各种问题。
js文件运行效果:
python运行效果:
附运行代码参考:
# -*- coding: UTF-8 -*-
#@公众号:eryji
#https://www.qimingpian.com/finosda/project/pquery
#https://blog.csdn.net/NUT_0/article/details/129426006
#https://blog.csdn.net/NUT_0/article/details/129425382
import subprocess
from functools import partial
subprocess.Popen = partial(subprocess.Popen, encoding='utf-8')
# import execjs导入之前执行 修改encoding
import requests
import execjs
def get_data():
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36"
}
url="https://vipapi.qimingpian.cn/search/productNewList"
data={
"page": 1,
"num":20,
"unionid":""
}
response=requests.post(url=url,headers=headers,data=data,timeout=6)
print(response.status_code)
print(response.json())
encrypt_data=response.json()['encrypt_data']
print(encrypt_data)
# 读取js文件
with open('demo.js', 'r',encoding='utf-8') as f:
js_code = f.read()
# 创建execjs的环境
ctx = execjs.compile(js_code)
# 调用js文件中的函数
result = ctx.call('my_decrypt',encrypt_data)
# 打印结果
print(result)
def get_encrypt_data():
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36"
}
url="https://vipapi.qimingpian.cn/search/productNewList"
data={
"page": 1,
"num":20,
"unionid":""
}
response=requests.post(url=url,headers=headers,data=data,timeout=6)
print(response.status_code)
print(response.json())
encrypt_data=response.json()['encrypt_data']
print(encrypt_data)
return encrypt_data
def get_js(encrypt_data):
env=execjs.get()
with open(r'qmp.js','r',encoding='utf-8') as f:
source=f.read()
ctx=env.compile(source)
result=ctx.call('s',encrypt_data)
print(result)
def run():
with open('qmp.js', encoding='utf-8-sig') as f:
js_code = f.read()
ctx = execjs.compile(js_code)
print(ctx.call("s", get_encrypt_data()))
def main():
encrypt_data=get_encrypt_data()
get_js(encrypt_data)
if __name__=='__main__':
#get_data()
#run()
main()
完整源码打包分享
关注本渣渣公众号
后台回复“名片”
获取所有代码
后期会更新一系列的逆向反爬文章,感兴趣的话可以分享收藏一下,最好能关注一下本渣渣公众号,如有意,可加本渣渣微信交流!
毕竟用爱发电,可能随时停电!
更多参考资料
群聊吃瓜引发的JS破解教程-咸鱼学python
https://mp.weixin.qq.com/s/Hxt39LSvNsqm17bgfrjddQ
JavaScript逆向教程,不来了解一下么?-Python学习开发
https://mp.weixin.qq.com/s/UP3EiMIuUV5jSQZIP7FJ8A
js逆向系列:企名片,获取js逆向后的真实数据!-shadowtalon
https://blog.csdn.net/shadowtalon/article/details/108563352
爬虫JS逆向思路之企名片(data解密)-NUT_0
https://blog.csdn.net/NUT_0/article/details/129426006
python用execjs执行接js解密时报错 UnicodeDecodeError ‘gbk‘ codec can‘t decode byte 0x86-NUT_0
https://blog.csdn.net/NUT_0/article/details/129425382
·················END·················
你好,我是二大爷,
革命老区外出进城务工人员,
互联网非早期非专业站长,
喜好python,写作,阅读,英语
不入流程序,自媒体,seo . . .
公众号不挣钱,交个网友。
读者交流群已建立,找到我备注 “交流”,即可获得加入我们~
听说点 “在看” 的都变得更好看呐~
关注关注二大爷呗~给你分享python,写作,阅读的内容噢~
扫一扫下方二维码即可关注我噢~
关注我的都变秃了
说错了,都变强了!
不信你试试
扫码关注最新动态
公众号ID:eryeji