2023年春秋杯网络安全联赛春季赛Reverse题目复现

文章目录

  • 一.sum
    • 1. 分析程序逻辑
    • 2.解数独矩阵
    • 3.解题脚本
  • 二.Poisoned_tea_CHELL
    • 1. 重新识别函数及程序逻辑分析
    • 2.IDA动态调试(attach附加调试)
    • 3. 输入选项进行单步调试
    • 4.解题脚本
  • BWBA
  • OldSymbolicCode

一.sum

1. 分析程序逻辑

这里直接贴上当时分析的结果,根据程序行为不难猜出是数独问题(还得靠猜)
main:

int __cdecl main(int argc, const char **argv, const char **envp)
{char *mart; // rbpint flagValue; // r14dint sum; // r12d__int64 i; // rbxchar chr; // alint tmp; // eaxchar *md5str; // raxmart = matrix;flagValue = 1;sum = 0;puts("Welcome to Solver!");do{for ( i = 0LL; i != 9; ++i ){if ( !mart[i] )                           // 如果矩阵元素为零则输入字符{chr = getchar();if ( (chr - '1') > 8u )                 // 所以输入的必须是数字,否则错误flagValue = 0;elsemart[i] = chr - '0';                  // 数字}tmp = mart[i];sum += tmp;}mart += 9;                                  // 一次处理九个字符}while ( mart != &matrix[81] );                // 一共81if ( flagValue && verify() )                  // 盲猜是数独{puts("You Win!");__snprintf_chk(buf, 32LL, 1LL, 32LL, "%d"); // 405md5str = str2md5(buf, strlen(buf));__printf_chk(1LL, "flag is: flag{%s}\n\n", md5str);// flag{bbcbff5c1f1ded46c25d28119a85c6c2}exit(0);}puts("Again~");return 0;
}

verify(验证):
尤其是当时看到九个一组以及按列检查就反应过来应该是数独

__int64 verify()
{char *matr; // rsi__int64 j; // rcx_DWORD *CHECK; // rdi__int64 tmp; // rdichar *matr2; // rsi__int64 k; // rcx_DWORD *check2; // rdi__int64 chr; // rdi__int64 iii; // r8char *matr3; // r9__int64 len3; // rcx_DWORD *check3; // rdiint cout; // r10dchar *matr4; // rdi__int64 i; // rcx__int64 tmpchr; // rbxmatr = matrix;
LABEL_2:j = 10LL;CHECK = check;while ( j ){*CHECK++ = 0;                               // 初始化空间--j;}while ( 1 ){tmp = matr[j];if ( check[tmp] )                           // 不能访问已访问过的return 0LL;++j;check[tmp] = 1;                             // 置一if ( j == 9 ){matr += 9;                                // 九个一组if ( matr != &matrix[81] )goto LABEL_2;matr2 = matrix;
LABEL_9:k = 10LL;check2 = check;while ( k ){*check2++ = 0;                          // 再次清空check数组--k;}while ( 1 ){chr = matr2[9 * k];                     // 检查第一列if ( check[chr] )return 0LL;++k;check[chr] = 1;if ( k == 9 ){if ( ++matr2 != &matrix[9] )goto LABEL_9;iii = 0LL;while ( 2 ){                                     // 检查第二列matr3 = &matrix[iii];do{len3 = 10LL;check3 = check;cout = 3;while ( len3 )                    // 清空check{*check3++ = 0;--len3;}matr4 = matr3;while ( 2 ){for ( i = 0LL; i != 3; ++i ){tmpchr = matr4[i];if ( check[tmpchr] )          // 也是不能有1return 0LL;check[tmpchr] = 1;}matr4 += 9;if ( --cout )continue;break;}matr3 += 3;}while ( matr3 != &matr2[iii] );iii += 27LL;if ( iii != 81 )continue;break;}return 1LL;}}}}
}

2.解数独矩阵

先跟进martix然后将数据读取出来
在这里插入图片描述
然后询问ChatGpt直接得到答案
在这里插入图片描述
以及给出解题代码和运行结果:
在这里插入图片描述
然后填数独就可以过了

3.解题脚本

#include<stdio.h>
int main()
{int sum = 0;unsigned char matrix[81] ={5,   3,   0,   0,   7,   0,   0,   0,   0,   6,0,   0,   1,   9,   5,   0,   0,   0,   0,   9,8,   0,   0,   0,   0,   6,   0,   8,   0,   0,0,   6,   0,   0,   0,   3,   4,   0,   0,   8,0,   3,   0,   0,   1,   7,   0,   0,   0,   2,0,   0,   0,   6,   0,   6,   0,   0,   0,   0,2,   8,   0,   0,   0,   0,   4,   1,   9,   0,0,   5,   0,   0,   0,   0,   8,   0,   0,   7,9};int grid[81] = {5, 3, 4, 6, 7, 8, 9, 1, 2,6, 7, 2, 1, 9, 5, 3, 4, 8,1, 9, 8, 3, 4, 2, 5, 6, 7,8, 5, 9, 7, 6, 1, 4, 2, 3,4, 2, 6, 8, 5, 3, 7, 9, 1,7, 1, 3, 9, 2, 4, 8, 5, 6,9, 6, 1, 5, 3, 7, 2, 8, 4,2, 8, 7, 4, 1, 9, 6, 3, 5,3, 4, 5, 2, 8, 6, 1, 7, 9};int len = 0;for (int i = 0; i < 81; i++){if (!matrix[i]){len++;printf("%d", grid[i]);//输出需要填充的序列//468912723481342575971422657913948591537428763345261}}return 0;
}

linux下运行程序,输入序列:468912723481342575971422657913948591537428763345261
即可得到答案:
在这里插入图片描述

二.Poisoned_tea_CHELL

1. 重新识别函数及程序逻辑分析

这里可能是识别问题,找到这三块红色区域查看汇编
在这里插入图片描述
然后可以发现这里莫名其妙定义了四个字节数据,按u取消掉下方指令定义
在这里插入图片描述
然后从这段数据头(0x763处)按p识别为函数,即可可以看到tea逻辑
在这里插入图片描述
另外两块红色区域同理,重新识别后可以看到主函数(如果看不到那就对tea函数交叉引用向上找)
在这里插入图片描述
这里给出我分析美化后的主函数:
不过这里有一个关键问题就是他的key和关键数据并不能通过静态分析看到,所以需要动态分析了

__int64 __fastcall Main()
{__int64 result; // raxint i; // [rsp+Ch] [rbp-464h]int j; // [rsp+10h] [rbp-460h]int chr1; // [rsp+14h] [rbp-45Ch] BYREFint chr2; // [rsp+18h] [rbp-458h]int v5; // [rsp+1Ch] [rbp-454h]int key[8]; // [rsp+20h] [rbp-450h] BYREFint d1; // [rsp+40h] [rbp-430h]int d2; // [rsp+44h] [rbp-42Ch]int b1; // [rsp+48h] [rbp-428h]int b2; // [rsp+4Ch] [rbp-424h]int v11; // [rsp+50h] [rbp-420h]int buffer[258]; // [rsp+60h] [rbp-410h] BYREFunsigned __int64 v13; // [rsp+468h] [rbp-8h]v13 = __readfsqword(0x28u);key[0] = 5;key[1] = 2;key[2] = dword_7FA16F6F8464;                  // 猜测也是一位数,可以爆破key[3] = dword_7FA16F6F8454;key[4] = 0;memset(buffer, 0, 0x400uLL);sub_7FA16F6F5524();sub_7FA16F6F5554();sub_7FA16F6F5594();                           // 这几个函数找不到sub_7FA16F6F5574(&unk_7FA16F6F6469, buffer);chr1 = 0;chr2 = 0;v5 = 0;for ( i = 0; buffer[i]; i += 2 )              // 也就是每次对buffer的两个字符进行tea加密{chr1 = buffer[i];chr2 = buffer[i + 1];Tea(dword_7FA16F6F8474, &chr1, key);        // 一次加密两个字符buffer[i] = chr1;                           // 更新buffer串buffer[i + 1] = chr2;}d1 = 0;d2 = 0;b1 = 0;b2 = 0;v11 = 0;for ( j = 0; buffer[j]; j += 2 )              // 比较函数{d1 = desStr[j];d2 = desStr[j + 1];b1 = buffer[j];b2 = buffer[j + 1];if ( d1 != b1 || d2 != b2 )break;}sub_7FA16F6F5524();result = 0LL;if ( v13 != __readfsqword(0x28u) )return sub_7FA16F6F5544();return result;
}

2.IDA动态调试(attach附加调试)

如果直接使用ida远程动调会提示错误:
Input file is a dynamic library, it cannot be run by itself.
Please specify the host application (Debugger, Process options)
在这里插入图片描述
提示这是个动态库文件,需要附加进程进行调试,那么我们可以使用IDA的附加调试功能

  1. linux虚拟机使用root权限运行ida的linux_server64
    必须使用root权限,否则后续附加调试会失败,这是由于IDA服务端的权限不够
    在这里插入图片描述
  2. 运行程序
    在这里插入图片描述
  3. 附加调试
    Debugger>Attach to process
    在这里插入图片描述然后找到毒tea进程,双击即可
    在这里插入图片描述
    选择same
    在这里插入图片描述

3. 输入选项进行单步调试

成功附加后会发现按f7或者f8都没反应,此时程序等待输出,先到linux虚拟机输入一个选项
如果输入1,后续调试比较难找,总之就是找到Loading字符串,注意不能跳过了
(直接搜索字符串搜索不到,这题应该是有SMC的操作对程序代码进行解密)
下方的call sun_7f006f7c2536就是主函数,跟进重新识别即可看到逻辑(这里不做详细介绍,以选项2为主)
在这里插入图片描述

如果输入2
一直按f7,最后可以发现程序会卡住,并且还能看见InputFlag字符串,这里就是主函数了
在这里插入图片描述
往上翻找到起始地址,对loc_loc_7F3BB0FB6536按p识别为函数就可以看到主函数逻辑了
在这里插入图片描述
然后还有一些没有被正确识别的函数,需要手动跟进按p识别为函数,然后回到反汇编界面按f5重新识别即可
在这里插入图片描述
key的值:
在这里插入图片描述
tea加密循环次数的值(所以这个tea循环36次而非32次):
在这里插入图片描述
加密后的data,跟进可以提取出数据
在这里插入图片描述

4.解题脚本

#include<stdio.h>
void Tea(int len, unsigned int* buffer, int* key)
{int i; // [rsp+24h] [rbp-14h]unsigned int v5; // [rsp+28h] [rbp-10h]unsigned int v6; // [rsp+2Ch] [rbp-Ch]unsigned int v7; // [rsp+30h] [rbp-8h]v5 = *buffer;v6 = buffer[1];v7 = 0xd9b6d99c;for (i = 0; i < len; ++i){v6 -= (v5 + ((v5 >> 5) ^ (16 * v5))) ^ (key[(v7 >> 11) & 3] + v7);v7 += 0x41104111;v5 -= (v6 + ((v6 >> 5) ^ (16 * v6))) ^ (key[v7 & 3] + v7);}*buffer = v5;buffer[1] = v6;
}
int main()
{int  buffer[14] ={-318921983,1639894517,-1197577091,-835265432,1265521566,1680782596,1425658684,1829167973,-360235693,-1537112825,-676229584,-1000652734,0,0,};int key[5] = { 5,2,9,7,0 };int chr[2] = { 0 };for (int i = 0; buffer[i]; i += 2)              // 也就是每次对buffer的两个字符进行tea加密{chr[0] = buffer[i];chr[1] = buffer[i + 1];Tea(36, chr, key);						// 一次加密两个字符buffer[i] = chr[0];                           // 更新buffer串buffer[i + 1] = chr[1];}unsigned char* p = (unsigned char*)buffer;printf("%s", p);//Thisisflag{cdfec405-3f4b-457e-92fe-f6446098ee2e}return 0;
}

BWBA

简单分析了一下程序逻辑
在这里插入图片描述
这里复现时询问ChatGpt回答我的是FFT算法,而不是DCT,让其输出解密脚本也一直错误,看来还是得多了解一下这个算法
参考大佬文章:2023春秋杯春季赛WP-REVERSE(AK)
能用cv2库函数进行处理

import numpy as np
import cv2x = np.array([370.75,234.362,-58.0834,59.8212,88.8221,-30.2406,21.8316,49.9781,-33.5259,2.69675,43.5386,-30.2925,-28.0754,27.593,-2.53962,-27.1883,-5.60777,-0.263937,6.80326,8.03022,-6.34681,-0.89506,-6.80685,-13.6088,27.0958,29.8439,-21.7688,-20.6925,-13.2155,-37.0994,2.23679,37.6699,-3.5,9.85188,57.2806,13.5715,-20.7184,8.6816,3.59369,-4.5302,4.22203,-28.8166,-23.695,31.2268,6.58823,-39.9966,-20.7877,-19.7624,-22.031,16.3285,2.07557,-26.2521,16.1914,18.3976,-26.9295,3.03769,41.0412,20.2598,14.991,6.99392,-22.3752,-7.24466,8.96299,-10.4874], dtype=np.float64)
x = cv2.idct(x)
x = x.ravel()
flag=''for i in range(len(x)):flag+=chr(round(x[i]))
print(flag)#flag{9ab488a7-5b11-1b15-04f2-c230704ecf72}

关于DCT算法这几篇文章不错:

  1. DCT离散余弦变换
  2. 详解离散余弦变换(DCT)

OldSymbolicCode

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/18254.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NLP相关知识点(慢慢更新)

一、基础概念 1.1. NLP 中的 Tokenization 是什么? NLP技术中 Tokenization 也可以被称作是“word segmentation”&#xff0c;直译为中文是指 分词。 分词是NLP的基础任务&#xff0c;按照特定需求能把文本中的句子、段落切分成一个字符串序列&#xff08;其中的元素通常称…

SpringCould+Vue3-Element-Admin 登录接口,用户信息接口以及Token验证的实现【Taurus教育平台】

文章目录 一.SpringCouldVue3-Element-Admin 登录接口&#xff0c;用户信息接口以及Token验证的实现【Taurus教育平台】1.1 背景1.2 数据库 二、登录接口及其Token实现2.1 前端2.2 后端2.2.1 控制层2.2.2 service层2.2.3 工具类&#xff1a;CreateJwt2.2.4 Dao-Mapper 三、用户…

【Bert、T5、GPT】fine tune transformers 文本分类/情感分析

【Bert、T5、GPT】fine tune transformers 文本分类/情感分析 0、前言text classificationemotions 数据集data visualization analysisdataset to dataframelabel analysistext length analysis text > tokenstokenize the whole dataset fine-tune transformersdistilbert…

Django通过nginx 部署(成功运行)

配置python版本和ssh启用root参考其它文章 完整项目路径 /root/projects/mysutra_pro 下级目录/root/projects/mysutra_pro/mysutra是源码目录 rootVM-12-2-debian:~/projects/mysutra_pro# ls db.sqlite3 manage.py ms_env mysutra rootVM-12-2-debian:~/projects/mysutr…

es Elasticsearch的增删改查(含数组操作)(类型,原理) - from chatgpt

父文章 算法中的特征的保存, es 和 mysql 和 odps hadoop hbase的区别_个人渣记录仅为自己搜索用的博客-CSDN博客 Elasticsearch如何做到数十亿数据查询毫秒级响应&#xff1f; - 知乎 ES系列之利用filter让你的查询效率飞起来_es filter_lucasma.eth的博客-CSDN博客 ES查询…

文心一言对比chatgpt

文章目录 一、 介绍二、 回复速度比较三、 写代码能力四、 做表格能力五、 写文案能力六、 解决数学问题能力七、 绘画能力八、 实时更新信息九、 总结 一、 介绍 文心一言对比chatgpt。 测试了上百个案例&#xff0c;挑选几个经典的案例。 二、 回复速度比较 百度文心耗时10…

CSDN chatGPT初体验

我的问题&#xff1a;用java实现一个B树 public class BTree {private int t;private Node root;private class Node {private int n;private boolean leaf;private int[] keys;private Node[] children;public Node(boolean leafNode) {this.n 0;this.leaf leafNode;this.ke…

chatgpt赋能python:Python岗位需求日渐增加

Python岗位需求日渐增加 Python编程语言在当前的IT行业中越来越受欢迎。其灵活性和易用性使得Python在各种领域中使用广泛&#xff0c;比如Web开发、数据科学、人工智能等。作为一名有10年Python编程经验的工程师&#xff0c;我认为Python是一种非常有前途的编程语言&#xff…

ChatGPT可能被滥用于网络犯罪

科技是一把双刃剑 ChatGPT一经发布&#xff0c;短时间内就成为了现象级的应用。其清晰明确的回答和丰富的知识&#xff0c;昭示着AI技术造福人类&#xff0c;彻底简化我们生活工作这一美好的未来愿景。对于解决各行各业的许多问题&#xff0c;ChatGPT也提供了另外一种思路&…

用ChatGPT构建网络设备表,并根据设备关系生成网络拓扑

构造一个数据表&#xff0c;存储包括交换机、路由器、防火墙、入侵检测、上网行为管理等设备的编号、序列号、IP、MAC、访问地址、用户名、密码、管理员、物理位置、上联设备ip等信息 下面是一个示例数据表&#xff1a; Device IDSerial NumberIPMACAccess URLUsernamePassword…

七大语言模型“偏见与毒性”的角逐,ChatGpt3.5综合表现优良

颠覆性的技术进步和人工智能的快速发展&#xff0c;催生了现如今LLM&#xff08;大型语言模型&#xff09;和AIGC&#xff08;AI生成内容&#xff09;的盛行。这些创新性的模型和算法不仅能够理解、生成和处理人类语言&#xff0c;还能够模拟智能思维和创造力&#xff0c;成为各…

阿里版ChatGPT已接入钉钉,张勇:未来所有业务都有大模型加持

机器之心报道 机器之心编辑部 阿里&#xff1a;大模型也是基础设施。 4 月 7 日下午&#xff0c;阿里云没有一点预告的突然宣布&#xff0c;自研类 ChatGPT 产品开启企业邀测&#xff0c;模型名为「通义千问」。 虽然是非常小范围的测试&#xff0c;但邀测消息刚放出&#xff…

阿里巴巴开源Chat2DB v1.0.11 初体验

阿里巴巴开源Chat2DB v1.0.11 初体验 前言什么是Chat2DB下载安装安装配置Chat2DB初体验配置数据源准备测试数据认识几个功能菜单开始测试自然语言转SQLSQL解释SQL优化 使用总结后续功能结语 前言 作为一名阿里巴巴开源项目的拥护者&#xff0c;从Chat2DB开源至今都有关注这个开…

估值 2 个月从 11 亿美元降到 3 亿美元,投资人清仓跑路,国产大模型创业遇冷...

图片来源&#xff1a;由无界 AI生成 创业未半&#xff0c;而中道崩殂。 6 月 29 日&#xff0c;美团发布公告以 20.65 亿元全资收购光年之外全部权益&#xff0c;距离光年之外正式营业刚过去 84 天。 这是目前中国大模型创业领域最大的收购案&#xff0c;光年之外也在 4 个月时…

英伟达帝国的一道裂缝

2012年&#xff0c;AI圈发生了两件大事&#xff0c;按时间顺序&#xff0c;第一件是谷歌组团已久的Google Brain发布“出道作”——一个能够识别猫的深度学习网络“谷歌猫”&#xff0c;74.8%的识别准确率&#xff0c;比知名识别图像大赛ImageNet前一年获胜算法的74%还要高出0.…

也谈“前端已死”

一、一些迹象 逛社区&#xff0c;偶然看到了这张图片&#xff1a; 嗯……我眉头一皱&#xff0c;久久不语&#xff0c;心想&#xff0c;有这么夸张吗&#xff0c;假的吧&#xff1f; 突然想到&#xff0c;最近我在社区发了个前端招聘的信息&#xff0c;结果简历漫天纷飞&…

写文、画图、替人直播,小巨头混战AIGC

文&#xff5c;光锥智能&#xff0c;作者&#xff5c;黄小艺、郝鑫&#xff0c;编辑&#xff5c;刘雨琦 大模型的春风&#xff0c;吹乱了内容平台们的心。 作为“被革命”的第一梯队&#xff0c;内容平台们跃跃欲试&#xff0c;欲抢占时间窗口。 5月6日&#xff0c;小红书被曝…

AI来势汹汹,这份「生存计划」请查收!

AIGC即人工智能生产内容&#xff0c;最近可太火了&#xff0c;但是火了这么久&#xff0c;有些人都没明白到底为什么火&#xff1f;甚至不明所以觉得“AI替代XX”&#xff0c;小编认为没必要焦虑&#xff0c;一起来看一下吧。 AI工具们一日千张图、3小时写一本书、2分钟构建一个…

“前端已死”

一、一些迹象 逛社区&#xff0c;偶然看到了这张图片&#xff1a; 嗯……我眉头一皱&#xff0c;久久不语&#xff0c;心想&#xff0c;有这么夸张吗&#xff0c;假的吧&#xff1f; 突然想到&#xff0c;最近我在社区发了个前端招聘的信息&#xff0c;结果简历漫天纷飞&…

爆肝一晚上,我总结了 2023 年程序员必学的 Prompt Engineering 高杠杆技术!

前言 大家好&#xff0c;我是「周三不Coding」。 众所周知&#xff0c;程序员不能失去 ChatGPT&#xff0c;就像西方不能失去耶路撒冷。 ChatGPT 的爆火也使得 Prompt Engineering 这门技术为众人熟知。 短期来看&#xff0c;Prompt Engineering 是一门高杠杆技术&#xff…