HNCTF week1

2023-11-06

Xor

代码分析

puts("please input your flag!");
  scanf("%s", Str);
  // 输入22个字符串
  if ( strlen(Str) != 22 )
  {
    printf("strlen error!");
    exit(0);
  }
  // 将输入的22个字符与0x34进行异或并且 + 900要与arr相等
  for ( i = 0; i <= 21; ++i )
  {
    if ( arr[i] != (Str[i] ^ 0x34) + 900 )
    {
      printf("flag error!");
      exit(0);
    }
  }
  printf("you are right!");

解题脚本

arr = [0x000003FE, 0x000003EB, 0x000003EB, 0x000003FB, 0x000003E4, 0x000003F6, 0x000003D3, 0x000003D0, 0x00000388,
       0x000003CA, 0x000003EF, 0x00000389, 0x000003CB, 0x000003EF, 0x000003CB, 0x00000388, 0x000003EF, 0x000003D5,
       0x000003D9, 0x000003CB, 0x000003D1, 0x000003CD]

for i in arr:
    print(chr((i - 900) ^ 0x34), end='')

超级签到

代码分析

 for ( j = 0; ; ++j )
  {
    v10 = j;
    if ( j > j_strlen(Str2) )
      break;
    // 双击点进去,Str2为 {hello_world}
    // 将字符o变成0
    if ( Str2[j] == 111 )
      Str2[j] = 48;
  }
  sub_1400111D1("input the flag:");
  sub_14001128F("%20s", Str1);
  v5 = j_strlen(Str2);
  // 验证输入str1的是否与str2相等
  if ( !strncmp(Str1, Str2, v5) )
    sub_1400111D1("this is the right flag!\n");
  else
    sub_1400111D1("wrong flag\n");
  return 0;

脚本(用不用都一样,直接手改还快):

str2 = '{hello_world}'

print(str2.replace(chr(111), chr(48)))

贝斯是什么乐器啊

代码分析

for ( i = 0; i < strlen(Str); ++i )
    Str[i] -= i;
  // base64加密
  base64_encode(Str2, Str);
  // 将加密后的数据与 enc对比
  // 双击看到enc的值为TlJRQFBBdTs4alsrKFI6MjgwNi5p
  if ( !strcmp(enc, Str2) )
    printf("yes!");
  else
    printf("error");

解题脚本

import base64

data = list(base64.b64decode('TlJRQFBBdTs4alsrKFI6MjgwNi5p'))

for i in range(len(data)):
    print(chr(data[i] + i), end='')

你知道什么是Py嘛

代码分析

s = str(input("please input your flag:"))

# 输入的字符串与下一个字符串异或后的结果
arr = [29, 0, 16, 23, 18, 61, 43, 41, 13, 28, 88, 94, 49, 110, 66, 44, 43, 28, 91, 108, 61, 7, 22, 7, 43, 51, 44, 46, 9,
       18, 20, 6, 2, 24]

# 输入的长度为35,且第一个为N
if len(s) != 35 or s[0] != 'N':
    print("error")
    exit(0)

# 校验输入的字符与下一个字符异或是否等于 arr
for i in range(1, len(s)):
    if ord(s[i - 1]) ^ ord(s[i]) != arr[i - 1]:
        print("error!")
        exit(0)
print("right!")

解题脚本

arr = [29, 0, 16, 23, 18, 61, 43, 41, 13, 28, 88, 94, 49, 110, 66, 44, 43, 28, 91, 108, 61, 7, 22, 7, 43, 51, 44, 46, 9,
       18, 20, 6, 2, 24]

# 已知的唯一字符
flag = [ord('N')]

# a ^ b = c 则 a = c ^ b 或 b = c ^ a
# 第i个 arr与flag异或就能得到 i + 1 个flag的值
for i in range(0, len(arr)):
    flag.append(arr[i] ^ flag[i])
    print(chr(flag[i]), end='')

给阿姨倒一杯Jvav

代码分析

public static void Encrypt(char[] arr) {
    	// 将输入的值 + @ 然后 ^ 32
        ArrayList<Integer> Resultlist = new ArrayList<>();
        for (char c : arr) {
            int result = (c + '@') ^ 32;
            Resultlist.add(Integer.valueOf(result));
        }
    	// 预期的结果(正确的结果)
        int[] KEY = {180, 136, 137, 147, 191, 137, 147, 191, 148, 136, 133, 191, 134, 140, 129, 135, 191, 65};
        ArrayList<Integer> KEYList = new ArrayList<>();
        for (int i : KEY) {
            KEYList.add(Integer.valueOf(i));
        }
    	// 将输入的值进行加密后与 预期的结果比较
        System.out.println("Result:");
        if (Resultlist.equals(KEYList)) {
            System.out.println("Congratulations!");
        } else {
            System.err.println("Error!");
        }
}

解题脚本

key = [180, 136, 137, 147, 191, 137, 147, 191, 148, 136, 133, 191, 134, 140, 129, 135, 191, 65]

for i in range(len(key)):
    tmp = (key[i] ^ 32) - ord('@')
    print(chr(tmp), end='')

Little Endian

代码分析

puts("please input your flag");
// 输入字符串
  scanf("%s", v4);
  v6 = v4;
  for ( i = 0; i <= 5; ++i )
  {
    // enc 与 0x12345678异或 然后比较输入的字符串
    if ( *v6 != (enc[i] ^ 0x12345678) )
    {
      printf("Data3rr0r!");
      exit(0);
    }
    v6 += 4;
  }
  printf("you are right!");
  return 0;

解题脚本

import binascii

enc = [0x51670536, 0x5E4F102C, 0x7E402211, 0x7C71094B, 0x7C553F1C, 0x6F5A3816]
key = 0x12345678
tmp = b''
for i in enc:
    tmp += binascii.hexlify(
        # 将大端存储转换为小端存储
        binascii.unhexlify(hex(i ^ key).removeprefix('0x'))[::-1])

print(binascii.unhexlify(tmp))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HNCTF week1 的相关文章

  • 二蛋赠书一期:《快捷学习Spring》

    文章目录 前言 活动规则 参与方式 本期赠书 快捷学习Spring 关于本书 作者介绍 内容简介 读者对象 获奖名单 结语 前言 大家好 我是二蛋 一个热爱技术 乐于分享的工程师 在过去的几年里 我一直通过各种渠道与大家分享技术知识和经验
  • 125KHz RFID芯片模块及电路替代方案

    125K RFID芯片模块是否可以写数据 以上是125KHz RFID芯片模块的供应商和芯片名称 频段 容量 功能 协议 18000 2 11784 11785协议 集成 RFID 收发器可对 100 到 150 kHz 频率范围内的转发器
  • 你所不知道的面试陷阱,巧妙避开,面试不再步步惊心

    你觉得自己比面试官更机智吗 如果准备充分 其实是可以的 在面试中 面试官有些时候会出一些陷阱题来考验你 这并不是出于恶意 而是希望对应聘者的能力有更加敏锐的判断 以下是10条最有可能难住你的面试陷阱问题以及化解它们的方法建议和回答样例 壹
  • 阿里员工离职换来一条血泪教训:以为当小白兔很安全,是你对职场最大的误解

    大家好 我是彭于晏 最近跟一些朋友见面 提起阿里辞退员工中 很多是职场小 老 白兔 看似温和 其实是组织中的祸患 这让我想起马云在湖畔大学首堂课上曾分享 小公司的成败在于你聘请什么样的人 大公司的成败在于你开除什么样的人 大公司里有很多老
  • 【C++】5、构建:CMake

    文章目录 一 概述 二 实战 2 1 内部构建 外部构建 2 2 CLion Cmake 一 概述 CMake 是跨平台构建工具 其通过 CMakeLists txt 描述 并生成 native 编译配置文件 在 Linux Unix 平台
  • vc2010使用libcurl静态库遇到连接失败的解决方案

    vc2010使用libcurl静态库 遇到连接失败的解决方案 2010 11 10 15 35 下载libcurl的源码 打开lib文件夹下项目 编译为静态链接库 在编译的时候出现问题如下 注 以前在vc2005下用mfc工程并且libcu

随机推荐

  • char型int型float型double型数组在内存中所占的字节数(16位、32位、64位PC机)

    在C语言中 以16位PC机为例 一个char型数据在内存中所占的字节数为1 一个int型数据在内存中所占的字节数为2 一个float型数据在内存中所占的字节数为4 一个double型数据在内存中所占的字节数为8
  • ThreadPool 线程池

    ThreadPool 线程池 1 例子 MyThreadPoolDemo 2 为什么用线程池 3 线程池如何使用 4 线程池几个重要参数 5 线程池底层工作原理 6 线程池用哪个 生产中如设置合理参数 一 MyThreadPoolDemo
  • Oracle数据库远程连接配置教程

    本人前一段时间做过Oracle数据库的相关工作 但是发现数据库的监听程序和服务名比较难搞定 而且网上也没有现成的教程 所以经过自己的探索之后将这片文章贡献给大家 如有不当之处还请谅解并请联系本人 此配置是在本机允许访问的前提下进行 如不允许
  • typescripe第二天—返回类型和注解

    函数参数类型和返回类型定义 简单类型定义 如下图 getTotal没有给它定义返回值类型 虽然被推断出了返回值是number类型 但如图所示 有string存在时 并未报错 可以直接给total一个类型注解 但错误的根本是getTotal
  • Android 11 WebView 打开html文件,加载时报错:ERR_ACCESS_DENIED

    问题描述 之前andorid 10上做的需求 移植到android 11上 在项目中 system app HTMLViewer 自定义的加载html的xxxActivity java文件访问 手机系统中的 system etc html
  • 不使用MFC AppWizard向导, 如果没有设置好项目参数, 编译时产生错误及解决办法

    转贴 在创建MFC项目时 不使用MFC AppWizard向导 如果没有设置好项目参数 就会在编译时产生很多连接错误 如error LNK2001错误 典型的错误提示有 libcmtd lib crt0 obj error LNK2001
  • 频分复用和时分复用

    频分复用 FDM Frequency Division Multiplexing 就是将用于传输信道的总带宽划分成若干个子频带 或称子信道 每一个子信道传输1路信号 频分复用要求总频率宽度大于各个子信道频率之和 同时为了保证各子信道中所传输
  • 【深入理解C++】类对象所占用的空间大小

    文章目录 1 须知 2 非静态成员变量 普通成员变量 3 静态成员变量 4 非静态成员函数 普通成员函数 5 静态成员函数 6 构造函数和析构函数 1 须知 类本身是没有大小的 类的大小指的是类的对象所占的大小 如果用 sizeof 运算符
  • 十个不错的 Linux 网络监视工具

    点击上方蓝字 快速关注我们 英文 Linuxandubuntu 编译 LCTT https linux cn article 9153 1 html 保持对我们的网络的管理 防止任何程序过度使用网络 导致整个系统操作变慢 对管理员来说是至关
  • 毕业设计-基于机器学习的新冠肺炎疫情预测精度研究

    目录 前言 课题背景和意义 实现技术思路 一 国内新冠肺炎疫情的统计分析 二 基于机器学习模型的新冠肺炎疫情研究 三 基于深度学习模型的新冠肺炎疫情研究 实现效果图样例 最后 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业
  • CentOS 7 搭建CA证书服务器

    一 实验环境 CA 192 168 199 141 Apache 192 168 199 143 二 实验步骤 1 CA证书服务器的配置 1 1 安装openssl工具 默认使安装完成的 root CA yum install y open
  • 十进制转8421_BCD码

    目录 一 BCD码简介 二 十进制转8421BCD码转换思路 三 程序编写 四 仿真验证 总结 一 BCD码简介 BCD码 Binary Coded Decimal 用4位二进制数来表示1位十进制数中的0 9这10个数码 是一种二进制的数字
  • JAVASCRIPT调用WEBSERVICE

    HTML端代码
  • inno setup打包脚本总结

    inno setup是比较简单好用的一款打包工具 下面以打包HelloWorld exe为例进行说明 一 打包目录的建立 创建source目录 用于放置主程序 依赖dll 资源等待打包文件 创建output目录 用于存放生成的安装包 Hel
  • BRDF详解(包括:irradiance,radiance,intensity,立体角)

    BRDF BRDF是双向反射分布函数 Bidirectional Reflectance Distribution Function BRDF 用来定义给定入射方向上的辐射照度 irradiance 如何影响给定出射方向上的辐射率 radi
  • 将GAN用于语义分割

    深度学习已经在图像分类 检测 分割 高分辨率图像生成等诸多领域取得了突破性的成绩 但是它也存在一些问题 首先 它与传统的机器学习方法一样 通常假设训练数据与测试数据服从同样的分布 或者是在训练数据上的预测结果与在测试数据上的预测结果服从同样
  • 使用char型数组过程中遇到的问题

    简述 最近开发中用到了char数组来接收数据 在使用中遇到了一些问题 这里记录一下 同时也回顾一下char数组的用法 代码之路 事例一 char aa 0 首先 我们要知道 0长度的数组在ISO C和C 的规格说明书中是不允许的 用VS20
  • 用人工智能压缩图像的尝试2

    收集42亿个8 8像素图 对它们排序 让形状接近的图排在接近的位置 然后输入ANN1 它以8 8 3字节为输入 32比特为输出 再训练ANN2 它以32比特index为输入 8 8的pixels为输出 总数据量为 8 8 3 4 B 4G
  • python中generate什么意思_python generate怎么用

    generate语句允许细化时间 Elaboration time 的选取或者某些语句的重复 这些语句可以包括模块实例引用的语句 连续赋值语句 always语句 initial语句和门级实例引用语句等 细化时间是指仿真开始前的一个阶段 此时
  • HNCTF week1

    Xor 代码分析 puts please input your flag scanf s Str 输入22个字符串 if strlen Str 22 printf strlen error exit 0 将输入的22个字符与0x34进行异或