阿里云CTF 2024-MISC

文章介绍了如何通过nltk库的VADER情感分析器和哈希爆破技术解决帕鲁情绪管理中的问题,包括利用已验证的评价数据预测心情和处理nltk模型下载问题.
摘要由CSDN通过智能技术生成

一、帕鲁情绪管理

1.题目大意:

nc上看一眼,最开始是一个简单的字符串四位哈希爆破,后四位字符输入正确,选择输入y后会打印出很多评价的文字,同时在文字开头会给出这段文字表达的心情,总共有三种分别为:positive、negative、neutral,再输入y开始challenge后会给出你一段话,让你快速输入对应的评价心情。

2.解题思路:

没有像其他队一样找到对应的数据集,本方法是使用nltk语言预测模型加爆破。整体思路就是将已经验证正确的评价对应心情存入一个txt中,(可以多跑几次,将选择challenge之前的评价数据也写入txt中当作数据)每次循环判断的时候优先从txt中遍历,如果没有就使用语言模型进行预测。

python代码如下:

from hashlib import sha256
import random
from pwn import *
import string
import time
import nltk
from nltk.sentiment.vader import SentimentIntensityAnalyzer

# 下载VADER情感分析器所需的数据
nltk.download('vader_lexicon')

# 创建情感分析器对象
sid = SentimentIntensityAnalyzer()


dir = string.ascii_letters + string.digits
# str_mess = ''
# def add_mess(res):
#     with open("1.txt","a") as f:
#         f.write(res)
p = remote("misc0.aliyunctf.com", 9999)
p.recvuntil('sha256(("')
salt = p.recv(28).strip().decode()
p.recvuntil('" + "????").encode()) = ')
hash = p.recv(64).strip().decode()
# print(salt,hash)
while True:
    rand_str = salt + (''.join([random.choice(dir) for _ in range(4)]))
    if sha256(rand_str.encode()).hexdigest() == hash:
        print(rand_str[-4:])
        p.sendlineafter('Please input the answer: ', rand_str[-4:])
        break
message = p.recv(31).strip().decode()
p.sendline('y')
message = p.recv().strip().decode()
time.sleep(0.5)
# str_mess += message
p.sendlineafter('Now, Do you want to start challenge? (y/n) ', 'y')
num = 1
message = p.recv().strip().decode()
print(message)
while num :
    # a = message
    # if a[12:] in str_mess:
    #     mes_find = str_mess.find(a[12:])
    #     re = str_mess[12:mes_find]
    # else:
    #     re = random.choice(['negative','positive','neutral'])
    text = message
    scores = sid.polarity_scores(text)

    # 根据分数判断情感
    if scores['compound'] >= 0.05:
        sentiment = 'positive'
    elif scores['compound'] <= -0.05:
        sentiment = 'negative'
    else:
        sentiment = 'neutral'
    re = sentiment
    message = p.recv().strip().decode()
    print(message)
    p.sendline(re)
    message = p.recv().strip().decode()
    print(message)
    if "Round" in message:
        num = 1
    else:
        num = 0
p.close()

image

3.nltk模型搭建遇到的问题

在python自动下载VADER情感分析器所需的数据的时候可能会出现模型无法引入下载的情况,且报错为网络问题。这个时候就可以直接下载nltk_data,并把它解压到索引目录(就是python报错找不到的位置)。

如果嫌弃官网下载太慢可以参考下面这个佬的nltk_data下载地址:快速下载NLTK数据集nltk_data的方法_github - nltk/nltk_data: nltk data-CSDN博客

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值