【JS逆向】保姆级图文教程,获取某名片网js逆向后的真实数据!

爬与反爬,就相当于矛与盾,攻与防,与普通爬虫相比,反爬虫愈发普遍,相对于普通爬虫,逆向爬虫的困难度提升了不少,非常考验选手的专业素养,当然也难倒了本渣渣这种业余选手。

可能不少新人对于反爬比较畏惧,尤其是常见的JS反爬,需要涉及到多方面的知识,不是简单的post或者get请求可搞定,折腾到头秃。

67cbc541fc0e71dfb4618a804690cd95.png

下面带来本渣渣分享的保姆级图文教程,获取某名片网js逆向后的真实数据,后期会更新一系列的JS逆向反爬文章,欢迎关注本渣渣,同时强烈欢迎大佬哥大姐大带带本渣渣,真的学不会了。

网站地址:

aHR0cHM6Ly93d3cucWltaW5ncGlhbi5jb20vZmlub3NkYS9wcm9qZWN0L3BxdWVyeQ==

网站特征: 

加密json数据段:encrypt_data

3ff48f47357efe21d9f9c4687a376755.png

保姆级图文教程

所谓保姆级,那么截图一定要大而全,图片较多,建议wifi下浏览,土豪随意。

  1. 抓包分析数据,ctrl+f 搜索关键字 encrypt_data

547cb2b21af7d534d4c42374f54c1dee.png

2.关键js文件

96467d9a9c064aaa54de414bb472faf6.png

3.打开这段js文件 open in sources panel 

eb402ee2ecd758f066284296804b7e71.png

4.解析js格式

19b23b345dc1bc40586bef9e072c3880.png

5.解析后格式效果

6205c0a5115d190a2cdbace03d755205.png

6.ctrl+f 继续搜索关键字 encrypt_data 可以看到有6处

572f5a4c34a40abfbdff4de1547110e3.png

7.找到最可疑的一处,也就是第5处,有关键字信息 return

b94802a2c9a3223eed03a12f08427f64.png

8.打上断点,开始调试

9f54827890c8b43f09677d435fb674e1.png

9.刷新调试,可以看到断点处数据情况

121181ff84d905266797bc06335310c6.png

10.console.log 打印输出 验证

ee1e6275fba26ab351b9e62043f0a6e4.png

11.很明显加密数据与post请求一致

5f701aa943b083b3b487ea8b04738d9d.png

12.一步步调试,断点下一步

c5b0f93f271ca1e00d35c0614a92daa0.png

13.数据出来了 t

28b51d9c65a5350cc062e57f98bd1414.png

14.console.log t 打印输出 验证

77ac9c088dae5cb3febece97c0769ed2.png

15.t.data 数据验证

d658441183da87d2dc3fd58c43521ac8.png

16.关键加密函数 关键字 JSON.parse

41e7f8203f7d103a548bf7973499dba3.png

17.点击进入查看函数

ece39cd462fab7dfca3724fed5b407cc.png

18.打上断点,调试

0fdd469710098981215a1cc2dbf9cccd.png

19.刷新网页调试,打印输出看到e的值

cffae15cff1f5a32ab5997e13d4b263d.png

20.o函数

7ce56e5b6955b9e0d166639c0f8ba493.png

21.decode 函数

5b16eb4214e76a142e653f4132d1ab69.png

22.规整化格式函数

748f35f4c7227ab80b83c34d947ac902.png

23.两个缺失的参数

79931d79d43b5281733a2034be7ff683.png

24.解密数据验证查询

b3c55ff3aa45543e58000fddac6caba9.png

踩的坑

  1. 浏览器断点调试不会搞

多找相关教程,多调试,多尝试试试看!

  1. js代码未扣完全

未扣全的js代码段,一般运行js会报错,需要排查,当然前提是需要学习和熟悉一下js代码,console.log 打印输出多用!

一是代码未扣全,二是丢失参数,需要补齐!

  1. Python 调用js文件报错

这里报错 UnicodeDecodeError ‘gbk‘ codec can‘t decode byte 0x86 ,搜索找到答案,估计后期还会出现各种问题。

js文件运行效果:

2d70d3591af9c69ebd0c9d0351832c93.png

python运行效果:

7fc65b2f3fbc2ae29db333f402274415.png

附运行代码参考:

# -*- 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()

完整源码打包分享 

关注本渣渣公众号 

82b1d9425762aa4cb24739cd8b40c81f.jpeg

后台回复“名片” 

获取所有代码

后期会更新一系列的逆向反爬文章,感兴趣的话可以分享收藏一下,最好能关注一下本渣渣公众号,如有意,可加本渣渣微信交流!

毕竟用爱发电,可能随时停电!

更多参考资料

  1. 群聊吃瓜引发的JS破解教程-咸鱼学python

https://mp.weixin.qq.com/s/Hxt39LSvNsqm17bgfrjddQ

  1. JavaScript逆向教程,不来了解一下么?-Python学习开发

https://mp.weixin.qq.com/s/UP3EiMIuUV5jSQZIP7FJ8A

  1. js逆向系列:企名片,获取js逆向后的真实数据!-shadowtalon

https://blog.csdn.net/shadowtalon/article/details/108563352

  1. 爬虫JS逆向思路之企名片(data解密)-NUT_0

https://blog.csdn.net/NUT_0/article/details/129426006

  1. 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,写作,阅读的内容噢~

扫一扫下方二维码即可关注我噢~

045abb031ac853f46132abaedd10a241.jpeg

9fb34abca5862ddc9fcef7739a04e16c.png

关注我的都变秃了

说错了,都变强了!

不信你试试

d6a4133bd5db490a9b81accc2e9555f0.jpeg

扫码关注最新动态

公众号ID:eryeji

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值