// 红队渗透 · 2025-01-22

HMV Challenges 021 Writeup

题目网址:https://hackmyvm.eu/challenges/challenge.php?c=021 在这里插入图片描述 是一道逆向题,开局一个txt文件

赛博厨子用base64解一下 在这里插入图片描述 自动分析出来是一个elf文件 在这里插入图片描述 点击保存,导出文件 在这里插入图片描述 拖进ida里分析一下主函数逻辑 在这里插入图片描述

这个程序要求输入一个长度为6的密码,并对其进行一系列检查。我们可以通过逆向工程来找到满足这些条件的密码。

条件如下:

  1. 密码长度必须为6。
  2. 密码的第一个字符必须是’P’(ASCII码80)。
  3. 密码的后五个字符的ASCII码减去48的和必须为24。
  4. 密码的后五个字符的ASCII码减去48的积必须为2048。
  5. 密码的第二个字符必须是’8’(ASCII码56)。

根据这些条件,我们可以编写一个Python脚本来找到满足这些条件的密码:

from itertools import product

def find_password():
    # 密码的第一个字符必须是'P'
    first_char = 'P'
    
    # 密码的第二个字符必须是'8'
    second_char = '8'
    
    # 生成所有可能的后三个字符的组合
    for chars in product('0123456789', repeat=4):
        password = first_char + second_char + ''.join(chars)
        
        # 检查密码长度
        if len(password) != 6:
            continue
        
        # 检查和
        v8 = sum(ord(c) - 48 for c in password[1:])
        if v8 != 24:
            continue
        
        # 检查积
        v7 = 1
        for c in password[1:]:
            v7 *= ord(c) - 48
        if v7 != 2048:
            continue
        
        # 如果满足所有条件,返回密码
        return password

# 找到满足条件的密码
password = find_password()
print("找到的密码:", password)

这个脚本使用 itertools.product 生成所有可能的后三个字符的组合,并检查每个组合是否满足所有条件。如果找到满足条件的密码,就输出该密码。

在这里插入图片描述 最后用HMV包裹一下就是Flag

原文 https://blog.csdn.net/2301_79518550/article/details/145304402