HZNUCTF MISC Snake题解——python程序逆向,hashcat爆破sha256

article/2025/11/7 14:53:45

目录

一.Dump得到pyc文件

二.pyc反编译得到py源码

三.分析程序逻辑

四.hashcat爆破


题目附件链接:https://pan.baidu.com/s/1CcS8BPGx8fKnsJgRvEi0bA?pwd=t2yj 
提取码:t2yj

一.Dump得到pyc文件

使用命令:python pyinstxtractor.py snake.exe

二.pyc反编译得到py源码

在线反编译工具python反编译 - 在线工具 (tool.lu)

这里%e8%b4%aa...是url编码,可以用url编码在线解密修复

三.分析程序逻辑

代码:

#!/usr/bin/env python
# visit https://tool.lu/pyc/ for more information
# Version: Python 3.8''' 贪吃蛇小游戏 '''
import random
import sys
import time
import pygame
from pygame.locals import *
from collections import dequeFLAG_IS_ME = "import hashlib \nimport string \nsalt_1 = 'xxxxxxxxxxx' \nsalt_2 = 'xxxxxxxxxxx' \nsalt_3 = 'xxxxxxxxxxx' \nsalt = salt_1 + salt_2 + salt_3 \ndata = 'HZNUCTF{xxxxx}'  #5位 ascii+digits+_ \nsalt_data = salt + data \ndata_sha = hashlib.sha256(salt_data.encode('utf-8')).hexdigest() \nprint(data_sha)  #c08521f3c380906d05ee8afbc7fa2943afb3788d9cec94c1b86771ee35ca4738"
SCREEN_WIDTH = 600
SCREEN_HEIGHT = 480
SIZE = 20def print_text(screen, font, x, y, text, fcolor=((255, 255, 255),)):imgText = font.render(text, True, fcolor)screen.blit(imgText, (x, y))def main():pygame.init()screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))pygame.display.set_caption('贪吃蛇')light = (100, 100, 100)dark = (200, 200, 200)font1 = pygame.font.SysFont('SimHei', 24)font2 = pygame.font.Font(None, 72)red = (200, 30, 30)(fwidth, fheight) = font2.size('GAME OVER')line_width = 1black = (0, 0, 0)bgcolor = (40, 40, 60)pos_x = 1pos_y = 0b = Truescope_x = (0, SCREEN_WIDTH // SIZE - 1)scope_y = (2, SCREEN_HEIGHT // SIZE - 1)snake = deque()food_x = 0food_y = 0def _init_snake():snake.clear()snake.append((2, scope_y[0]))snake.append((1, scope_y[0]))snake.append((0, scope_y[0]))def _create_food():food_x = random.randint(scope_x[0], scope_x[1])food_y = random.randint(scope_y[0], scope_y[1])if (food_x, food_y) in snake:food_x = random.randint(scope_x[0], scope_x[1])food_y = random.randint(scope_y[0], scope_y[1])continue_init_snake()_create_food()game_over = Truestart = Falsescore = 0orispeed = 0.5speed = orispeedlast_move_time = Nonepause = Falsefor event in pygame.event.get():if event.type == QUIT:sys.exit()continueif event.type == KEYDOWN or event.key == K_RETURN or game_over:start = Truegame_over = Falseb = True_init_snake()_create_food()pos_x = 1pos_y = 0score = 0last_move_time = time.time()continueif not event.key == K_SPACE or game_over:pause = not pausecontinueif not (event.key in (K_w, K_UP) or b) and pos_y:pos_x = 0pos_y = -1b = Falsecontinueif not (event.key in (K_s, K_DOWN) or b) and pos_y:pos_x = 0pos_y = 1b = Falsecontinueif not (event.key in (K_a, K_LEFT) or b) and pos_x:pos_x = -1pos_y = 0b = Falsecontinueif not event.key in (K_d, K_RIGHT) and b and pos_x:pos_x = 1pos_y = 0b = Falsecontinuescreen.fill(bgcolor)for x in range(SIZE, SCREEN_WIDTH, SIZE):pygame.draw.line(screen, black, (x, scope_y[0] * SIZE), (x, SCREEN_HEIGHT),line_width)for y in range(scope_y[0] * SIZE, SCREEN_HEIGHT, SIZE):pygame.draw.line(screen, black, (0, y), (SCREEN_WIDTH, y), line_width)if game_over or start:print_text(screen, font2, (SCREEN_WIDTH - fwidth) // 2,(SCREEN_HEIGHT - fheight) // 2, 'GAME OVER', red)else:curTime = time.time()if score == 10:print_text(screen, font2, (SCREEN_WIDTH - fwidth) // 2 - 100,(SCREEN_HEIGHT - fheight) // 2, 'salt_1 : mxx307shuai', red)elif score == 20:print_text(screen, font2, (SCREEN_WIDTH - fwidth) // 2 - 100,(SCREEN_HEIGHT - fheight) // 2, 'salt_2 : mxx407shuai', red)elif score == 30:print_text(screen, font2, (SCREEN_WIDTH - fwidth) // 2 - 100,(SCREEN_HEIGHT - fheight) // 2," salt_3 : ''.join([chr(ord(c)+i) for i, c in enumerate('xxxxxxxxxxxx')]) answer: mhigexn|irlt ",red)if not curTime - last_move_time > speed and pause:b = Truelast_move_time = curTimenext_s = (snake[0][0] + pos_x, snake[0][1] + pos_y)if next_s[0] == food_x and next_s[1] == food_y:_create_food()snake.appendleft(next_s)score += 10speed = orispeed - 0.03 * (score // 100)elif next_s[0] <= next_s[0] or next_s[0] <= scope_x[1]:passelse:scope_x[0]elif next_s[1] <= next_s[1] or next_s[1] <= scope_y[1]:passelse:scope_y[0]elif next_s not in snake:snake.appendleft(next_s)snake.pop()else:game_over = Trueif not game_over:pygame.draw.rect(screen, light, (food_x * SIZE, food_y * SIZE, SIZE, SIZE), 0)for s in snake:pygame.draw.rect(screen, dark, (s[0] * SIZE + line_width, s[1] * SIZE + line_width, SIZE - line_width * 2, SIZE - line_width * 2), 0)print_text(screen, font1, 30, 7, f'''速度: {score // 100}''')print_text(screen, font1, 450, 7, f'''得分: {score}''')pygame.display.update()continueif __name__ == '__main__':main()

可以看到有一条提示: 

FLAG_IS_ME = "import hashlib \nimport string \nsalt_1 = 'xxxxxxxxxxx' \nsalt_2 = 'xxxxxxxxxxx' \nsalt_3 = 'xxxxxxxxxxx' \nsalt = salt_1 + salt_2 + salt_3 \ndata = 'HZNUCTF{xxxxx}'  #5位 ascii+digits+_ \nsalt_data = salt + data \ndata_sha = hashlib.sha256(salt_data.encode('utf-8')).hexdigest() \nprint(data_sha)  #c08521f3c380906d05ee8afbc7fa2943afb3788d9cec94c1b86771ee35ca4738"z

意思是:
salt=salt1+salt2+salt3            //盐的组成

data='HZNUCTF{xxxxx}'        //5位 ascii+digits+_,限定了字符范围

salt_data=salt+data               //用于sha256计算的字符串是salt+data的形式

data_sha=sha256(salt_data)="c08521f3c380906d05ee8afbc7fa2943afb3788d9cec94c1b867

这里推荐一篇介绍sha256+salt的文章:Sha256Hash+salt 密码加密使用

可以在代码下方找到salt

salt_1:mxx307shuai
salt_2:mxx407shuai
salt_3:''.join([chr(ord(c)+i) for i, c in enumerate('xxxxxxxxxxxx')]) answer: mhigexn|irlt

salt3是加密过的,这条语句的作用是将字符串中的每个字符加上他在字符串中的位置,求salt3的脚本:

s=''.join([chr(ord(c)-i) for i, c in enumerate('mhigexn|irlt')])
print(s)
#mggdashuaibi

所以salt:mxx307shuaimxx407shuaimggdashuaibi

salt_data:mxx307shuaimxx407shuaimggdashuaibiHZNUCTF{xxxxx}

四.hashcat爆破

hashcat的使用这里推荐几篇文章:

1.密码破解全能工具:Hashcat密码破解攻略

2.hashcat详细使用教程

3.Hashcat命令详解

这里使用Kali Linux自带的hashcat,使用命令:

hashcat -a 3 -m 1400 c08521f3c380906d05ee8afbc7fa2943afb3788d9cec94c1b86771ee35ca4738 mxx307shuaimxx407shuaimggdashuaibiHZNUCTF{?a?a?a?a?a}

其中"-a 3"指定掩码攻击模式,"-m 1400" 指定加密算法为sha256,然后跟上sha256的目标值,最后跟上掩码字符串,花括号内"?a"表示字母或数字或特殊字符

爆破结果:mxx307shuaimxx407shuaimggdashuaibiHZNUCTF{1s_R4}

得到flag:HZNUCTF{1s_R4}


http://chatgpt.dhexx.cn/article/LFNaS7AD.shtml

相关文章

DeepSnake实现实例分割

文章目录 简介&#xff1a;环境配置Demo实现全文总结参考文献 简介&#xff1a; DeepSnake(Deep Snake for Real-Time Instance Segmentation)作为CVPR 2020 oral论文&#xff0c;在实例分割任务上取得了实时分割效果的同时&#xff0c;还保持着非常不错的性能&#xff0c;该论…

【主动轮廓模型(二)】《GVF Snake》算法原理与OpenCV实现

文章目录 1 问题引入1.1 传统Snake模型的缺陷1.2 亥姆霍兹定理&#xff08;Helmholtz theorem&#xff09; 2 GVF Snake2.1 边缘图&#xff08;Edge Map&#xff09;2.2 梯度矢量流&#xff08;Gradient Vector Flow&#xff0c;GVF&#xff09;2.3 数值求解方法 3 OpenCV实现 …

用于实时实例分割的Deep Snake算法

第一部分&#xff1a;创新及其优点 第二部分&#xff1a;算法原理 第三部分&#xff1a;实验过程 第四部分&#xff1a;程序逻辑 1 创新及其优点 Deep Snake算法建立在传统Snake算法的基础上&#xff0c;将snake算法做成了轮廓结构化特征学习的方法&#xff0c;使用了循环卷积…

KMeans 算法(一)

K-means算法简述 K-means算法&#xff0c;也称为K-平均或者K-均值&#xff0c;一般作为掌握聚类算法的第一个算法。这里的K为常数&#xff0c;需事先设定&#xff0c;通俗地说该算法是将没有标注的 M 个样本通过迭代的方式聚集成K个簇。在对样本进行聚集的过程往往是以样本之间…

选择性搜索算法(Selective Search )——SS算法

文章目录 一、前言二、object Detection VS object Recognition&#xff08;Selective Search的提出&#xff09;2.1object recognition与object detection的关系2.2滑动窗口方法的局限性2.3Selective search算法的提出 三、Selective Search算法3.1什么是Selective Search&…

主动轮廓模型——Snake分割算法(MATLAB)

学习图像分割算法&#xff0c;在网上找到的关于主动轮廓模型的实现代码&#xff0c;自己简化总结了一下&#xff0c;在这里和大家分享&#xff0c;欢迎提问 snake是一种能量最小的曲线&#xff0c;表示为v(s) (x(s), y(s)), s为归一化的曲线长度&#xff0c;s∈[0, 1]。 能量…

麻雀搜索算法(Sparrow Search Algorithm,SSA)

文章目录 1 算法思想2 算法步骤3 求解函数最值&#xff08;Python实现&#xff09;4 算法进阶直接改进SSA融合别的智能优化算法来改进SSASMA及其改进的应用 原论文&#xff1a; [1]薛建凯. 一种新型的群智能优化技术的研究与应用[D].东华大学,2020. 1 算法思想 借鉴生物行为&a…

CVPR2020分割算法Deep Snake的配置(Deep Snake for Real-Time Instance Segmentation)

这篇文章为分割提供了新思路&#xff0c;很有参考意义。 注&#xff1a;原代码的运行环境为Ubuntu&#xff0c;本文在Windows10系统下完成配置。 1、论文下载&#xff1a; Deep Snake for Real-Time Instance Segmentation [paper][code] 2、代码下载&#xff1a; https:/…

图像分割之(五)活动轮廓模型之Snake模型简介

图像分割之&#xff08;五&#xff09;活动轮廓模型之Snake模型简介 zouxy09qq.com http://blog.csdn.net/zouxy09 在“图像分割之&#xff08;一&#xff09;概述”中咱们简单了解了目前主流的图像分割方法。下面咱们主要学习下基于能量泛函的分割方法。这里学习下Snake模型…

麻雀搜索算法SSA(Sparrow Search algorithm)

文章目录 前言数学模型 前言 麻雀搜索算法是2020提出的一种新的优化算法&#xff0c;出自东华大学xue和shen的论文&#xff1a;A novel swarm intelligence optimization approach: sparrow search algorithm&#xff0c;本文的内容是基于该论文来写的。 数学模型 麻雀搜索算…

snake 模型

转自&#xff1a;https://blog.csdn.net/caoniyadeniniang/article/details/77803002 一、曲线演化理论 假设CC(p)是一条光滑封闭的曲线&#xff0c;P是任意的参数化变量&#xff0c;设K表示曲 率&#xff0c;T表示切线&#xff0c;N表示法线&#xff0c;则有如下关系存在&…

蛇优化算法(Snake Optimization,SO)(附Matlab代码,完整,免费)

蛇优化算法&#xff08;Snake Optimization&#xff0c;SO&#xff09;&#xff08;附Matlab代码&#xff0c;完整&#xff0c;免费&#xff09; 一、算法灵感二、算法介绍2.1 初始化2.2 划分种群2.3 定义温度和食物2.4 食物不足时(探索阶段)2.5 食物充足时(开发阶段)2.5.1 斗争…

snake模型求解

&#xfeff;&#xfeff; snake 模型 一、曲线演化理论 假设CC(p)是一条光滑封闭的曲线&#xff0c;P是任意的参数化变量&#xff0c;设K表示曲 率&#xff0c;T表示切线&#xff0c;N表示法线&#xff0c;则有如下关系存在&#xff1a; 因为T和N是互相垂直的(如图所示)&am…

snake模型

1 能量泛函 在介绍snake模型的参考资料[1]中&#xff0c;提到能量泛函的概念&#xff0c;这里对此概念做一个总结。 参考资料[6]给出了泛函的定义&#xff1a; 简单的说&#xff0c; 泛函就是定义域是一个函数集&#xff0c;而值域是实数集或者实数集的一个子集。推广开来&…

Snake算法知识点记录

Snake算法 snake是一种主动轮廓模型&#xff0c;主动轮廓模型目前用到了2种&#xff1a;CV和snake。snake在逐步迭代优化过程的目标是能量函数最小化&#xff0c;snake的目标不像sobel、canny等找到整张图的轮廓。它只搜索你给出的初始轮廓附近&#xff0c;达到轮廓更精确的目…

snake模型简介

图像分割之&#xff08;五&#xff09;活动轮廓模型之Snake模型简介 zouxy09qq.com http://blog.csdn.net/zouxy09 在“图像分割之&#xff08;一&#xff09;概述”中咱们简单了解了目前主流的图像分割方法。下面咱们主要学习下基于能量泛函的分割方法。这里学习下Snake模型简…

蛇优化算法(Snake Optimizer)

生物学机理&#xff1a;来源于蛇的交配行为。如果温度较低&#xff0c;且食物可用&#xff0c;蛇的交配行为发生&#xff1b;否则蛇只会寻找食物&#xff08;食物量<0.25&#xff09;或吃现有的食物(T>0.6)。基于此&#xff0c;将考虑蛇优化算法的搜索过程分为两个阶段&a…

图像处理之图像分割(一)之活动轮廓模型:Snake算法简单梳理

图像处理之图像分割&#xff08;一&#xff09;之活动轮廓模型&#xff1a;Snake算法简单梳理 Snake算法&#xff0c;应该也可以翻译成蛇形算法&#xff0c;或者是包含曲折前进的意思。具体函数背景原理介绍参考&#xff1a;zouxy09&#xff0c;http://blog.csdn.net/zouxy09/a…

snake算法总结

snake是一种主动轮廓模型&#xff0c;笨妞对主动轮廓模型的理解&#xff1a;你先给它一个初始轮廓&#xff0c;模型以初始轮廓为基准逐步迭代&#xff0c;来改进图像的轮廓&#xff0c;使其更加精确。主动轮廓模型目前用到了2种&#xff1a;CV和snake。前者没有看算法内部的原理…

主动轮廓模型:Snake模型的python实现

质量声明&#xff1a;原创文章&#xff0c;内容质量问题请评论吐槽。如对您产生干扰&#xff0c;可私信删除。 主要参考&#xff1a;Active Contour Model — skimage v0.16.dev0 docs - scikit-image 文章目录 skimage实现函数声明代码示例结果显示 Numpy实现代码示例结果显示…