IDF 包罗万象 抓到一只苍蝇

本文深入解析了一次网络安全事件,通过wireshark、ferret等工具,揭示了隐藏在苍蝇和二维码背后的秘密。从捕获到解码,作者详细介绍了过程中的关键技术,包括文件处理、伪加密识别及最终的二维码扫描,最终揭示了安全事件的真相。
报告首长!发现一只苍蝇。

在哪?here!

卧槽?!好大一坨苍蝇。。

文件地址: http://pan.baidu.com/s/1bnGWbqJ

提取码:oe6w

PS:flag写错了,太麻烦也懒得改了,格式还是wctf{...},大家明白就好,不要在意这些细节。

一、首先用wireshark打开,另存为pcap格式的文件,使用ferret软件处理得到hamster.txt,打开hamster,

进入http://127.0.0.1:1234


由此可以看到,用户在QQ邮箱中上传了一个文件

二、回到wireshark,继续分析流量包。

搜索fly关键词,得到一个fly.rar的压缩包

应用过滤器,筛选出post方法

导出文件,共五个


三、由于是好几个文件,需要将其合并成一个文件,这里就需要去掉相同的文件头,可以看到文件大小是525701,而5个数据包media type 的大小是131436*4 和最后一个1777,所以文件头的大小就是

131436*4+1777=527571-525701=1820/5=364需要每个文件去掉其364字节的文件头。(linux shell命令dd)


再来合并windows cmd命令  copy /B 1.1+2.1+3.1+4.1+5.1  fly.rar

之后解压文件,发现不能解压,后来想了好久,发现是伪加密,于是改一下标志位7484为7480




解压出来是一个flag.txt,但实际是一个exe文件,可以运行,是好多苍蝇···,16进制打开,在文件末尾发现png标识,提取出来png文件


发现是一个二维码,于是扫描二维码,得到flag



### TF-IDF算法原理 TF-IDF(Term Frequency-Inverse Document Frequency)是一种常用的加权技术,主要用于信息检索和文本挖掘领域。其核心思想在于衡量一个词对于某篇文档的重要性。具体来说,如果某个词语在一篇文档中出现的频率较高,并且在整个语料库中的其他文档中较少出现,则该词语对该文档具有较高的区分度。 #### 1. 词频 (Term Frequency, TF) 词频是指词条(关键字)在文档中出现的频率。通常情况下,可以通过以下公式来计算: \[ \text{TF}(t,d) = \frac{\text{词 } t \text{ 在文档 } d \text{ 中出现的次数}}{\text{文档 } d \text{ 的总词数}} \] 此公式的目的是量化单词在单个文档内的相对重要性[^1]。 #### 2. 逆文档频率 (Inverse Document Frequency, IDF) 逆文档频率反映了一个词的稀有程度。IDF越高,说明这个词越稀有,因此更具表征意义。常见的IDF计算方式如下所示: \[ \text{IDF}(t,D) = \log\left(\frac{\lvert D \rvert}{1 + \lvert \{d \in D : t \in d\} \rvert}\right) \] 其中: - \(|D|\) 表示整个文档集合的数量; - \(| \{d \in D : t \in d\}|\) 表示包含术语\(t\)的文档数量; - 加入常量1是为了防止分母为0的情况发生[^2]。 #### 3. 组合形式 (TF-IDF) 最终,TF-IDF值是通过将TF与IDF相乘得到的结果,用来综合评估一个词对特定文档的重要性: \[ \text{TF-IDF}(t,d,D) = \text{TF}(t,d) \times \text{IDF}(t,D) \] 这一组合能够有效平衡高频次低价值词汇的影响,同时突出那些既频繁又独特的关键词项[^3]。 ### 实现代码示例 以下是基于Python的一个简单实现例子: ```python import math from collections import Counter def compute_tf(text): words = text.split() total_words = len(words) word_counts = Counter(words) tf_dict = {word: count / total_words for word, count in word_counts.items()} return tf_dict def compute_idf(corpus): num_docs = len(corpus) idf_dict = {} all_words_set = set([word for doc in corpus for word in doc.split()]) for word in all_words_set: docs_with_word = sum(1 for doc in corpus if word in doc.split()) idf_value = math.log(num_docs / (1 + docs_with_word)) idf_dict[word] = idf_value return idf_dict def compute_tfidf(tf_doc, idfs): tfidf_scores = {word: tf * idfs.get(word, 0) for word, tf in tf_doc.items()} return tfidf_scores # Example usage corpus = [ "the sky is blue", "the sun is bright", "the sun in the sky is bright" ] tf_example = compute_tf(corpus[0]) idf_values = compute_idf(corpus) tfidf_result = compute_tfidf(tf_example, idf_values) print(f"TF of first document: {tf_example}") print(f"IDFs across corpus: {idf_values}") print(f"TF-IDF scores: {tfidf_result}") ``` 这段脚本展示了如何分别计算TF、IDF以及它们之间的乘积形成TF-IDF得分的过程。 ### 应用场景 TF-IDF广泛应用于自然语言处理(NLP),特别是在以下几个方面表现优异: - **搜索引擎优化(SEO)**:帮助识别网页中最相关的关键词。 - **文本分类**:辅助构建特征向量以便于机器学习模型训练。 - **主题建模**:发现大型数据集中隐藏的主题结构。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值