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

文章目录

  • [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。

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

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

相关文章

Fiddler模拟弱网环境

1.设置弱网:Rules-》Customize Rules 上传速度:1KB/300ms1KB/0.3s3.33KB/s 下载速度:1KB/150ms1KB/0.15s6.67KB/s 2.启动弱网:Rules-》Performance-》Simulate Modem Speeds 开启后,此项为勾选状态 3.验证弱网生效…

Activiti7工作流引擎:生成实时的流程图片

实时获取当前流程对应的流程图片,并对当前正在审批的节点进行高亮显示。 public class ActivitiController {Autowiredprivate ProcessEngine processEngine;Autowiredprivate RepositoryService repositoryService;Autowiredprivate RuntimeService runtimeService…

处理无线debug问题

无限debug的产生 条件说明 开发者工具是打开状态 js代码中有debugger js有定时处理 setInterval(() > {(function (a) {return (function (a) {return (Function(Function(arguments[0]" a ")()))})(a)})(bugger)(de, 0, 0, (0, 0)); }, 1000); ​ #这里就…

全国市政公用事业和邮政、电信业发展数据,shp/excel格式

随着城市化进程的加速和人们对城市生活品质要求的提高,市政公用事业和邮政、电信业发展越来越受到关注。 今天我们来分享全国市政公用事业和邮政、电信业发展数据,为读者呈现一个更加全面的行业发展图景。 首先了解下数据的基本信息,格式为s…

Moonbeam Network已上线原生USDC稳定币

原生USDC已经通过XCM从波卡来到了Moonbeam,该如何利用?此次集成通过把热门的Circle稳定币带来波卡生态,连接了区块链世界与传统金融。现在,用户和开发者可以在Moonbeam网络中踏寻USDC的强大之处。 Moonbeam生态中的Moonwell、FiD…

javaScript 内存管理

1 js 内存机制 内存空间:栈内存(stack)、堆内存(heap) 栈内存:所有原始数据类型都存储在栈内存中,如果删除一个栈原始数据,遵循先进后出;如下图:a 最先进栈&…

DeepWalk: Online Learning of Social Representations(2014 ACM SIGKDD)

DeepWalk: Online Learning of Social Representations----《DeepWalk:用于图节点嵌入的在线机器学习算法》 DeepWalk 是将 word2vector 用到 GNN 上 DeepWalk: 将 Graph 的每个节点编码为一个 D 维向量(无监督学习),E…

linux之 服务器ping百度能通,ping其他网址不通

表症问题 linux上ping域名解析出来的ip地址不正确 linux服务器ping百度能通,ping其他网址不通 linux上ping域名解析出来的ip地址不正确 ping 百度可以,说明dns解析是没问题的 但是,ping 其他网址不通,说明是 请求的其他网址的问…

Talk | PSU助理教授吴清云:AutoGen-用多智能体对话开启下一代大型语言模型应用

本期为TechBeat人工智能社区第548期线上Talk! 北京时间11月21日(周二)20:00,宾夕法尼亚州立大学助理教授—吴清云的Talk已准时在TechBeat人工智能社区开播! 她与大家分享的主题是: “ AutoGen:用多智能体对话开启下一代大型语言模…

根据商品ID获取虾皮数据接口|虾皮商品详情接口|虾皮关键词搜索商品列表接口|虾皮到手价接口|虾皮API接口

虾皮商品详情是指虾皮平台上商品的具体信息,包括但不限于商品名称、描述、价格、图片、评论等。要获取虾皮商品详情,您需要先登录虾皮网站或APP,然后浏览商品页面或搜索商品,找到您感兴趣的商品后,可以查看该商品的详情…

人工智能对我们的生活影响

目录 前言 一、人工智能的领域 二、人工智能的应用 三、对人工智能的看法 总结 🌈嗨!我是Filotimo__🌈。很高兴与大家相识,希望我的博客能对你有所帮助。 💡本文由Filotimo__✍️原创,首发于CSDN&#x1f4…

使用 API 管理平台的 5 大理由

组织需要治理和控制API生态系统,这种治理就是API管理的作用。 Uber 使用 API​​(应用程序编程接口)与 Google Maps 和 Twilio 等第三方服务连接,这有助于改善用户体验; Salesforce 提供 API,允许开发人员…

虚函数可不可以重载为内联 —— 在开启最大优化时gcc、clang和msvc的表现

下面是对该问题的一种常见回答: 首先,内联是程序员对编译器的一种建议,因此可以在在重载虚函数时在声明处加上inline关键字来修饰, 但是因为虚函数在运行时通过虚函数表,而内联函数在编译时进行代码嵌入,因…

创作一款表情包生成微信小程序:功能详解与用户体验优化

一、引言 在当今社交媒体充斥着各种趣味表情包的时代,表情包生成工具成为许多用户创作和分享创意的热门选择。为了迎合这一趋势,我设计并开发了一款功能丰富、用户友好的微信小程序,旨在让用户能够轻松而有趣地创作个性化的表情包。这篇博客将…

南京数字孪生赋能工业制造,加速推进制造业数字化转型

随着南京信息技术的迅猛发展和工业管理的不断演进,传统的工业管理方式已经无法满足企业对高效、智能和可持续发展的需求。针对这一情况,数字孪生技术应运而生,为南京工业管理带来了全新的变革和机遇。以数字孪生为理念,三维可视化…

大模型创业“风投”正劲,AGI Foundathon 大模型创业松活动精彩看点

这是一场万众瞩目的大模型领域盛会。当来自世界各地的顶尖大模型开发者、创业者、投资人汇聚一堂,他们对大模型应用层的思考碰撞出了哪些火花?应运而生了哪些令人眼前一亮的AI-Native产品? 让我们一起来回顾吧~

C#核心笔记——(二)C#语言基础

一、C#程序 1.1 基础程序 using System; //引入命名空间namespace CsharpTest //将以下类定义在CsharpTest命名空间中 {internal class TestProgram //定义TestProgram类{public void Test() { }//定义Test方法} }方法是C#中的诸多种类的函数之一。另一种函数*,还…

算法-二叉树-简单-二叉树的直径、将有序数组转换成二叉搜索树

记录一下算法题的学习9 二叉树的直径 题目:给你一棵二叉树的根节点,返回该树的 直径 。 二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。两节点之间路径的 长度 由它们之间边数表示 读完题目&…

如何打造适用的MES管理系统解决方案

在当前的制造业领域,项目型生产企业面临着独特的挑战。尽管国外的大型软件公司提供了某些解决方案,但由于地域、文化和制度的差异,这些方案并不完全满足企业的实际需求。为了解决这一难题,我们必须以客户为中心,围绕他…

机器学习中的特征选择:方法和 Python 示例

布拉加德什桑达拉拉詹 一、说明 特征选择是机器学习流程中至关重要且经常被低估的步骤。它涉及从数据集中的原始特征集中选择最相关的特征(输入变量或属性)的子集。特征选择的重要性怎么强调都不为过,因为它直接影响机器学习模型的质量、效率…