FSCTF2023-Reverse方向题解WP。学习贴

news2024/9/24 1:25:27

文章目录

  • [FSCTF 2023]signin
  • [FSCTF 2023]MINE SWEEPER
  • [FSCTF 2023]Xor
  • [FSCTF 2023]EZRC4
  • [FSCTF 2023]ez_pycxor
  • [FSCTF 2023]Tea_apk
  • [FSCTF 2023]ezcode
  • [FSCTF 2023]ezbroke
  • [FSCTF 2023]rrrrust!!!
  • [FSCTF2023]ezrev(未解决)

[FSCTF 2023]signin

在这里插入图片描述

UPX壳,用upx -d 文件名脱壳

在这里插入图片描述

在这里插入图片描述

简单的替换,得到flag。


[FSCTF 2023]MINE SWEEPER

在这里插入图片描述

在这里插入图片描述

IDA打开得到flag。


[FSCTF 2023]Xor

在这里插入图片描述

在这里插入图片描述

与0x12依次异或,

EXP:

enc = b't~suiFz{aM{aMsMwsakM`wdw`awo'
flag = []
for i in range(len(enc)):
    flag.append(chr(enc[i]^0x12))
print(''.join(flag))

# flag{This_is_a_easy_reverse}

[FSCTF 2023]EZRC4

在这里插入图片描述

在这里插入图片描述

ezrc4,key和密文已给出,看rc4_crypt

在这里插入图片描述

没要魔改,init里面是俩个S盒,直接用脚本解密。

EXP:

def rc4_decrypt(ciphertext, key):
    # 初始化 S-box
    S = list(range(256))
    j = 0
    for i in range(256):
        j = (j + S[i] + key[i % len(key)]) % 256
        S[i], S[j] = S[j], S[i]

    # 初始化变量
    i = j = 0
    plaintext = []
    # 解密过程
    for byte in ciphertext:
        i = (i + 1) % 256
        j = (j + S[i]) % 256
        S[i], S[j] = S[j], S[i]
        k = S[(S[i] + S[j]) % 256]
        plaintext.append(byte ^ k)

    return bytes(plaintext)


# 示例用法
encrypted_data = [0xEB,0xD,0x61,0x29,0xBF,0x9B,5,0x22,0xF3,0x32,0x28,0x97,0xE3,0x86,0x4D,0x2D,0x5A,0x2A,0xA3,0x55,0xAA,0xD5,0xB4,0x6C,0x8B,0x51,0xB1]  # 替换成你的密文
encryption_key = b'wanyuanshenwande'  # 替换成你的密钥

decrypted_data = rc4_decrypt(encrypted_data, encryption_key)
print("Decrypted Data:", decrypted_data.decode('utf-8'))

# Decrypted Data: flag{I_L0VE_gensh1n_Imp4ct}

[FSCTF 2023]ez_pycxor

pyc文件,找个在线网站反编译一下,

源代码:

#!/usr/bin/env python
# visit https://tool.lu/pyc/ for more information
# Version: Python 3.10

flag = input('plz input your flag:')
encoded_flag = []
key = 'FUTURESTARS'
ciphertxt = [
    168,
    169,
    185,
    170,
    160,
    157,
    197,
    132,
    226,
    134,
    134,
    145,
    255,
    242,
    130,
    139,
    234,
    140,
    180,
    229,
    179,
    246,
    243,
    181,
    183,
    182,
    249,
    163,
    254,
    189,
    246,
    166]
for i in range(len(flag)):
    encoded_flag.append((ord(flag[i]) ^ 168) + i)
for i in range(len(encoded_flag)):
    if i % 2 == 0:
        encoded_flag[i] ^= ord(key[i % 11])
    if i % 2 == 1:
        encoded_flag[i] ^= ord(key[i % 11])
if encoded_flag == ciphertxt:
    print('OK! You have crack it!')
    return None

简单的加密,逆向一下,就是根据索引奇偶执行异或先执行和key的循环异或,再减去i异或168、

EXP:

key = 'FUTURESTARS'
ciphertxt = [168, 169, 185, 170, 160, 157, 197, 132, 226, 134, 134, 145, 255, 242, 130, 139, 234, 140, 180, 229, 179,
             246, 243, 181, 183, 182, 249, 163, 254, 189, 246, 166]
flag = []
for i in range(len(ciphertxt)):
    flag.append(ciphertxt[i] ^ ord(key[i % 11]))
for i in range(len(ciphertxt)):
    flag[i] = chr((flag[i] - i) ^ 168)
print("".join(flag))

# FSCTF{8a3ccd61ab7ff9e87acb9c9d1}

[FSCTF 2023]Tea_apk

apk文件,用jadx打开,

在这里插入图片描述

看MainActivity,

在这里插入图片描述

在这里插入图片描述

上面是XXTEA的加密过程,这里直接用在线网站解密就好。

在这里插入图片描述


[FSCTF 2023]ezcode

在这里插入图片描述

一个py bytecode的题目,之前写过一篇bytecode反编译的博客。不太会的可以去看看。

在这里插入图片描述

这里就是四个函数,func1 func2 func3 还有 encode,

在这里插入图片描述

这里就是main函数,可以看到一个k,input是 m 对输入和k进行一个func1的操作,然后对得到的密文c做一个encode的操作,之后进行比较。

在这里插入图片描述

func1 函数,题做多点就敏感了,这里就是rc4了。func2创造S盒,func3 加密处理。

在这里插入图片描述

值得注意的是func3,RC4的加密过程魔改了一部分,

在这里插入图片描述

多了一个key,

在这里插入图片描述

encode部分就是一个改了码表的base64编码

在这里插入图片描述

所以逆向一下,先对密文进行base64解码,然后RC4解密,

在这里插入图片描述

记得转换为整数。

string = "=.#MØQïò\ntÂЭv|·"
numeric_list = [ord(char) for char in string]
print(numeric_list)

# [61, 46, 35, 77, 216, 81, 239, 157, 242, 10, 116, 194, 208, 173, 118, 124, 183]

最后进行RC4解密。EXP:

def rc4_decrypt(ciphertext, key):
    # 初始化 S-box
    S = list(range(256))
    j = 0
    for i in range(256):
        j = (j + S[i] + key[i % len(key)]) % 256
        S[i], S[j] = S[j], S[i]

    # 初始化变量
    i = j = 0
    plaintext = []
    y = 'FSCTF'
    # 解密过程
    for byte in ciphertext:
        i = (i + 1) % 256
        j = (j + S[i]) % 256
        S[i], S[j] = S[j], S[i]
        k = S[(S[i] + S[j]) % 256]
        plaintext.append(byte ^ k ^ ord(y[i % 5]))

    return bytes(plaintext)


# 示例用法
encrypted_data = [61, 46, 7, 35, 77, 216, 81, 239, 157, 242, 12, 116, 194, 208, 173, 118, 124, 183]  # 替换成你的密文
encryption_key = b'XFFTnT'  # 替换成你的密钥

decrypted_data = rc4_decrypt(encrypted_data, encryption_key)
print("Decrypted Data:", decrypted_data.decode('utf-8'))

# Decrypted Data: FSCTF{G00d_j0b!!!}

[FSCTF 2023]ezbroke

在这里插入图片描述

用WinHex查看一下。

在这里插入图片描述

PE文件头和偏移都错了。修改完保存再次用expinfope查看,发现UPX壳,但是脱壳失败了。

原来UPX标识也被魔改了。

在这里插入图片描述

这之后就可以了。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

一个VM虚拟机的题目,

在这里插入图片描述

code里面是操作码opcode,下面是三个指令操作,这里都给出了名字,不用自己辨别了。

在这里插入图片描述

可以看到其实只有一个0x17的操作。

在这里插入图片描述

还有一个check,enc_flag里面是密文。

在这里插入图片描述

大致模拟一下出来的指令,可以知道是逐个字节异或。

直接写EXP:

enc = [0x51, 0x44, 0x54, 0x43, 0x51, 0x6C, 0x4E, 0x27, 0x62, 0x37,
  0x64, 0x62, 0x74, 0x74, 0x72, 0x64, 0x64, 0x71, 0x62, 0x26,
  0x26, 0x6E, 0x37, 0x75, 0x65, 0x27, 0x7C, 0x24, 0x37, 0x7A,
  0x6E, 0x37, 0x67, 0x65, 0x27, 0x63, 0x24, 0x74, 0x63, 0x26,
  0x27, 0x79, 0x36, 0x36, 0x36, 0x6A, 0x00]
flag = []
for i in range(len(enc)):
    flag.append(chr(enc[i] ^ 0x17))
print("".join(flag))

# FSCTF{Y0u successfu11y br0k3 my pr0t3ct10n!!!}

[FSCTF 2023]rrrrust!!!

在这里插入图片描述

在这里插入图片描述

明显的密文,

在这里插入图片描述

往下看可以看到比较的地方,

在这里插入图片描述

al寄存器里面存放的就是 经过加密后的数据,

这里直接用动态调试,输入32个1,观察每次加密后的结果。

动态调试的方法就是将jnz修改成jz,这样才可以看到每次加密的数据。

可以发现是循环异或,和XFFTnT,写个EXP

enc = [0x3E, 0x2A, 0x27, 0x33, 0x15, 0x03, 0x3D, 0x77, 0x25, 0x64,
  0x03, 0x67, 0x07, 0x32, 0x76, 0x0B, 0x1C, 0x21, 0x2B, 0x32,
  0x19, 0x23, 0x5E, 0x26, 0x69, 0x22, 0x3B]
key = 'XFFTnT'
flag = []
for i in range(len(enc)):
    flag.append(chr(enc[i] ^ ord(key[i%6])))
print(''.join(flag))

# flag{We1c0m3_t0_rust_w0r1d}

[FSCTF2023]ezrev(未解决)

这一题暂时没有解出flag。

大致的思路是,main函数传入了四个大整数,

func1 函数将其转化为字符串,func2函数是base64编码,func3做了一点减法运算。

我也不太清楚我自己哪里有点问题,解出来的flag特别奇怪。暂时先放一下了。o(╥﹏╥)o还要准备考试了。

什么时候解出来再更了,而且这题没有官方wpo(╥﹏╥)o。

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

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

相关文章

arcgis中投影文件(.prj)和地理转换文件(.gtf)存储路径

1、投影文件(自定义的.prj)的存储路径 C:\Users\14635\AppData\Roaming\ESRI\Desktop10.5\ArcMap\Coordinate Systems 2、地理转换文件(.gtf)--自定义 C:\Users\14635\AppData\Roaming\ESRI\Desktop10.5\ArcToolbox\CustomTransfo…

ROS2串口通讯serial库(适用于humble版本)

要的串口操作的API介绍在这里:serial: serial::Serial Class Reference (wjwwood.io) 但是我们不是直接利用上面这个东西,而是使用的是根据这个改写的一个针对ros2的一个serial库,这个serial库是根据上面这个库改写来的,ros2的库在…

分布式系统的认证授权

一.分布式系统的认证授权大致架构 以云音乐系统为例: 注:一般情况下,我们会把认证的部分的接口提取为一个单独的认证服务模块中。 二.单点登录(Single Sign On) 单点登录,Single Sign On,简称…

140.【鸿蒙OS开发-01】

鸿蒙开发 (一)、初识鸿蒙1.初识鸿蒙(1).移动通讯技术的发展(2).完整的鸿蒙开发 (二)、鸿蒙系统介绍1.鸿蒙系统的官方定义(1).鸿蒙操作系统概述(2).鸿蒙的生态 2.鸿蒙系统的特点3.鸿蒙和安卓的对比4.鸿蒙开发的发展前景 (三)、鸿蒙开发准备工作1.鸿蒙OS的完整开发流程2.注册并实…

Win10系统无法登录Xbox live的四种解决方法

在Win10系统中,用户可以登录Xbox live平台,畅玩自己喜欢的游戏。但是,有用户却遇到了无法登录Xbox live的问题。接下来小编给大家详细介绍四种简单的解决方法,解决后用户在Win10电脑上就能成功登录上Xbox live平台。 Win10系统无法…

MySql 计算同比、环比

一、理论 国家统计局同比、环比计算公式 增长速度是反映经济社会某一领域发展变化情况的重要数据,而同比和环比是反映增长速度最基础、最核心的数据指标,也是国际上通用的指标。在统计中, 同比和环比通常是同比变化率和环比变化率的简称&…

二百零四、Flume——登录监听窗口报错Ncat: bind to :::44444: Address already in use. QUITTING.

一、目的 Flume安装好后测试开启监听窗口44444,结果报错Ncat: bind to :::44444: Address already in use. QUITTING. 二、报错详情 Ncat: bind to :::44444: Address already in use. QUITTING. 三、报错原因 经过分析发现,44444窗口已经被占用 […

sqli-labs(3)

11. 看到登录框直接or 11 在hackerabar中我们可以看到这里是post传递的数据,在get中用--来注释后面的内容 因为get中#是用来指导浏览器动作的,--代表注释是空格,所以这里用# 之后就和get的一样了 1 order by 2 # order by 3报错 联合注入 …

【5k字长文 | Vue学习笔记】#1 认识Vue对象和基础语法

Vue是一个非常流行的渐进式JavaScript框架,渐进式指的是自底向上,从小组件逐渐向上构成整个项目,渐进式还可以理解为:用什么就拿什么,每个组件只做自己的事,尽可能解耦合。 本节我们将学习简单的Vue实例&a…

渗透测试高级技巧(一):分析验签与前端加密

“开局一个登录框” 在黑盒的安全测试的工作开始的时候,打开网站一般来说可能仅仅是一个登录框;很多时候这种系统往往都是自研或者一些业务公司专门研发。最基础的情况下,我们会尝试使用 SQL 注入绕过或者爆破之类的常规手段,如果…

【文末送书】十大排序算法C++代码实现

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术。关…

数独·12中解法·anroid 数独小游戏·休闲益智小游戏

标题数独12中解法anroid 数独小游戏休闲益智小游戏(继续更新中……) 一款经典数独训练app 资源下载 (0积分)https://download.csdn.net/download/qq_38355313/88544810 —— —— 数独(sh d)是源自18世纪…

Find My音箱|苹果Find My技术与音箱结合,智能防丢,全球定位

音箱市场规模正在不断扩大。随着人们生活品质的提高,对音乐体验的需求也在不断升级。消费者对于蓝牙音箱的需求,已经从单纯的音质扩展到了功能、设计和价格等多个方面。随着移动化、即时化的视听娱乐需求的增长,蓝牙音箱性能、质量、外观设计…

定时器的使用

目录 前言 正文 1.方法 schedule(TimerTask task, Date time) 的测试 (1)执行任务的时间晚于当前时间(在未来执行)的效果 (2)线程TimerThread不销毁的原因 (3)使用 public void cancel() 方法实现 T…

Java 下载地址

1 地址: Java Downloads | Oracle 2 往下翻(Java 8 和 Java 11) 3 往下翻 (JRE 下载)(JRE 8 为例) 4 跳转到登录(登录账号才可以下载)

Flink Operator 使用指南 之 Flink Operator安装

介绍 Flink Kubernetes Operator 充当控制平面来管理 Apache Flink 应用程序的完整部署生命周期。尽管 Flink 的Native Kubernetes 集成已经允许用户在运行的 Kubernetes(k8s) 集群上直接部署 Flink 应用程序,但自定义资源和Operator Pattern 也已成为 Kubernetes 原生部署体…

跑步耳机哪个牌子好?这五款跑步耳机闭眼入也不会错!

作为一个经常跑步运动的人,总感觉运动能够让人暂时远离城市的喧嚣,同时运动也是一种特别好的舒压方法。但跑步的时候如果没有音乐助燃,那是没有灵魂的,这也许就是现代年轻人的矫情吧,我在运动的时候经常会佩戴骨传导耳…

渗透测试高级技巧(二):对抗前端动态密钥与非对称加密防护

在前文的技术分享中,我们描述了验签和静态对称加密(静态密钥 AES)的常见场景,大家我相信遇到类似的加解密清醒,基本都可以通过热加载的基本使用获得破解前端加密解密的方法,达到一个比较好的测试状态。 在…

无法创建 8192 MB 的匿名分页文件: 系统资源不足,无法完成请求的服务。

好久没用VMware Workstation,今天突然要用,发现所有的虚机在启动的时候提示都提示: 无法创建 XXXX MB 的匿名分页文件:页面文件太小,无法完成操作。 未能分配主内存。 模块"MainMem"启动失败。 未能启动…

[计算机网络实验]头歌 实验二 以太网帧、IP报文分析

目录 第1关:Wireshark基本使用入门 【实验目的】 【实验环境】 【本地主机、平台虚拟机之间数据传递】 wireshark基本用法】 1、wireshark主界面 2、抓取分组操作 3、Wireshark窗口功能 4、筛选分组操作 【实验操作】 ​编辑 第2关:Ethernet帧…