[HNCTF] maybe_xor题解

news/2024/9/22 23:23:00

maybe_xor

感觉这道逆向题与其说是考逆向水平,倒不如说是考编写脚本的能力

首先题目给了个远程地址,nc连接会回显ELF: 接一串base64编码的东东,解码后发现是ELF文件。

用IDA打开发现是从数据段读取24个字节到栈上并进行异或,每个字节异或的值都不同,但异或后的结果不会写回栈

程序的目的是让你算出异或后的字节数组并发送过去,并且这个过程会重复多次

调试可知,虽然每次文件的数据不同,程序入口不同,但汇编代码都差不多。只是每次数据段的偏移和异或值有变化罢了,写一个文件处理脚本即可

具体思路看下面脚本注释即可

from base64 import *
from pwn import *
import struct
# context.log_level = 'debug'image_base = 0x8048000
def get_hex():f = open('elf', 'rb') f.seek(0x18)# 获取程序入口地址并转为文件偏移地址EP = u64(f.read(8)) - image_base# 获取数据的偏移地址f.seek(EP + 7)rsi = struct.unpack("<i", f.read(4))[0] + EP + 11# 读取数据f.seek(rsi)data = f.read(24)# 读取机器码f.seek(EP + 4)opcode = f.read(0x100)i = 0key = bytearray()result = bytearray()# 导出异或数组keywhile i < 0xff:# 判断是不是真的xor指令if opcode[i] == 0x34 and opcode[i+2] == 0x48:key.append(opcode[i+1])i = i + 2continue# 如果到达exit指令则退出if(opcode[i] == 0xf) and (opcode[i+1] == 0x5):breaki = i + 1# 获得结果for i in range(24):result.append((data[i] ^ key[i]) & 0xff)f.close()return bytes(result).hex()# 获取ELF文件
def get_elf():f = open("./elf","wb")base = b64decode(io.recvline()[0:-1])f.write(base)f.close()# 第一次结果程序已给出,将它给的结果发送即可
io = remote("hnctf.imxbt.cn", 37580)
io.recvuntil("Expected bytes: ")
io.send(io.recvline())# 循环处理
try:while(io.recvuntil("ELF:  ",timeout=3)):get_elf()io.sendline(get_hex().encode('utf-8'))
except(PwnlibException, EOFError):io.interactive()

结果:

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

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

相关文章

Springboot+React实现Minio文件分片上传、断点续传

前言 本文采用前后端结合,后端给前端每个分片的上传临时凭证,前端请求临时url,通过后端间接的去上传分片。其实无关乎 vue 或者 react,思路都是一样的,逻辑也全都是 js 写的,跟模板语法或者 jsx 也没关系,仅仅是赋值不一样而已。 前端:React + TypeScript + Antd + axi…

P6577 【模板】二分图最大权完美匹配 (KM)

$\quad $ 初看就发现不对劲了,模板紫题,一看就不简单,就交了个裸\(KM\),哎,果然\(T\)了。$\quad $ 然后就是大力卡常(当然\(O(n^4)\))的复杂度不是卡常能解决的。遂看题解,发现一个据说\(O(n^3)\)的复杂度的\(KM\),也是非常抽象。 具体解释详见 https://www.luogu.com…

传说中的运维门户设计

在IT服务管理这片广阔天地中,运维门户如同一位技艺高超的魔术师,轻轻一挥手,便将纷繁复杂的运维世界化繁为简,编织成一张便捷高效、触手可及的网络。它不仅是ITSM系统中不可或缺的一环,更是连接用户与技术世界的桥梁,让服务触达变得像呼吸一样自然。 运维门户,这个听起来…

中电金信:专题报告商业银行对公数字化转型体系架构及实践拆解

当今,数字化转型已然成为商业银行发展的关键动力,在这个数字时代,对公业务数字化转型更是势在必行。基于此,中电金信发布《商业银行对公数字化转型专题报告》(简称《报告》),针对对公数字化转型进行了专题研究。报告对主要商业银行对公数字化转型进行了深入的业务调研和…

「网络流浅谈」最大流的应用

讲解了最大流的多种模型,从二分图匹配到拆点技巧,带你参观最大流的神秘。二分图匹配 考虑如何将二分图匹配问题,转化为流网络。设置 \(1\) 个汇点和源点,从源点向二分图一侧的每一个点连边,从另一侧向汇点连边,边权均为 \(1\),二分图中的边也全部加入,权值设为 \(1\)。…

单元测试

实验项目名称:实验四 单元测试2一、 实验目的 1、 掌握单元测试技术,并按单元测试的要求设计测试用例。  2、 掌握一种单元测试工具的使用。 二、 实验内容 自行学习C#或python或C++的其中一种单元测试工具的使用,自选一段单元代码(不少于15行),进行测试。完成实验报告…

同一个函数/不同函数的接口关联

第一种:在同一个方法中接口关联,可以直接提取后引用第二种:在不同方法中,声明全局变量,提取后引用第三种:通过在conftest.py文件中定义一个夹具,在测试用例函数中使用这个夹具 # 定义一个登录成功后获取token的夹具 @pytest.fixture(scope="session") def log…

windows 安装Nginx服务

一、版本说明Nginx版本:1.26.0 二、下载Nginx下载地址:https://nginx.org/en/download.html选择一个版本,这里选择最新稳定版本下载后解压到一个目录,注意解压目录最好不要有中文、空格因为电脑只有一个C盘所以地址在C盘,可以选择自己习惯的安装位置 三、下载winsw下载地…