[DASCTF 2023 0X401七月暑期挑战赛] REV1 controlflow复现

news2024/12/23 17:51:46

这东西没怎么研究过,不过很多人都完成了,不过这种比赛有很多应该是拿的别人的wp,所以减去些水份,赛后拿到一个wp是人c程序实现的。然后根据原代码还原一下加密流程。

首先是main

 这里比较特殊,一开始的3个变量明显是加密函数,可以是程序并没有用到,只在比较长度为40以后就作了个与0x401的异或就结果了。

然后看汇编main这部分

 

这里是main的开头,后边这个箭头是花指令,实际上什么都没作(call指令长度是5,直接调用call $+5就等于接着执行)但 ida会在这里报错经常导致反编译出些问题。

前边3个箭头是另一种花指令吧,直接把3个函数地址压入栈中,在最后不平衡栈的情况在ret的时候会被作为返回地址执行。

main
0x401220
0x4011a0
0x401100

 然后再看0x401220

先把一个函数存入arg_4,这人函数是个明文加密后与密文比较的函数,跟进后发现它把这个函数放在下两个函数之后

 

 再回来看220干了啥

 他先执行了一个+=i*i的操作然后调用0x401560

它执行了 ^=i*(i+1)的操作,然后把 15af存入 4470然后就跳出结束了

220这块就结束了,然后下边 1A0 

1A0,作了两个压栈分别是1E4和470(470是上一步存入的5AF)也和开始一样是通过压栈实现函数调用。

回过头来再看5AF在执行啥操作

 

这是个循环操作计数器用370,然后对每个值减序号: -=i

后边的1E4函数

 

这里执行了: *=3 操作

后边是100函数

 虽然有点长,但是这块没啥特殊操作,可以直接反编译,这块是一个0空间实现两值交换的程序(编程入门会有)

然后就是290去比较了

 

加密过程是这样

main^=0x401存入220,1A0,100作为后续执行函数
220+=i*i存入290到100之后,并调用560
   560^=i*(i+1)从偏移10开始的20个数
1A0存入后续执行5AF,1E4
  5AF-=i5AF不是个完整的函数
  1E4*=31E4也不是完整的函数
100交换从偏移10开始对10对数(20个)两两交换位置
290与密文比较

 对照这个反过来写解密程序

c = [3279, 3264, 3324, 3288, 3363, 3345, 3528, 3453, 3498, 3627, 3708, 3675, 3753, 3786, 3930, 3930, 4017, 4173, 4245, 4476, 4989, 4851, 5166, 5148, 4659, 4743, 4596, 5976, 5217, 4650, 6018, 6135, 6417, 6477, 6672, 6891, 7056, 7398, 7650, 7890]

c1 = c[:10]+sum([[c[10+i+1],c[10+i]] for i in range(0,20,2)],[]) + c[30:]

c2 = [((v//3)+i)%(1<<32) for i,v in enumerate(c1)]

c3 = c2[:10]+[c2[10+i]^(i*(i+1)) for i in range(20)] + c2[30:]

c4 = [(v-i*i)^0x401 for i,v in enumerate(c3)]

bytes(c4)
#b'DASCTF{TWpnemRuSTRkVzVsWVhOMmJqZzNOREoy}'

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VS2010打开VC6工程进行调试时的问题解决方法

VS2010打开VC6工程进行调试时的问题解决方法 在工程属性页&#xff0c;“配置属性—链接器—输入—忽略特定默认库” 中添加编译时提示无法找到的几个lib库&#xff0c;如下图所示

【iOS】App仿写--管理系统

文章目录 前言一、账号界面二、功能界面三、添加功能四、删除功能五、更改功能六、查找功能七、排序功能八、退出功能总结 前言 在日常生活中&#xff0c;如果用文字来记述与管理我们数据会十分麻烦&#xff0c;并且人工成本较高&#xff0c;这里笔者给出一种管理系统的模版&a…

DSP开发软件css(10)使用基础(汉化、工程导入、设置目标配置文件、选择仿真器和芯片型号、添加文件|库路径、编译下载等操作)

DSP开发软件css(10)使用基础(汉化、工程导入、设置目标配置文件、选择仿真器和芯片型号、添加文件|库路径、编译下载等操作&#xff09; 文章目录 DSP开发软件css(10)使用基础(汉化、工程导入、设置目标配置文件、选择仿真器和芯片型号、添加文件|库路径、编译下载等操作&#…

中医-十二经-图

&#x1f33c;十二经-图 &#x1f354;十二经&#x1f36d;任脉、督脉&#x1f957;冲脉、带脉&#x1f96a;阴维、阳维&#x1f368;资源下载 &#x1f354;十二经 &#x1f36d;任脉、督脉 &#x1f957;冲脉、带脉 &#x1f96a;阴维、阳维 &#x1f368;资源下载 如果需要…

SESSION,TOKEN和Postman的使用

SESSION&#xff1a;它是存储在服务端的 1、客户端输入账户和密码&#xff0c;登录成功&#xff0c;在服务端生成一个SESSIONID同时存储在服务端&#xff08;DB or Redis&#xff09; 2、服务端把生成的SESSIONID通过响应头中的Set-Cookie返回给客户端 3、再系统下个请求中&…

机器视觉运动控制快组态软件RTFuse在XYZ三轴运动平台的应用方案

一、RTFuse市场应用背景 面对工业自动化领域对视觉运动控制低代码、低门槛的市场应用需求日益增加&#xff0c;正运动特此推荐一款RTFuse快组态软件&#xff0c;以满足这一需求&#xff0c;使机器视觉运动控制项目开发变得更加简单易用。 RTFuse快组态软件&#xff0c;内置的…

GnuWin32,Windows下使用Linux命令

1. 前言 昨天我写了一篇 UnxUtils工具包&#xff0c;Windows下使用Linux命令 的文章&#xff0c;今天无意间又发现了 GnuWin32 &#xff0c;它提供Win32版本的GNU工具&#xff08;Linux下的命令基本都有&#xff09;。 你可以在 GnuWin32 Files 手动下载你想要的命令安装包。 …

centos7 访问windows系统的共享文件夹

window系统上共享文件夹 选择共享文件夹&#xff0c;点击属性 点击共享 选择用户&#xff0c;点击共享 centos系统挂载共享文件夹 创建挂载目的文件夹 mkdir -p /mnt/smb 挂载命令 mount -t cifs -o usernamezenglg,password*** //192.168.1.10/ftp /mnt/smb/其中&#xff…

新星计划打卡学习:VUE3组合式API

目录 1、vue3组件页面的构成 2、setup选项 3、reactive 4、ref 最后 1、vue3组件页面的构成 从上到下依次是 逻辑、结构、样式 2、setup选项 经过语法糖的封装更简单的使用组合式api <script setup> // 经过语法糖的封装更简单的使用组合式api const message t…

SpringCloudAlibaba微服务实战系列(三)Sentinel1.8.0+流控

SpringCloudAlibaba–Sentinel Sentinel被称为分布式系统的流量防卫兵&#xff0c;是阿里开源流量框架&#xff0c;从服务限流、降级、熔断等多个纬度保护服务。Sentinel同时提供了简洁易用的控制台&#xff0c;可以看到接入应用的秒级数据&#xff0c;并可以在控制台设置一些…

Cookie 和 Session 区别——2023最新面试精简版本

Cookie 和 Session 的区别 原理&#xff1a;从”登录“过程看Jwt和Token&#xff0c;以及区分Cookie和Session概念 面试&#xff1a; 好的&#xff0c;面试官。 我先解释一下 Cookie&#xff0c;它是客户端浏览器用来保存服务端数据的一种机制。 当通过浏览器进行网页访问的时…

Redis原理篇(一)

一、原理篇-Redis数据结构 1.1 Redis数据结构-动态字符串 我们都知道Redis中保存的Key是字符串&#xff0c;value往往是字符串或者字符串的集合。可见字符串是Redis中最常用的一种数据结构。 Redis虽由C语言开发&#xff0c;不过Redis没有直接使用C语言中的字符串&#xff0…

vulnhub靶机Thales:1

Thales:1 靶机地址&#xff1a;Thales: 1 ~ VulnHub 主机发现 arp-scan -l 扫描端口 nmap --min-rate 10000 -p- 192.168.21.135 nmap -sV -sT -O -p22,8080 192.168.21.135 简单的漏洞的扫描 nmap --scriptvuln -p22,8080 192.168.21.135 答题思路就是从8080端口拿到账号密…

MS VC 2022开发Linux应用记录之01篇

安装MSVS2022的时候勾上对开发Linux C程序的选项在Windows中安装Oracle Virtual Box程序&#xff0c;在里面安装Ubuntu最新稳定版,要选择多个CPU核在VirtualBox中添加一个网卡,选择Host Only在虚拟机中使用ifconfig命令&#xff0c;在宿主机中使用ipconfig, 可以看到两者存在同…

有限状态自动机

1 什么是有限状态自动机 1.1什么是计算 维基百科定义&#xff1a;计算&#xff08;英语&#xff1a;Calculation&#xff09;是一种将“单一或多个的输入值”转换为“单一或多个的结果”的一种思考过程。可以简单理解为给出一个问题得到一个答案的过程。如下图所示日常生活比…

AITO问界,先经沧海而后造船

IT领域最重要的原则之一&#xff0c;就是软件快速迭代。 对于科技产品来说&#xff0c;需求永远在升级。一项技术或软件系统问世之后&#xff0c;如果后续不再迭代&#xff0c;结果可能是灾难性的。 比如几年前&#xff0c;很多读者可能都买过一些“不了了之”的智能消费硬件&a…

性能测试Ⅳ

在进行性能测试的时候需要使用不同阶段的数据来测试&#xff0c;分析不同数据下资源的情况。 java -jar -Xms1M -Xmx1M -XX:MaxMetaspaceSize10m DBPlus-0.0.1-SNAPSHOT.jar 最小内存 最大内存 如果内存太小会导致内存泄露 启动程序 java -Djava.rmi.serv…

JavaWeb课程设计项目实战(09)——项目编码实践6

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 在本节教程中&#xff0c;我们实现修改学生的功能。当在学生列表页面点击修改后首先将依据id查询该生的详细信息&#xff0c;然后将这些信息展示在修改页面。当完成学生信息…

Transformer Encoder (Bert)

参考&#xff1a;图解Self-Attention_子燕若水的博客-CSDN博客 举个例子&#xff1a; 假设输入数据形状为(243,34),表示的是243帧,每帧包含34个特征(比如17个关键点的x,y坐标)。那么这个数据在Transformer Encoder中的流动过程如下: 输入数据shape是(243, 34),表示243个时间…

【字符流】案例:点名器

案例&#xff1a;点名器 1.需求&#xff1a; 我有一个文件里面存储了班级同学的姓名&#xff0c;每一个姓名占一行&#xff0c;要求通过程序实现随机点名器 2.思路&#xff1a; 创建字符缓冲输入流对象创建ArrayList集合对象调用字符缓冲输入流对象的方法读数据把读取到的字…