楼主: wwwab
收起左侧

[其他相关] 【奖励已发放】卡饭论坛网络安全夺旗赛 第1期

  [复制链接]
Genes
发表于 2025-1-1 23:35:06 | 显示全部楼层
感谢~~
hans2000
发表于 2025-1-2 16:24:10 | 显示全部楼层
swizzer 发表于 2024-12-31 19:27
坏,那道密码学不会没人做出来吧

对的。我研究了三个小时愣是没有思路。
popk
发表于 2025-1-2 20:31:38 | 显示全部楼层
popk 发表于 2024-11-23 20:49
flag1{dX3$aK2$}
flag2{279446fe308f25cf1b3b84746b5a68bbb3e1445d}
flag3{qJ2sO7sC}

后记
又看看了flag4,0.0,预期flag需要限定第一个字符'f',否则非预期,这里记录一下
代码基本都是让chatgpt写的,AI误我呀0.0
  1. import string

  2. def subset_sum_memo_indices(numbers, target):
  3.     memo = {}

  4.     def helper(index, target):
  5.         if target == 0:
  6.             return []
  7.         if index == len(numbers) or target < 0:
  8.             return None
  9.         if (index, target) in memo:
  10.             return memo[(index, target)]

  11.         # 尝试包含当前数字
  12.         with_current = helper(index + 1, target - numbers[index])
  13.         if with_current is not None:
  14.             memo[(index, target)] = with_current + [index]
  15.             return memo[(index, target)]

  16.         # 尝试不包含当前数字
  17.         without_current = helper(index + 1, target)
  18.         memo[(index, target)] = without_current
  19.         return without_current

  20.     result = helper(0, target)
  21.     return result
  22. def set_bits(indices):
  23.     result = 0
  24.     for index in indices:
  25.         result |= (1 << index)  # 将第 index 位设置为 1
  26.     return result
  27. def decode_flag4(a5, a3):
  28.     a1 = []

  29.     for value in a5:
  30.         pos=subset_sum_memo_indices(a3,value)
  31.         v=set_bits(pos)
  32.         a1.append(v)
  33.     return a1
  34. def recover(a,first=ord('f')):
  35.     n = len(a) + 1  # b 的长度比 a 多 1
  36.     b = [0] * n

  37.     # 假设 b[0] 为未知值,依次计算
  38.     b[0] = first#a[0] // 2  # 假设第一个值可以从 a[0] 平分(可能需要调整)
  39.     for i in range(1, n - 1):
  40.         b[i] = a[i - 1] - b[i - 1]

  41.     # 计算最后一个元素
  42.     b[n - 1] = a[n - 2] - b[n - 2]
  43.     return b
  44. def is_printable_bytes(data):
  45.     try:
  46.         # 尝试解码为字符串
  47.         decoded = data.decode("utf-8")
  48.         # 检查是否所有字符都可打印
  49.         return decoded.isprintable()
  50.     except UnicodeDecodeError:
  51.         # 如果解码失败,则不是可打印的
  52.         return False
  53. def get_flag4():
  54.     table_480788 = [
  55.         391141429, 3478124220, 3336047727, 3527421942, 1597786510,
  56.         2019990264, 2744862007, 3898825252, 486177504, 184886860,
  57.         781690097, 63429722, 1180618910, 1947105626, 1555881410, 2578824499
  58.     ]  # 权重数组

  59.     target_4805A8 = [
  60.         2290375496, 6377613399, 1851683274, 3008635871, 4955741497,
  61.         4493937495, 7933494809, 3313318585, 5587460370, 2681599712,
  62.         2618169990, 5354670310, 3407564684, 1851683274, 3862218622,
  63.         2290375496, 671064364, 671064364, 3249888863, 4805770273,
  64.         2618169990, 5354670310, 6049818905, 3313318585, 2618169990,
  65.         5354670310, 2633373371
  66.     ]
  67.     recovered_flag4 = decode_flag4(target_4805A8, table_480788[::-1])
  68.     # print("[-]Recovered a1:", bytes(recovered_flag4))
  69.     ss=string.printable
  70.     for s in ss:
  71.         re_flag4=recover(recovered_flag4,ord(s))
  72.         bs=bytes(re_flag4)
  73.         if is_printable_bytes(bs):
  74.             flag4=bs.decode()
  75.             print(flag4)
  76.     print('----------------------------------------------------------------------------')
  77.     print('[#]flag4:\n',flag4,sep='')

  78. if __name__=='__main__':
  79.     get_flag4()

  80. '''
  81. em`hzlmbot`dj`ht^b^c`djq`dj~
  82. flag{knapsack_is_a_backpack}
  83. gkbf|jo`qrbbl^jr```abblobbl|
  84. hjce}ip_rqcam]kqa_a`camncam{
  85. iidd~hq^spd`n\lpb^b_d`nmd`nz
  86. ----------------------------------------------------------------------------
  87. [#]flag4:
  88. iidd~hq^spd`n\lpb^b_d`nmd`nz
  89. '''

  90. '''
  91. E:\sample\kf\4>E:\sample\kf\4\backpack.exe
  92. Enter flag: em`hzlmbot`dj`ht^b^c`djq`dj~
  93. Congratulations! You got the correct flag~

  94. E:\sample\kf\4>E:\sample\kf\4\backpack.exe
  95. Enter flag: flag{knapsack_is_a_backpack}
  96. Congratulations! You got the correct flag~

  97. E:\sample\kf\4>E:\sample\kf\4\backpack.exe
  98. Enter flag: gkbf|jo`qrbbl^jr```abblobbl|
  99. Congratulations! You got the correct flag~

  100. E:\sample\kf\4>E:\sample\kf\4\backpack.exe
  101. Enter flag: hjce}ip_rqcam]kqa_a`camncam{
  102. Congratulations! You got the correct flag~

  103. E:\sample\kf\4>E:\sample\kf\4\backpack.exe
  104. Enter flag: iidd~hq^spd`n\lpb^b_d`nmd`nz
  105. Congratulations! You got the correct flag~

  106. '''
复制代码


其它记录见附件,




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?快速注册

x

评分

参与人数 3经验 +100 人气 +6 收起 理由
QVM360 + 100 优秀WP奖励
wwwab + 3 版区有你更精彩: )
swizzer + 3 非常好wp

查看全部评分

swizzer
发表于 2025-1-2 23:47:56 | 显示全部楼层
popk 发表于 2025-1-2 20:31
后记
又看看了flag4,0.0,预期flag需要限定第一个字符'f',否则非预期,这里记录一下

原来是在这里的非预期

因为是CTF比赛所以"flag{"作为flag固定的头部格式可以算作已知条件,不然很容易就能想到这题绝对不止一个解。这点的确没在程序里做验证,有点疏忽了
wwwab
 楼主| 发表于 2025-1-3 19:44:48 | 显示全部楼层
popk 发表于 2025-1-2 20:31
后记
又看看了flag4,0.0,预期flag需要限定第一个字符'f',否则非预期,这里记录一下

感谢活动结束后首个成文的优秀WP,我去给您申请题解奖励

不过,内容具体详实且完整将文章发布到样本区的话奖励会更高
True、end
发表于 2025-1-12 23:46:49 | 显示全部楼层
第四题我来个C语言版本的吧....
  1. #include <windows.h>
  2. #include <stdio.h>
  3. #include <stdint.h>
  4. #include <intrin.h>
  5. #include <stdbool.h>

  6. bool findSubset(UINT64* arr, int n, UINT64 target, UINT64* subset, int subsetSize, UINT64* hex)
  7. {
  8.         if (target == 0){

  9.                 for (int i = 0; i < subsetSize; i++){
  10.                         hex[i] = subset[i];
  11.                 }
  12.                 return true;
  13.         }
  14.         if (n == 0 || target < 0){
  15.                 return false;
  16.         }

  17.         subset[subsetSize] = arr[n - 1];
  18.         if (findSubset(arr, n - 1, target - arr[n - 1], subset, subsetSize + 1, hex)){
  19.                 return true;
  20.         }

  21.         return findSubset(arr, n - 1, target, subset, subsetSize, hex);
  22. }

  23. int main()
  24. {
  25. #define KEY_NUM (ARRAYSIZE(hexNumbers))

  26.         UINT64 hexNumbers[] = {
  27.                 0x99B5BD33, 0x5CBCDDC2, 0x740E795A, 0x465ED09E,
  28.                 0x3C7DC5A, 0x2E97A4F1, 0x0B05264C, 0x1CFA7AE0,
  29.                 0x0E8635A24, 0x0A39B4537, 0x78669AF8, 0x5F3C498E,
  30.                 0x0D2402FF6, 0x0C6D80C6F, 0x0CF4FF6BC, 0x17505835
  31.         };

  32.         UINT64 target[] = {
  33.                 0x88845B48, 0x17C22A857, 0x6E5E71CA, 0x0B35423DF,
  34.                 0x127629D39, 0x10BDC0B57, 0x1D8DF8619, 0x0C57D3AB9,
  35.                 0x14D09E112, 0x9FD5F6E0, 0x9C0E1A86, 0x13F29C8E6,
  36.                 0x0CB1B4F8C, 0x6E5E71CA, 0x0E634C77E, 0x88845B48,
  37.                 0x27FFA12C, 0x27FFA12C, 0x0C1B55E5F, 0x11E723C21,
  38.                 0x9C0E1A86, 0x13F29C8E6, 0x16898E919, 0x0C57D3AB9,
  39.                 0x9C0E1A86, 0x13F29C8E6, 0x9CF616BB
  40.         };

  41.         UINT64 subset[KEY_NUM];
  42.         UINT64 hex[KEY_NUM];

  43.         int s = 'f';
  44.         printf("%c", s);
  45.         for (int k = 0; k < ARRAYSIZE(target); ++k){
  46.                 memset(hex, 0, sizeof(hex));
  47.                 if (!findSubset(hexNumbers, KEY_NUM, target[k], subset, 0, hex)){
  48.                         printf("No subset found.\n");
  49.                 }

  50.                 int c = 0;
  51.                 for (int i = 0; i < KEY_NUM; ++i){
  52.                         for (int j = 0; j < KEY_NUM; ++j){
  53.                                 if (hex[j] == 0)
  54.                                         break;
  55.                                 if (hex[j] == hexNumbers[i])
  56.                                         c |= (1 << (i));
  57.                         }
  58.                 }
  59.                 //printf("[%x]", c);
  60.                 s = c - s;
  61.                 if (s < 0x20 || s >= 0x7f)
  62.                         printf("\n code error %x\n", s);
  63.                 printf("%c", s);

  64.         }

  65.         return 0;
  66. }
复制代码


您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

手机版|杀毒软件|软件论坛| 卡饭论坛

Copyright © KaFan  KaFan.cn All Rights Reserved.

Powered by Discuz! X3.4( 沪ICP备2020031077号-2 ) GMT+8, 2025-1-22 17:56 , Processed in 0.104578 second(s), 16 queries .

卡饭网所发布的一切软件、样本、工具、文章等仅限用于学习和研究,不得将上述内容用于商业或者其他非法用途,否则产生的一切后果自负,本站信息来自网络,版权争议问题与本站无关,您必须在下载后的24小时之内从您的电脑中彻底删除上述信息,如有问题请通过邮件与我们联系。

快速回复 客服 返回顶部 返回列表