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-boxS = list(range(256))j = 0for i in range(256):j = (j + S[i] + key[i % len(key)]) % 256S[i], S[j] = S[j], S[i]# 初始化变量i = j = 0plaintext = []# 解密过程for byte in ciphertext:i = (i + 1) % 256j = (j + S[i]) % 256S[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.10flag = 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-boxS = list(range(256))j = 0for i in range(256):j = (j + S[i] + key[i % len(key)]) % 256S[i], S[j] = S[j], S[i]# 初始化变量i = j = 0plaintext = []y = 'FSCTF'# 解密过程for byte in ciphertext:i = (i + 1) % 256j = (j + S[i]) % 256S[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.mzph.cn/news/162857.shtml

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

相关文章

redis-cluster集群模式

Redis-cluster集群 1 Redis3.0引入的分布式存储方案 2集群由多个node节点组成,redis数据分布在节点之中,在集群之中分为主节点和从节点3集群模式当中,主从一一对应,数据写入和读取与主从模式一样,主负责写,从只能读4集群模式自带哨兵模式,可…

自然资源土地管理法律法规知识竞赛这么办才高端

近些年,全国各地自然资源厅举办了土地管理法律法规知识竞赛,从我公司承办的这些赛事来看,传统的必答题、抢答题、风险题的方式已无法激起现场比赛气氛,需要更加复杂有趣的环节设置及高端竞赛软件及其配套设备加持才可以让知识竞赛…

Eigen::Matrix 转 std::vector 亲测ok!

std::vector<double> data;for (int kk 0; kk < 24; kk) {data.push_back(kk);}int n 24 / 3;typedef Eigen::Matrix<double, 3, Eigen::Dynamic> MatrixXd;//vector 转 matrixEigen::Map<Eigen::MatrixXd> result(data.data(), 3, n);//matrix 转 vect…

什么是交易量价差分析法?anzo Capital一分钟讲明白

交易量价差分析法是一种深入的市场分析方法&#xff0c;它主要探讨了价格、价差和交易量之间的相互关系。在此过程中&#xff0c;交易量主要揭示了市场上的交易活动情况&#xff0c;而价差则反映了这些交易的价格变动。 为了更准确地理解这种关系&#xff0c;定义了交易量价差…

21. Spring扩展点之推断构造方法

简介 spring自己本身有推断构造方法的逻辑&#xff0c;但同时也提供了扩展&#xff0c;SmartInstantiationAwareBeanPostProcessor#determineCandidateConstructors&#xff0c;实现该方法就可以自己定制获取哪个构造器的逻辑&#xff0c;该扩展点spring有一个默认的实现Autow…

单元测试-java.lang.NullPointerException

报错信息 java.lang.NullPointerException 空指针异常 空对象引用 来源 对Controller层进行单元测试&#xff0c;解决完Spring上下文报错后继续报错。 解决 在测试方法执行前要为字段完成对象的注入&#xff0c;否则就报空指针异常。 测试例子 public class SysUserContr…

前端css粘性布局,顶部吸附效果(position: sticky)

sticky属性设置 /* 设置粘性布局 */ position: sticky; /* 拖动滚动条&#xff0c;当前元素超出文档0的位置时&#xff0c;触发定位效果&#xff08;同级元素位置不会受影响&#xff09; */ top: 0;页面初始效果 设置前&#xff08;滚动页面时&#xff0c;标签栏随页面滚动&a…

【深度学习】六大聚类算法快速了解

在机器学习中&#xff0c;无监督学习一直是我们追求的方向&#xff0c;而其中的聚类算法更是发现隐藏数据结构与知识的有效手段。目前如谷歌新闻等很多应用都将聚类算法作为主要的实现手段&#xff0c;它们能利用大量的未标注数据构建强大的主题聚类。本文从最基础的 K 均值聚类…

【二叉树进阶题目】236. 二叉树的最近公共祖先,JZ36 二叉搜索树与双向链表

二叉树进阶题目 236. 二叉树的最近公共祖先解题思路及实现思路一思路二 JZ36 二叉搜索树与双向链表描述解题思路及实现 236. 二叉树的最近公共祖先 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个…

Axios 拦截器 请求拦截器 响应拦截器

请求拦截器 相当于一个关卡&#xff0c;如果满足条件就放行请求&#xff0c;不满足就拦截 响应拦截器 在处理结果之前&#xff0c;先对结果进行预处理&#xff0c;比如&#xff1a;对数据进行一下格式化的处理 全局请求拦截器 axios.interceptors.request.use(config > { /…

SeaTunnel及SeaTunnel Web部署指南(小白版)

现在你能搜索到的SeaTunnel的安装。部署基本都有坑&#xff0c;官网的文档也是见到到相当于没有&#xff0c;基本很难找到一个适合新手小白第一次上手就能成功安装部署的版本&#xff0c;于是就有了这个部署指南的分享&#xff0c;小主已经把可能遇到的坑都填过了&#xff0c;希…

Web前端—移动Web第五天(媒体查询、Bootstrap、综合案例-alloyTeam)

版本说明 当前版本号[20231122]。 版本修改说明20231122初版 目录 文章目录 版本说明目录移动 Web 第五天01-媒体查询基本写法书写顺序案例-左侧隐藏媒体查询-完整写法关键词 / 逻辑操作符媒体类型媒体特性 媒体查询-外部CSS 02-Bootstrap简介使用步骤下载使用 栅格系统全局…

PTA 六度空间

“六度空间”理论又称作“六度分隔&#xff08;Six Degrees of Separation&#xff09;”理论。这个理论可以通俗地阐述为&#xff1a;“你和任何一个陌生人之间所间隔的人不会超过六个&#xff0c;也就是说&#xff0c;最多通过五个人你就能够认识任何一个陌生人。”如图1所示…

大白话DDD(DDD黑话终结者)

大白话DDD&#xff08;DDD黑话终结者&#xff09; 一、吐槽的话 相信听过DDD的人有很大一部分都不知道这玩意具体是干嘛的&#xff0c;甚至觉得它有那么一些虚无缥缈。原因之一是但凡讲DDD的&#xff0c;都是一堆特别高大上的概念&#xff0c;然后冠之以一堆让人看不懂的解释…

Python教程73:Pandas中一维数组Series学习

创建一维数据类型Series dataNone 要转化为Series的数据(也可用dict直接设置行索引) 若是标量则必须设置索引,该值会重复,来匹配索引的长度 indexNone 设置行索引 dtypeNone 设置数据类型(使用numpy数据类型) nameNone 设置Series的name属性 copyFalse 不复制 (当data为ndarray…

Centos中的解压和压缩指令

在CentOS 7系统中&#xff0c;可以使用多种命令进行文件压缩和解压缩操作。以下是常见的文件压缩和解压命令及其用法的详解&#xff1a; 1.tar&#xff1a;tar命令用于打包文件或目录&#xff0c;并可选地压缩为tar压缩包。 创建tar压缩包&#xff1a;tar -cvf archive.tar f…

【深度学习】神经网络术语:Epoch、Batch Size和迭代

batchsize&#xff1a;中文翻译为批大小&#xff08;批尺寸&#xff09;。 简单点说&#xff0c;批量大小将决定我们一次训练的样本数目。 batch_size将影响到模型的优化程度和速度。 为什么需要有 Batch_Size : batchsize 的正确选择是为了在内存效率和内存容量之间寻找最…

Postgresql源码(116)提升子查询案例分析

0 总结 对于SQL&#xff1a;select * from student, (select * from score where sno > 2) s where student.sno s.sno; pullup在pull_up_subqueries函数内递归完成&#xff0c;分几步&#xff1a; 将内层rte score追加到上层rtbable中&#xff1a;rte1是student、rte2带…

nginx编译安装

1.下载nginx&#xff1a; 地址&#xff1a;http://nginx.org/en/download.html 2.安装依赖 安装gcc: yum install -y gcc安装pcre库 yum install -y pcre pcre-devel安装zlib库&#xff1a; yum install -y zlib zlib-devel3.安装nginx ./configure --prefix/usr/local/ngi…

Spark SQL将Hive表中的数据写入到MySQL数据库中

import org.apache.spark.sql.SparkSessionobject HiveToMySQL {def main(args: Array[String]): Unit {// 创建SparkSessionval spark SparkSession.builder().appName("HiveToMySQL").enableHiveSupport().getOrCreate()// 读取Hive表数据val hiveDF spark.tabl…