吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 15238|回复: 77
上一主题 下一主题
收起左侧

[Python 转载] 分析并破解某猫网站js数据接口请求参数加密

  [复制链接]
跳转到指定楼层
楼主
老飞机 发表于 2020-4-12 19:30 回帖奖励
============================================================================================================================
              1:手把手交小白破解js加密
    2:主角:



   今天发现国内某猫网站数据挺诱人,反手给它抓了个包,哦豁下面图中是什么。好慌

            




















不皮了;现在开始分析:
===================================================防偷窥===========================================================================
有点意思,它的参数是加密的





干它就完事了
ctrl+shift+f 调出全局搜索框,直接搜索网站后半截:/api/banner/index进去到js里面





点击下面{}可以优化代码




这有个参数很眼熟;

仔细看看这不就是请求的参数??

============================================================================================================================
长长的一串真的好慌;接下来就是硬给它下几个断点


出来了好多,慢慢分析



继续进行断点



接下来怎么办

它在m这个变量完成了加密




============================================================================================================================


不慌,先屡一下思路
仔细想了想:它在m这个变量完成了加密,我们直接找到调用它的方法不就行了??


鼠标移到s这,等它弹出这个框框,然后鼠标右击Show function definition进去它的方法;




============================================================================================================================


这个是什么???



进来可以看到;秘钥和偏移,以及加密方法

加密方法:AES/CBC/Pkcs7Padding/HEX

[PHP] 纯文本查看 复制代码
o = r.a.enc.Utf8.parse("x;j/6olSp})&{ZJD")
a = r.a.enc.Utf8.parse("znbV%$JN5olCpt<c");

 mode: r.a.mode.CBC
 padding: r.a.pad.Pkcs7



============================================================================================================================


接下来回到原来那串不知道什么鬼的长长一串data参数


随便找个cbc解密网站:https://www.ssleye.com/aes_cipher.html


可以看到,解密出来没问题,和断点是看到的一模一样




============================================================================================================================


又发现问题了,这个signature又是什么鬼??



带着问题回到原来的断点位置,仔细分析一波:




这个不就是signature值


既然找到了原型,可以看到,开始是那么长的一串,经过了不知道什么的加密,变成了短短的32位。
各位应该想到了,这个不就是md5??


接下来找一个在线加密网站测试一下。

一毛一样,加密参数解决了,接下来用Python代码尝试一下请求




============================================================================================================================


没毛病,请求出来了





接下来就是给数据解密了,首先我们去看看,在第三方网站能不能解密出来:




OK,py代码解密也是没有问题。

============================================================================================================================


AES/CBC/PKCS7Padding 解密代码:
[Python] 纯文本查看 复制代码
from Crypto.Cipher import AESfrom binascii import b2a_hex, a2b_hex
from cryptography.hazmat.primitives import padding
from cryptography.hazmat.primitives.ciphers import algorithms
 
'''
AES/CBC/PKCS7Padding 加密解密
环境需求:
pip3 install pycryptodome
'''
 
 
class PrpCrypt(object):
 
    def __init__(self):
        self.key = '625202f9149e061d'.encode('utf-8')
        self.mode = AES.MODE_CBC
        self.iv = b'5efd3f6060e20330'
        # block_size 128位
 
    # 加密函数,如果text不足16位就用空格补足为16位,
    # 如果大于16但是不是16的倍数,那就补足为16的倍数。
    def encrypt(self, text):
        cryptor = AES.new(self.key, self.mode, self.iv)
        text = text.encode('utf-8')
 
        # 这里密钥key 长度必须为16(AES-128),24(AES-192),或者32 (AES-256)Bytes 长度
        # 目前AES-128 足够目前使用
 
        text = self.pkcs7_padding(text)
 
        self.ciphertext = cryptor.encrypt(text)
 
        # 因为AES加密时候得到的字符串不一定是ascii字符集的,输出到终端或者保存时候可能存在问题
        # 所以这里统一把加密后的字符串转化为16进制字符串
        return b2a_hex(self.ciphertext).decode().upper()
 
    @staticmethod
    def pkcs7_padding(data):
        if not isinstance(data, bytes):
            data = data.encode()
 
        padder = padding.PKCS7(algorithms.AES.block_size).padder()
 
        padded_data = padder.update(data) + padder.finalize()
 
        return padded_data
 
 
    # 解密后,去掉补足的空格用strip() 去掉
    def decrypt(self, text):
        #  偏移量'iv'
        cryptor = AES.new(self.key, self.mode, self.iv)
        plain_text = cryptor.decrypt(a2b_hex(text))
        # return plain_text.rstrip('\0')
        return bytes.decode(plain_text).rstrip("\x01"). \
            rstrip("\x02").rstrip("\x03").rstrip("\x04").rstrip("\x05"). \
            rstrip("\x06").rstrip("\x07").rstrip("\x08").rstrip("\x09"). \
            rstrip("\x0a").rstrip("\x0b").rstrip("\x0c").rstrip("\x0d"). \
            rstrip("\x0e").rstrip("\x0f").rstrip("\x10")
 
 
# 加解密
if __name__ == '__main__':
    pc = PrpCrypt()
    a = '{"kind_id":"","page":1,"label_id":"","writer_id":"","date":""}'
    print("加密前:%s" % a)
    b = pc.encrypt(a)
    print("加密后:%s" % b)
    print("大写变小写:%s" % b.lower())
    v = pc.decrypt('0DB0A472B06172ED60E35371ABA83D8182AB92B58ADA52C1B746643210B40C883E568A3D29C202D1AE82952434E4029DE1C6121A29315B3815FEBCCAB4C06D8F')
    print('解密后',v)









============================================================================================================================


最后:

[Python] 纯文本查看 复制代码
加密方法:AES/CBC/Pkcs7Padding/HEX
key:x;j/6olSp})&{ZJD

iv :znbV%$JN5olCpt<c


涉及违规
想要源码的大伙可以去Github上面搜索

免费评分

参与人数 15吾爱币 +24 热心值 +14 收起 理由
MaxTao + 1 + 1 牛了,楼主用的是py3还是py2的
故丶事i + 1 + 1 用心讨论,共获提升!
isalie + 1 + 1 谢谢@Thanks!
sxlixiaoyang + 2 + 1 不准备几包特仑苏这帖子都不敢看下去!~~
飘缈孤鸿影 + 1 + 1 大佬威武
_小白 + 1 + 1 用心讨论,共获提升!
Kiss灬唯 + 1 + 1 身体越来越差了啊。看来禁止未成年上网是对的。
无疆北月 + 1 + 1 大佬nb plus
lin_xop + 1 + 1 用心讨论,共获提升!
15126819695 + 1 老师 牛啊
skyward + 1 + 1 谢谢@Thanks!
ShiJiong + 1 + 1 热心回复!
mclcnl + 1 + 1 期待大佬解决我想问的软件 哈哈
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
夜陌 + 3 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

推荐
时光书窝 发表于 2020-4-12 19:40
伤身体还是算了算了
推荐
 楼主| 老飞机 发表于 2021-5-14 14:41 |楼主
本帖最后由 老飞机 于 2021-5-15 19:19 编辑
wannabe 发表于 2021-5-10 20:19
膜拜大佬,达到可以帮忙看看这个p的值不,地址:https://z1.m1907.cn/?jx=https://v.qq.com/x/cover/mcv8hk ...

[Java] 纯文本查看 复制代码
import time
import hashlib
import requests

def MD5(str):
    md = hashlib.md5()
    md.update(str.encode(encoding='utf-8'))
    return md.hexdigest()


def Get_Time():
    l = time.time()*1000
    u = 6e4 * -480
    d = l + u + 36e5 * 8
    time_local = time.localtime(d / 1000)
    # 转换成新的时间格式(精确到秒)
    dt = time.strftime("%m", time_local)
    return int(dt) + 11397


def Get_M3u8():
    url = "https://z1.m1907.cn/api/v/?"
    today = time.strftime("%d", time.localtime(time.time()))
    z = MD5(str(int(today) + 9 + 9 ^ 10))
    z = MD5(z[0:10])
    params = {
            "z" : z,
            "jx" : "https://v.qq.com/x/cover/mcv8hkc8zk8lnov/z0036hyi31y.html",
            "s1ig" : Get_Time(),
            "g" : "",
            }
    response = requests.get(url , params = params).json()
    print(response)

Get_M3u8()
沙发
随心的我 发表于 2020-4-12 19:34
3#
i52088 发表于 2020-4-12 19:36
大佬大佬  学习了
5#
夜陌 发表于 2020-4-12 19:40
视频源去水印 能扒拉下来?自己写了一个采集程序 能采集出来 就是有水印 能解决吗  没研究过网页解密
6#
mosou 发表于 2020-4-12 19:43
github地址 或者搜啥
7#
 楼主| 老飞机 发表于 2020-4-12 19:45 |楼主
mosou 发表于 2020-4-12 19:43
github地址 或者搜啥

zg10472580我的用户名
8#
 楼主| 老飞机 发表于 2020-4-12 19:46 |楼主
夜陌 发表于 2020-4-12 19:40
视频源去水印 能扒拉下来?自己写了一个采集程序 能采集出来 就是有水印 能解决吗  没研究过网页解密

这东西用户上传的的时候好像就是有水印了的,没研究过
9#
mosou 发表于 2020-4-12 19:52
mosou 发表于 2020-4-12 19:43
github地址 或者搜啥

已给star 啥时候解密手淘xsign的时候@下我 付费学
10#
A00 发表于 2020-4-12 19:53
学习了,谢谢
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 16:13

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表