当前位置: 首页 > news >正文

[RCTF2019]DontEatMe

前言

一道迷宫题,但是输入被加密后使用,迷宫也需要在程序中找出并没有直接输出

分析

反调试

在这里插入图片描述
发现有两个比较特殊的地方,随机数和创建了新线程,随机数后面又被重新赋值给覆盖了,暂时不用管,ZwSetInformationThread函数

NTSYSAPI NTSTATUS ZwSetInformationThread([in] HANDLE          ThreadHandle,     [in] THREADINFOCLASS ThreadInformationClass,[in] PVOID           ThreadInformation,[in] ULONG           ThreadInformationLength
);

发现类型参数传入17造成反调试

typedef enum _THREADINFOCLASS {ThreadBasicInformation,ThreadTimes,ThreadPriority,ThreadBasePriority,ThreadAffinityMask,ThreadImpersonationToken,ThreadDescriptorTableEntry,ThreadEnableAlignmentFaultFixup,ThreadEventPair,ThreadQuerySetWin32StartAddress,ThreadZeroTlsCell,ThreadPerformanceCount,ThreadAmILastThread,ThreadIdealProcessor,ThreadPriorityBoost,ThreadSetTlsArrayAddress,ThreadIsIoPending,ThreadHideFromDebugger
}THREAD_INFO_CLASS;

ThreadHiderFromDebugger如果为一个线程设置了这个标志,那么这个线程就不会再发送关于调试事件的通知,可以直接改为0,避免反调试

maze

在这里插入图片描述
直接让程序执行到这,switch上面区域对迷宫进行生成,可以发现是上下左右的移动判断,发现迷宫被存在BA53a8,dump出来

dword_BA53A8 dd 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
.data:00BA53A8 dd 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1
.data:00BA53A8 dd 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1
.data:00BA53A8 dd 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1
.data:00BA53A8 dd 1, 0, 1, 1, 1, 1, 0, 0, 0, 0@, 0, 0, 0, 1, 1, 1
.data:00BA53A8 dd 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1
.data:00BA53A8 dd 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1
.data:00BA53A8 dd 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1
.data:00BA53A8 dd 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1
.data:00BA53A8 dd 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1
.data:00BA53A8 dd 1, 0, 0, 0, 0, 0#, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1
.data:00BA53A8 dd 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1
.data:00BA53A8 dd 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1
.data:00BA53A8 dd 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
.data:00BA53A8 dd 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
.data:00BA53A8 dd 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
.data:00BA57A8 ; char byte_BA57A8[]

根据程序发现从#号到@这里路径为ddddwwwaaawwwddd

blowfish

根据findcrypt插件发现是belowfish加密,第一次看见这个加密

Blowfish 是一种可变密钥长度的 64 位分组密码。该算法由两部分组成:密钥扩展部分和数据加密部分。
在这里插入图片描述
算法实现直接放在了主函数密钥为覆盖随机数的值
00 0f 1a 01 35 3a 3b 20
在这里插入图片描述
因为字符串长度为16多余的八位是空格产生的,所以flag{db824ef8605c5235b4bbacfa2ff8e087}

http://www.lryc.cn/news/115072.html

相关文章:

  • 6. CSS(三)
  • 计算机网络—HTTP
  • Tomcat线程池原理
  • 踩坑 视觉SLAM 十四讲第二版 ch13 编译及运行问题
  • 【设计模式】-装饰器模式
  • 七月学习总结
  • Camunda 7.x 系列【6】Spring Boot 集成 Camunda 7.19
  • Kubernetes —调度器配置
  • 【微信小程序】申请蓝牙、位置和数据库等相关权限
  • ORB-SLAM2学习笔记6之D435i双目IR相机运行ROS版ORB-SLAM2并发布位姿pose的rostopic
  • 【数据结构与算法——TypeScript】哈希表
  • JavaScript 中常用简写语法技巧总结
  • 漫画算法做题笔记
  • JDBC学习笔记
  • 亚信科技AntDB数据库与库瀚存储方案完成兼容性互认证,联合方案带来约20%性能提升
  • 【MySQL】基础知识(一)
  • Ansible专栏目录
  • 【locust】使用locust + boomer实现对接口的压测
  • 亿欧智库:2023中国宠物行业新趋势洞察报告(附下载)
  • 时序数据库 TDengine 与 WhaleStudio 完成相互兼容性测试认证
  • Spring-1-深入理解Spring XML中的依赖注入(DI):简化Java应用程序开发
  • 负载均衡–HAProxy安装及搭建tidb数据库负载服务
  • Django各种缓存的配置
  • 实现跨域的几种方式
  • OpenCV: 对“google::protobuf::internal::Release_CompareAndSwap”的未定义
  • 无涯教程-Perl - References(引用)
  • 马斯克收购AI.com域名巩固xAI公司地位;如何评估大型语言模型的性能
  • uni-app:实现点击按钮出现底部弹窗(uni.showActionSheet+自定义)
  • flume系列之:监控zookeeper的flume配置写入节点,新增和删除flume agent节点,通过ansible自动部署和卸载flume agent
  • 了解以太网通信中的九阳神功 - SOME/IP协议