某氪登录和网页数据解密流程

url: 'aHR0cHM6Ly8zNmtyLmNvbS9wLzIzNjc5ODYxNjQ5ODQyMDE='

网页数据解密

声明:本文只作学习研究,禁止用于非法用途,否则后果自负,如有侵权,请告知删除,谢谢!(手动狗头)

1.发送请求查看响应数据

文章的请求头信息也没有加密,也没有请求的载荷数据,查看下响应数据,看看是否存在文章 内容

浏览响应的数据也没有发现真正的文章内容,但是在 底部可以看到 有个 window.initialState 的数组 里面的参数有个 state 后面的值是一长串的 base64编码的字符串.

那么这个就是我们需要解密的数据了,咱可以先请求然后用正则匹配把这段加密的东西搞出来

# -*- coding: utf-8 -*-
'''
@IDE : PyCharm
@version : 3.9
@Auth : gouzi
@time : 2023/10/15 10:40
@Description:
'''
import requests
import base64
from lxml import etree
import re
​
headers = {
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
    "Accept-Language": "zh-CN,zh;q=0.9",
    "Cache-Control": "no-cache",
    "Connection": "keep-alive",
    "Pragma": "no-cache",
    "Sec-Fetch-Dest": "document",
    "Sec-Fetch-Mode": "navigate",
    "Sec-Fetch-Site": "same-origin",
    "Sec-Fetch-User": "?1",
    "Upgrade-Insecure-Requests": "1",
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 Edg/118.0.2088.46",
    "sec-ch-ua": "^\\^Chromium^^;v=^\\^118^^, ^\\^Microsoft",
    "sec-ch-ua-mobile": "?0",
    "sec-ch-ua-platform": "^\\^Windows^^"
}
cookies = {
    "sensorsdata2015jssdkcross": "^%^7B^%^22distinct_id^%^22^%^3A^%^2218b2931b25d63d-08aa76c3e8a47a-78505770-1821369-18b2931b25e11b9^%^22^%^2C^%^22^%^24device_id^%^22^%^3A^%^2218b2931b25d63d-08aa76c3e8a47a-78505770-1821369-18b2931b25e11b9^%^22^%^2C^%^22props^%^22^%^3A^%^7B^%^22^%^24latest_traffic_source_type^%^22^%^3A^%^22^%^E7^%^9B^%^B4^%^E6^%^8E^%^A5^%^E6^%^B5^%^81^%^E9^%^87^%^8F^%^22^%^2C^%^22^%^24latest_referrer^%^22^%^3A^%^22^%^22^%^2C^%^22^%^24latest_referrer_host^%^22^%^3A^%^22^%^22^%^2C^%^22^%^24latest_search_keyword^%^22^%^3A^%^22^%^E6^%^9C^%^AA^%^E5^%^8F^%^96^%^E5^%^88^%^B0^%^E5^%^80^%^BC_^%^E7^%^9B^%^B4^%^E6^%^8E^%^A5^%^E6^%^89^%^93^%^E5^%^BC^%^80^%^22^%^7D^%^7D",
    "aliyungf_tc": "87a15f620fd2d71d70704946aa353992ba8148f24a896fdd26a3f2dda630d053",
    "acw_tc": "0a6fd1ef16973374951548793e6f60efb7406e5628b6676540af7b96b8de7d",
    "Hm_lvt_1684191ccae0314c6254306a8333d090": "1697203204,1697337496",
    "Hm_lvt_713123c60a0e86982326bae1a51083e1": "1697203204,1697337496",
    "Hm_lpvt_713123c60a0e86982326bae1a51083e1": "1697337578",
    "Hm_lpvt_1684191ccae0314c6254306a8333d090": "1697337578",
    "SERVERID": "d36083915ff24d6bb8cb3b8490c52181^|1697337581^|1697337496"
}
url = "https://36kr.com/p/2367986164984201"
response = requests.get(url, headers=headers, cookies=cookies)
tree = etree.HTML(response.text)
data = tree.xpath('/html/body/script/text()')[0]
baase64_data =re.findall('.*?state":"(.*?)","',data)[0]
#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

2. 找到解密入口

直接全局搜索 window.initialState

3. 分析解密模式

然可以发现这是一个 AES加密,模式是 EBC , 该模式是不用 iv的


原文的key = "efabccee-b754-4c

既然加密方式 和模式 ,key 都知道 了,我们就可以用python 来解密了.

# -*- coding: utf-8 -*-
'''
@IDE : PyCharm
@version : 3.9
@Auth : gouzi
@time : 2023/10/15 10:40
@Description:
'''
import requests
import base64
from lxml import etree
import re
from Crypto.Cipher import AES
​
headers = {
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
    "Accept-Language": "zh-CN,zh;q=0.9",
    "Cache-Control": "no-cache",
    "Connection": "keep-alive",
    "Pragma": "no-cache",
    "Sec-Fetch-Dest": "document",
    "Sec-Fetch-Mode": "navigate",
    "Sec-Fetch-Site": "same-origin",
    "Sec-Fetch-User": "?1",
    "Upgrade-Insecure-Requests": "1",
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 Edg/118.0.2088.46",
    "sec-ch-ua": "^\\^Chromium^^;v=^\\^118^^, ^\\^Microsoft",
    "sec-ch-ua-mobile": "?0",
    "sec-ch-ua-platform": "^\\^Windows^^"
}
cookies = {
    "sensorsdata2015jssdkcross": "^%^7B^%^22distinct_id^%^22^%^3A^%^2218b2931b25d63d-08aa76c3e8a47a-78505770-1821369-18b2931b25e11b9^%^22^%^2C^%^22^%^24device_id^%^22^%^3A^%^2218b2931b25d63d-08aa76c3e8a47a-78505770-1821369-18b2931b25e11b9^%^22^%^2C^%^22props^%^22^%^3A^%^7B^%^22^%^24latest_traffic_source_type^%^22^%^3A^%^22^%^E7^%^9B^%^B4^%^E6^%^8E^%^A5^%^E6^%^B5^%^81^%^E9^%^87^%^8F^%^22^%^2C^%^22^%^24latest_referrer^%^22^%^3A^%^22^%^22^%^2C^%^22^%^24latest_referrer_host^%^22^%^3A^%^22^%^22^%^2C^%^22^%^24latest_search_keyword^%^22^%^3A^%^22^%^E6^%^9C^%^AA^%^E5^%^8F^%^96^%^E5^%^88^%^B0^%^E5^%^80^%^BC_^%^E7^%^9B^%^B4^%^E6^%^8E^%^A5^%^E6^%^89^%^93^%^E5^%^BC^%^80^%^22^%^7D^%^7D",
    "aliyungf_tc": "87a15f620fd2d71d70704946aa353992ba8148f24a896fdd26a3f2dda630d053",
    "acw_tc": "0a6fd1ef16973374951548793e6f60efb7406e5628b6676540af7b96b8de7d",
    "Hm_lvt_1684191ccae0314c6254306a8333d090": "1697203204,1697337496",
    "Hm_lvt_713123c60a0e86982326bae1a51083e1": "1697203204,1697337496",
    "Hm_lpvt_713123c60a0e86982326bae1a51083e1": "1697337578",
    "Hm_lpvt_1684191ccae0314c6254306a8333d090": "1697337578",
    "SERVERID": "d36083915ff24d6bb8cb3b8490c52181^|1697337581^|1697337496"
}
url = "https://36kr.com/p/2367986164984201"
response = requests.get(url, headers=headers, cookies=cookies)
tree = etree.HTML(response.text)
data = tree.xpath('/html/body/script/text()')[0]
baase64_data =re.findall('.*?state":"(.*?)","',data)[0]
key = "efabccee-b754-4c".encode('utf-8')
aes = AES.new(key, AES.MODE_ECB)
data = aes.decrypt(base64.b64decode(baase64_data))
print(data.decode())

4. 发送请求获取网页数据

运行结果:

简简单单

登录加密逆向

1. 发送登录请求查看数据

我这里使用的事 邮箱登录,手机号登录也是一样的抓包,可以看到请求头数据并没有加密的

我们看在载荷数据,param数组里面 有三个参数是动态的 account,password ,timestamp

按照以往的案例判断 timestamp 是一个13为的时间戳,那么就看下另外的两个参数的加密吧

2. 搜索账号密码加密入口

发现那么多结果,咱依次打上断点看看定位到哪了

发现断在这了

很明显i.b就是加密函数

3. 分析加密流程

我们进去加密的函数看看

第一次加密的参数是手机号,第二次是密码,然后进行RSA加密

根据上述分析,可以发现这个的加密后的返回的值是动态的,有发现这个 setPublicKey 也可以推断该加密是RSA加密

我们可以自己编写python 代码进行测试 公钥文件 rsa.public

-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCeiLxP4ZavN8qhI+x+whAiFpGWpY9y1AHSQC86qEMBVnmqC8vdZAfxxuQWeQaeMWG07lXhXegTjZ5wn9pHnjg15wbjRGSTfwuZxSFW6sS3GYlrg40ckqAagzIjkE+5OLPsdjVYQyhLfKxj/79oOfjl/lV3rQnk/SSczHW0PEyUbQIDAQAB
-----END PUBLIC KEY-----
​

4. 发送登录请求

编写 python 文件 登录.py

# -*- coding: utf-8 -*-
'''
@IDE : PyCharm
@version : 3.9
@Auth : gouzi
@time : 2023/10/13 21:31
@Description:
'''
import requests
import json
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5
import base64
import subprocess
from functools import partial
​
subprocess.Popen = partial(subprocess.Popen, encoding='utf-8')
import execjs
import time
​
t = str(int(time.time() * 1000))
​
​
def rsa_encrypt(text: str, public_key: str, length=117):
    '''
    :param text: 代加密文本
    :param public_key:  公钥
    :return:  加密后结果
    同样的文本和公钥加密后结果每次不一样
    '''
​
    # 先对公钥进行处理
    public_key = [public_key[64 * _: 64 * _ + 64] for _ in range(0, len(public_key) // 64 + 1)]
    public_key = [_ for _ in public_key if _]
    public_key = '''-----BEGIN PUBLIC KEY-----\n''' + '\n'.join(public_key) + '''\n-----END PUBLIC KEY-----'''
    # 字符串指定编码(转为bytes)
    public_key = public_key.encode()
​
    # 字符串指定编码(转为bytes)
    text = text.encode('utf-8')
    # 构建公钥对象
    cipher_public = PKCS1_v1_5.new(RSA.importKey(public_key))
    # 加密(bytes)
    # 如果内容不多可以直接加密
    #text_encrypted = cipher_public.encrypt(text)
​
    # 内容太多根据长度分段加密
​
    text_encrypted = []
    for i in range(0, len(text), length):
        print("text[I]:::", i)
        print("text[LENGTH]:::", length)
        text_encrypted.append(cipher_public.encrypt(text[i:i + length])) #.encode('utf-8')
    # text_encrypted="".join(text_encrypted)
    print("个数", len(text_encrypted))
​
    text2 = bytes()
    for i in range(0, len(text_encrypted)):
        print("text2:::", text2)
        text2 = text2 + bytes(text_encrypted[i])
​
    # base64编码,并转为字符串
    text_encrypted_base64 = base64.b64encode(text2).decode()
    print("text_encrypted_base64:::", text_encrypted_base64)
    return text_encrypted_base64
​
​
headers = {
    "Accept": "*/*",
    "Accept-Language": "zh-CN,zh;q=0.9",
    "Cache-Control": "no-cache",
    "Connection": "keep-alive",
    "Content-Type": "application/json",
    "Origin": "https://36kr.com",
    "Pragma": "no-cache",
    "Referer": "https://36kr.com/",
    "Sec-Fetch-Dest": "empty",
    "Sec-Fetch-Mode": "cors",
    "Sec-Fetch-Site": "same-site",
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36 Edg/117.0.2045.60",
    "sec-ch-ua": "\"Microsoft Edge\";v=\"117\", \"Not;A=Brand\";v=\"8\", \"Chromium\";v=\"117\"",
    "sec-ch-ua-mobile": "?0",
    "sec-ch-ua-platform": "\"Windows\""
}
cookies = {
    "Hm_lvt_713123c60a0e86982326bae1a51083e1": "1697203204",
    "Hm_lpvt_713123c60a0e86982326bae1a51083e1": "1697203204",
    "Hm_lvt_1684191ccae0314c6254306a8333d090": "1697203204",
    "Hm_lpvt_1684191ccae0314c6254306a8333d090": "1697203204",
    "sajssdk_2015_cross_new_user": "1",
    "sensorsdata2015jssdkcross": "%7B%22distinct_id%22%3A%2218b2931b25d63d-08aa76c3e8a47a-78505770-1821369-18b2931b25e11b9%22%2C%22%24device_id%22%3A%2218b2931b25d63d-08aa76c3e8a47a-78505770-1821369-18b2931b25e11b9%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_referrer%22%3A%22%22%2C%22%24latest_referrer_host%22%3A%22%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%7D%7D",
    "aliyungf_tc": "b9adffdd583fc415db84f30b5b4a1f03dc73c490d666ad960a594b4551459111"
}
​
​
def get_data():
    with open('get_pwd_encrypt.js', encoding='utf-8') as f:
        JS = f.read()
    code = execjs.compile(JS)
    # e = {"mobileNo": "13767300771", "password": "123456",
    #      "phoneItc": {"id": 1, "country": "中国大陆", "area": "亚洲", "code": "86"}}
    # t1 = 'mobileNo'
    # ms = code.call('ms', e, t1, '')
    paramPublicKey = 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCeiLxP4ZavN8qhI+x+whAiFpGWpY9y1AHSQC86qEMBVnmqC8vdZAfxxuQWeQaeMWG07lXhXegTjZ5wn9pHnjg15wbjRGSTfwuZxSFW6sS3GYlrg40ckqAagzIjkE+5OLPsdjVYQyhLfKxj/79oOfjl/lV3rQnk/SSczHW0PEyUbQIDAQAB'
    mobileNo = rsa_encrypt('13767300771', paramPublicKey)
    pwd = rsa_encrypt('123456',paramPublicKey)
    data = {
        "krtoken": "",
        "partner_id": "web",
        "timestamp": t,
        "param": {
            "countryCode": "86",
            "mobileNo": mobileNo ,
            "password": pwd
        }
    }
    data = json.dumps(data, separators=(',', ':'))
​
    return data
​
def main():
    url = "https://gateway.36kr.com/api/mus/login/byMobilePassword"
    data = get_data()
    response = requests.post(url, headers=headers, cookies=cookies, data=data)
​
    print(response.text)
​
if __name__ == '__main__':
    main()

运行结果:

难度等级:普通

总结:

按照已有案例的进行分析,可以发现这个加密的方式并没有混淆过,所以只要得出加密方式就可以很容易解密了.总体来说难点不会算高,不过对于新手而已可能会有点吃力.上述通过python第三方模块实现加解密过程的,因为网页的JS代码,手动扣的话比较麻烦些.不过最后能够实现结果就可以了.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值