码上爬-第7&8题

码上爬-第7&8题

靶场地址:

7: 码上爬 - 全网一站式爬虫刷题平台

8: 码上爬 - 全网一站式爬虫刷题平台

js加密 & js混淆

题七:千山鸟飞绝

打开控制台有无限debugger

找了个油猴插件hook掉: remove-debugger

查看接口调用堆栈的 pagenation.js文件, 已经被混淆

image-20250330152615637

全部复制找个解混淆的网站尝试还原一下

解混淆测试版

js反混淆 - dejs.vip

还原后替换原有混淆的js文件

image-20250330152854000

可以看到, param参数的x为请求头的参数m+固定值"xxoo" , 经过SHA256算法得到

image-20250330153222978

验证SHA256算法: SHA256 - 在线工具

image-20250330153732148

也就是只要确定了方法 window["eeee"] 的算法后, 参数m,x都出来了

image-20250330154104319

正好看到AES的解密, 猜测应该是响应的解密, 验证一下; 证明确实对的, 这样解密算法也出来了, 就只剩eeee方法的实现了

image-20250330154215072

由于eeee方法还调用了很多其他方法和变量, 需要一个一个补; 为了省事, 直接把整个解混淆后的js拿过来修改 尝试直接调用eeee方法

取消 IIFE(Immediately Invoked Function Expression,立即调用函数表达式)的独立作用域, 可以直接在外部调用, 或者在独立作用域内调用

保证入参一致, 验证返回值是否相同; 验证值一致, 就可以直接python调用js方法

image-20250330155318063

还有给AI js代码, 让其使用python实现, Ai会知道eeee方法其实就是个MD5, 验证一下

image-20250330155601961

至此, 所有加解密算法已经出来了, 调个接口试试

使用的加密库: Examples — PyCryptodome 3.230b0 documentation

pip install pycryptodomex

image-20250330163559518

最后做个翻页请求20次接口累加数组即可得到答案, 就不做了, 贴个代码

import json
import time
import requests
import hashlib
from Cryptodome.Cipher import AES
from Cryptodome.Util.Padding import unpad


cookies = {
    "sessionid": "66cxjeayq4hhd6e0bedtqze62lluxzhe",
    "Hm_lvt_b5d072258d61ab3cd6a9d485aac7f183": "1743067108,1743124399",
    "HMACCOUNT": "64ECCFF2BFC433A1",
    "Hm_lpvt_b5d072258d61ab3cd6a9d485aac7f183": "1743155397",
}

timestamp = str(int(time.time() * 1000))
# 调用 JS 函数
m = hashlib.md5(("xialuo" + timestamp).encode()).hexdigest()
print(m)
x = hashlib.sha256((m + "xxoo").encode()).hexdigest()
print(x)
headers = {
    "accept": "application/json, text/javascript, */*; q=0.01",
    "accept-language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
    "cache-control": "no-cache",
    "m": m,
    "pragma": "no-cache",
    "priority": "u=1, i",
    "referer": "https://stu.tulingpyton.cn/problem-detail/7/",
    "sec-ch-ua": '"Chromium";v="134", "Not:A-Brand";v="24", "Microsoft Edge";v="134"',
    "sec-ch-ua-mobile": "?0",
    "sec-ch-ua-platform": '"Windows"',
    "sec-fetch-dest": "empty",
    "sec-fetch-mode": "cors",
    "sec-fetch-site": "same-origin",
    "ts": timestamp,
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36 Edg/134.0.0.0",
    "x-requested-with": "XMLHttpRequest",
    # 'cookie': 'sessionid=66cxjeayq4hhd6e0bedtqze62lluxzhe; Hm_lvt_b5d072258d61ab3cd6a9d485aac7f183=1743067108,1743124399; HMACCOUNT=64ECCFF2BFC433A1; Hm_lpvt_b5d072258d61ab3cd6a9d485aac7f183=1743155397',
}

params = {
    "page": "1",
    "x": x,
}

response = requests.get(
    "https://stu.tulingpyton.cn/api/problem-detail/7/data/",
    params=params,
    cookies=cookies,
    headers=headers,
)
json_data = response.json()
print(json_data)
r = json_data['r']
# hex to bytes
r = bytes.fromhex(r)

key = b"xxxxxxxxoooooooo"
iv = b"0123456789ABCDEF"
chiper = AES.new(key=key, mode=AES.MODE_CBC, iv=iv)
result = unpad(chiper.decrypt(r), AES.block_size)
print(result)
result = json.loads(result)
print(result)
print(result['current_array'])

题八:迷踪步

依旧还是解混淆替换, 然后跟栈断点 定位加密位置

image-20250330165106578

尝试分析加密方法OOOoOo, 先分析参数, 经过几次请求断点, 基本确定"ooooo"为固定值, 只有一个时间戳变量, 但是加密逻辑实在有点难看懂, 丢给AI试试

image-20250330165704034

拿Ai生成的方法测试返回值是否一致, 没想到还真出来了; 甚至优化后, 加密逻辑可简化至两行代码,

image-20250330170708676

贴个代码; 以学习为目的的话, 还是应该尝试慢慢扣代码还原逻辑, 而不是丢给AI🫡

import base64
import requests

import time

def encrypt_string(timestamp):
    key_string = "oooooo"
    input_string = key_string + timestamp + "1"
    input_chars = list(input_string)
    key_chars = list(key_string)
    result = []
    
    # Process input in chunks of 4 characters
    for i in range(0, len(input_chars), 4):
        chunk = input_chars[i:i+4]
        
        # XOR each character in the chunk with corresponding key character
        for j in range(len(chunk)):
            input_char_code = ord(chunk[j])
            key_char_code = ord(key_chars[j % len(key_chars)])
            encrypted_code = (input_char_code + key_char_code) % 256
            chunk[j] = chr(encrypted_code)
        
        result.extend(chunk)
    
    # Convert to hexadecimal representation
    encrypted_string = ''.join(result)
    hex_string = ''.join(f"{ord(char):02x}" for char in encrypted_string)

    return hex_string

def encrypt_string1(timestamp):
    input_str = "oooooo" + timestamp + "1"
    return ''.join(f"{(ord(c) + 111) % 256:02x}" for c in input_str)


cookies = {
    'Hm_lvt_b5d072258d61ab3cd6a9d485aac7f183': '1743067108',
    'HMACCOUNT': '64ECCFF2BFC433A1',
    'sessionid': '66cxjeayq4hhd6e0bedtqze62lluxzhe',
    'Hm_lpvt_b5d072258d61ab3cd6a9d485aac7f183': '1743072264',
    's': '51b351b351b351b370b0d03050b010d07150b07130',
}

timestamp = str(int(time.time() * 1000))

m = encrypt_string1(timestamp)
t = base64.b64encode(timestamp.encode()).decode()

print(m, t)
headers = {
    'accept': '*/*',
    'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
    'cache-control': 'no-cache',
    'content-type': 'application/json',
    'm': m,
    'origin': 'https://stu.tulingpyton.cn',
    'pragma': 'no-cache',
    'priority': 'u=1, i',
    'referer': 'https://stu.tulingpyton.cn/problem-detail/8/',
    'sec-ch-ua': '"Chromium";v="134", "Not:A-Brand";v="24", "Microsoft Edge";v="134"',
    'sec-ch-ua-mobile': '?0',
    'sec-ch-ua-platform': '"Windows"',
    'sec-fetch-dest': 'empty',
    'sec-fetch-mode': 'cors',
    'sec-fetch-site': 'same-origin',
    't': t,
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36 Edg/134.0.0.0',
    'x-requested-with': 'XMLHttpRequest',
    # 'cookie': 'Hm_lvt_b5d072258d61ab3cd6a9d485aac7f183=1743067108; HMACCOUNT=64ECCFF2BFC433A1; sessionid=66cxjeayq4hhd6e0bedtqze62lluxzhe; Hm_lpvt_b5d072258d61ab3cd6a9d485aac7f183=1743072264; s=51b351b351b351b370b0d03050b010d07150b07130',
}

json_data = {
    'page': 1,
}

response = requests.post('https://stu.tulingpyton.cn/api/problem-detail/8/data/', cookies=cookies, headers=headers, json=json_data)

print(response.json())

51b351b351b351b370b0d03050b010d07150b07130’,
}

json_data = {
‘page’: 1,
}

response = requests.post(‘https://stu.tulingpyton.cn/api/problem-detail/8/data/’, cookies=cookies, headers=headers, json=json_data)

print(response.json())


### 图灵测试与《上爬》第七解析 图灵测试是一种用于判断机器是否具备人类智能的方法。它通过让评估者与未知实体(可能是人类或计算机程序)进行交流,来判断该实体是否表现出与人类无异的行为[^1]。 #### 关于《上爬》第七的内容分析 假设《上爬》是一本涉及编程、人工智能以及数据处理的书籍,则其第七可能围绕以下几个方面展开: 1. **图灵测试的核心概念** 目可能会要求解释什么是图灵测试及其意义。这通常涉及到对艾伦·图灵提出的原始理论的理解,即如何定义一台机器能够思考的标准。 2. **模拟图灵测试的设计** 可能会设计一道目,让学生编写一段简单的对话系统代,尝试模仿真实的人类回应模式。以下是基于 Python 的一个基础示例: ```python import random responses = { "hello": ["Hi there!", "Hello! How can I assist you?"], "how are you": ["I'm just a program, but thanks for asking!", "I don't have feelings, but how about you?"], "default": ["Interesting...", "Tell me more.", "That's fascinating."] } def get_response(user_input): user_input = user_input.lower() if user_input in responses: return random.choice(responses[user_input]) else: return random.choice(responses["default"]) while True: user_input = input("You: ") if user_input.lower() == 'exit': break print(f"Bot: {get_response(user_input)}") ``` 3. **验证算法的有效性** 如果书中提到验证识别等内容[^2],则第七也可能扩展至讨论如何利用图像处理技术和自然语言理解相结合的方式提升系统的智能化水平。 4. **HTML 和语义结构的关系探讨** 结合引用中的说明[^3],目还可能考察学生对于网页内容语义化的认识程度,比如如何构建合理的 HTML 标签体系以便更好地支持 AI 对页面信息的理解。 5. **推荐使用的编程语言和技术栈** 提到的数据抓取部分建议采用更灵活高效的工具链,如 Python 脚本来完成网络请求发送、DOM 解析等功能[^4]。 #### 综合应用实例 下面是一个综合性的练习方向:给定若干条微博评论文本,训练模型自动分类正面情绪还是负面情绪;接着引入噪声干扰项(例如故意加入错别字),观察系统表现变化情况,并进一步优化策略。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

梦中千秋

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

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

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

打赏作者

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

抵扣说明:

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

余额充值