【buuctf-gakki】

news/2024/5/20 0:36:52 标签: python, CTF, MISC

binwalk 查看图片,发现有 rar 文件,提取后如上图所示(flag.txt为已经解压后出来的)其中这个 rar 需要用 archpr爆破一下

打开后一个 flag.txt

一堆杂乱无章的字符,需要用到 python 脚本进行词频统计,我们采用两种输出法,见下图:

最后我们来详细分析一下这段代码

python"># 导入 Counter 类,用于统计字符频率
from collections import Counter

# 打开文件 'flag.txt' 以读取模式
with open('flag.txt', 'r') as file:
    
    # 读取文件内容
    text = file.read()
    
    # 使用 Counter 统计字符频率
    chars_count = Counter(text)
    
    # 对字符频率进行降序排序,得到一个包含元组的列表
    sorted_chars_desc = sorted(chars_count.items(), key=lambda x: x[1], reverse=True)
    
    # 遍历排序后的字符频率列表,输出字符和对应的次数
    for char, count in sorted_chars_desc:
        print(char, count)
    
    # 使用列表推导式将字符按照出现次数降序连接成一个字符串
    print_data = ''.join([char for char, count in sorted_chars_desc])
    
    # 输出按照字符出现次数降序排列的字符串
    print(print_data)

1.collections 模块中的 Counter 类是 Python 中用于计数可哈希对象(例如列表中的元素,字符串中的字符)出现次数的工具

2.chars_count=Count(text)的目的是使用 Counter 类统计字符串text中每个字符的出现次数,并将结果存储在 chars_count 变量中。举例来看,若text = "abracadabra",通过使用 Counter 类的构造函数,将字符串 text 传递给它,创建了一个 Counter 对象 chars_count。这个对象是一个字典,其中每个键是字符串中的一个字符,而对应的值是该字符在字符串中出现的次数。对于字符串 "abracadabra",chars_count 可能的值是 Counter({'a': 5, 'b': 2, 'r': 2, 'c': 1, 'd': 1})。这表示字符 'a' 出现了5次,字符 'b' 出现了2次,以此类推。

3.chars_count.items() 返回一个包含 Counter 对象中所有键值对的视图。例如,如果 chars_countCounter({'a': 3, 'b': 2, 'c': 1}),那么 chars_count.items() 返回的视图可能是 dict_items([('a', 3), ('b', 2), ('c', 1)])。每个键值对表示一个字符和它在字符串中出现的次数。sorted() 函数用于对可迭代对象进行排序。在这里,我们对 chars_count.items() 返回的键值对进行排序。参数 key=lambda x: x[1] 表示排序的关键是元组的第二个元素,即出现的次数。reverse=True 表示降序排序。

4.使用一个 for 循环遍历了 sorted_chars_desc 列表中的每个元组(每个元组都代表一个字符及其出现次数),然后在每次迭代中打印字符和对应的出现次数。

5.print_data一行,使用列表推导式和 join 方法将排序后的字符按照出现次数降序连接成一个字符串。列表推导式 [char for char, count in sorted_chars_desc] 从每个元组中取出字符,构成一个新的列表。''.join(...) 将这个列表中的字符连接成一个字符串,'' 中的空字符串表示连接时不使用分隔符。


http://www.niftyadmin.cn/n/5401002.html

相关文章

模型练习史

文章目录 肌肉光头vikingtorso死侍蓝毒液卡通girlwalletdog headman anatomy总结 肌肉光头 viking torso 死侍 蓝毒液 卡通girl wallet dog head man anatomy 总结 zbrush 与 blender 结合使用, 善 !

Qt QWiget 实现简约美观的加载动画 第三季

&#x1f603; 第三季来啦 &#x1f603; 这是最终效果: 只有三个文件,可以直接编译运行 //main.cpp #include "LoadingAnimWidget.h" #include <QApplication> #include <QVBoxLayout> #include <QGridLayout> int main(int argc, char *argv[]…

Delphi 报错 Type androidx.collection.ArraySet is defined multiple times

Delphi 11 建立一个新的 Multi-Device Application 编译成app的时候报错 报错信息 [PAClient Error] Error: E7688 Unable to execute "E:\Program\Java\jdk1.8.0_301\bin\java.exe" -cp "e:\program\embarcadero\studio\22.0\bin\Android\r8-3.3.28.jar"…

若依前后端分离版本-自动生成代码

听说若依挺好用的&#xff0c;所以来学习一下。 1.下载项目&#xff0c;配置redis,配置mysql,安装npm&#xff08;版本一定要低于16&#xff09; 2.执行sql脚本数据库相关信息 3.启动后端ruoyi-admin的ruoyiApplication 4启动前端 选择terminal 进入ruoyi-ui&#xff0c;执…

C++数据结构与算法——二叉树的属性

C第二阶段——数据结构和算法&#xff0c;之前学过一点点数据结构&#xff0c;当时是基于Python来学习的&#xff0c;现在基于C查漏补缺&#xff0c;尤其是树的部分。这一部分计划一个月&#xff0c;主要利用代码随想录来学习&#xff0c;刷题使用力扣网站&#xff0c;不定时更…

错误:comparison method violates its general contract

java.lang.IllegalArgumentException: 比较方法违反了其通用约定&#xff01; Java中的Comparator接口指定了比较方法应遵循以下规则&#xff1a; 自反性&#xff1a;compare(a, a) 应返回 0。 对称性&#xff1a;如果 compare(a, b) 返回一个正值&#xff0c;那么 compare(b…

【vue3学习笔记】Suspense组件;vue3中的其它改变

尚硅谷Vue2.0Vue3.0全套教程丨vuejs从入门到精通 课程 P167节 《Suspense组件》笔记 想要学习suspense&#xff0c;先来了解静态组件与异步组件。 静态引入与异步引入&#xff1a; 在network中将网速调慢&#xff0c;观察在静态引入和异步引入模式下&#xff0c;两个组件的加载…

【Unity】使用Unity实现双屏显示

引言 在使用Unity的时候&#xff0c;有时候会需要使用双屏显示 简单来说就是需要在两个显示器中显示游戏画面 双屏显示注意点&#xff1a; ①双屏显示需要电脑有两个显示 ②双屏显示只能用于PC端 ③不仅仅可以双屏&#xff0c;Unity最大支持8屏显示 1.相机设置 ①我们打开Un…