SHCTF2023 山河CTF Reverse Week3 --- ststst easyre WP详解

news2024/11/16 1:30:38

文章目录

  • [WEEK3]ststst
  • [WEEK3]easyre

[WEEK3]ststst

在这里插入图片描述
64 bit 的 ELF 文件

在这里插入图片描述
sub_400763点进去看看

在这里插入图片描述

mprotect ,这个
在这里插入图片描述

这一题是SMC + TEA的考察,我写过一篇关于 SMC学习网鼎杯jocker

可以使用idapython写脚本自动修复,也可以使用动态调试,我个人计较喜欢动态

在这里插入图片描述

linux虚拟机远程调试一下,具体步骤:

  • 把文件复制到linux工作台上,chmod 777 ststst 赋予权限(这里我是操作过的)
    在这里插入图片描述

  • 将 ida目录的linux_server文件复制到工作台上,赋予权限
    在这里插入图片描述

  • ./linux_server64 启动服务,
    在这里插入图片描述

  • 然后在ida上点击 Remote Linux debugger
    在这里插入图片描述
    上面俩个填写linux上的文件路径,第三个是文件夹,然后还有虚拟机的ip地址,可以用ifconfig查看。

在这里插入图片描述
远程连接完,随便输入flag先
然后一直F7单步走,如果中间出现 提示 RIP错误的,点击no就好,

一直走到红色部分,停下
在这里插入图片描述

选中push rbp开始,一直选到最下面的 retn处。用U全部Undefine一下,

在这里插入图片描述

之后再用C改为代码,要用force强制处理,之后就是用p创建函数,再反编译。得到一个简单的TEA加密

在这里插入图片描述

密文和key都有,写个exp逆向一下就好;

#include <stdio.h>
#include <stdint.h>
 
 
void decrypt (uint32_t* v, uint32_t* k) {
    uint32_t v0=v[0], v1=v[1], i;
    uint32_t delta=0x61C88647;
    uint32_t sum = -(delta*32);
    uint32_t k0=k[0], k1=k[1], k2=k[2], k3=k[3];
    for (i=0; i<32; i++) {
        v1 -= ((v0<<4) + k2) ^ (v0 + sum) ^ ((v0>>5) + k3);
        v0 -= ((v1<<4) + k0) ^ (v1 + sum) ^ ((v1>>5) + k1);
        sum += delta;
    }
    v[0]=v0; v[1]=v1;
}
 
int main()
{
    uint32_t enflag[] = {3683591529,1087210467,2687755904,4294420036,1762408983,3055663206,887612071,2903549586};
    uint32_t key[4] = {0x1234567, 0x89ABCDEF, 0x0FEDCBA98, 0x76543210};
    for(int i=0;i<8;i+=2)
    {
        uint32_t temp[2];        //定义来解密
        temp[0] = enflag[i];
        temp[1] = enflag[i+1];
        decrypt(temp, key);
        //printf("%X%X",temp[0],temp[1]);
        printf("%c%c%c%c%c%c%c%c",*((char*)&temp[0]+0),*((char*)&temp[0]+1),*((char*)&temp[0]+2),*((char*)&temp[0]+3),*((char*)&temp[1]+0),*((char*)&temp[1]+1),*((char*)&temp[1]+2),*((char*)&temp[1]+3));
    }
    return 0;
}

// 5ef846656801c9b9714388d2ccd98cdd

[WEEK3]easyre

在这里插入图片描述
pyinstaller 的题目。

可以直接上pyinstxtractor反编译一下,然后再用 uncompyle6

在这里插入图片描述

得到一个文件夹。打开,找到main.pyc (有个别不同版本的pyinstxtractor反编译出来的是 main文件,要自己改文件后缀)

把main.pyc 和 struct.pyc 拖入十六进制编辑器 查看一下文件头,发现相同且正常,不用更改

直接用uncompyle6 反编译一下 得到 main.py

在这里插入图片描述

打开main.py

在这里插入图片描述

前面是计算积分的,用脚本解下

import sympy as sp

# 定义符号和已知的积分值
x, xor_key = sp.symbols('x xor_key')
f = x ** 2 + x + 1
integral_value = 12024 / 3

integral_result = sp.integrate(f, (x, 1, xor_key))
equation = sp.Eq(integral_result, integral_value)
solutions = sp.solve(equation, xor_key)
print(solutions)

# [22.3810923951302, -11.9405461975651 - 19.8722996126735*I, -11.9405461975651 + 19.8722996126735*I]

用22,23 带回去验证下,发现xor_key 是 23
在这里插入图片描述

按照原来的思路 写脚本

import base64
import marshal
from dis import dis

encoded_data = b'#`VVVVVVVVVVVVVVVVVVVVVSVVVVFVVVV_YZVVVVMVU|VNFV@pU|V{xUMVYvVzBSMVDSVFRVMFDSV\\VQMV@\x7fVAxPMFU{V@BPp`]vU%B_MF]eVy]VMFY|UxZUVFUbTPBSMVrSVFRVMV\x7fCVT|]N`^VVVVVVVVVVVVVVVpVVVVPVVVVF`VVV_GFVVVVsVU\'V@FUp`PSVO\'TMV].V$FUMVPSVBFVOC".U_`SqV]/UU|VQ`U/V_`RsV]/V^ZUQpVMVUtVMVR@V_\'SqV]/Vo|VqV]/UU|VVpU/Vy`RGVU/Vy`SGVUoPPFTUVU.U_\'SsVXSV_\'QqVQRVQ&pqFM/UPFSQ`U|VENVqFE/V$`TqVFMVUtVMVR@V_\'SqV]/Vo|VqV]/UU|VVpU/Vy`RGVU/Vy`SGVU/Vy`TqVFMV_`TqVZMVUtVMVR@VU|VqFs/UvVRqVM/U\'RVxFRUV_QfqVACVT|RCb|VVFVV!FVVVVSgVFVVVT|Q%pEdvOY\'%pAnN@"yMsxSuPAb%p{~rOE{NO]nNOyvUzQ`tPAbMT|^%pYeMO{vTOUdN@{bsPA#sYxUB.xUvcxUvAx\\N%{`vPAnsPA#sYxRN%\x7f\x7ftcxUv!|Vtp/VVVS!UzM&u~"`rsx[tzZ\'O%AbN$]"t_FUVVVVto`VVVVVVF`UUV^ZVDVU_V^^VFNTTVRZVEVUPpRNVEVTt\x7fRVVVUmT`VVVPA#N@&`uPAqv%A"tnxVVVSN{U!ez%M\'!&&VP ez!UZmA.\'X"g^\'/NUcvXd.TPRTTD!&UB\\`dT.R}Q{!QQUdr~UguyU&sTU"u$An^PMdN@t!rpA&sPNcXQxSr@Am@p]bu\'#gT_^EVVVVtp|VVVUvU@YxM@Ye%pA`tz{bsYxQv@"`sOCvUzAbN%.|MsxRMzo\x7fM&x]M@"}ty{`sPA|tp/VVVUnS`VVV_^GVVVVt\x7fVVVVSvTSocu%E&uPB<VFVVV_ZFVVVVTUFRVFFTTVRZVpxTTVR\\Vp**'


xor_decoded_data = bytes([byte ^ 23 for byte in encoded_data])
decoded_data = base64.b64decode(xor_decoded_data)
code_obj = marshal.loads(decoded_data)
exce(code_obj)

运行会输出

在这里插入图片描述

这里就是卡在这了。

exec 是 Python 中的一个内置函数,用于执行动态生成的 Python 代码。这个函数接受一个代码对象(通常是由字符串形式的代码或者编译后的字节码构建而成),并执行其中的 Python 语句exec 是 Python 中的一个内置函数,用于执行动态生成的 Python 代码。

重点,接受一个代码对象,通常是由字符串形式的代码或者编译后的字节码构建而成。

而且前面marshal.loads(decoded_data) 反序列化从某种格式编码的代码。所以现在的encode其实是类似于字节码的存在?因此我们可以直接用dis模块查看code_obj 中包含的 Python 字节码的信息。

将上面改成:

from dis import dis
dis(code_obj)

再次运行:

在这里插入图片描述
粗略看了就是一个rc4的加密,rc4加密是对称的,因此我们继续将key和check值解密就好。

from Crypto.Cipher import ARC4

key = b'example_key'  # 替换成你的RC4密钥
ciphertext =b'\xd8\x94\x1e\xab\x9bft\xeb]@\x1b\xba\xe6\xe8\x133W\xdd\x0e\xe6\x924\xf1\x80mh\xeb=\x08a\x02\t.\xb5\x05B\xb0\xb0/D\x8cY'

ciphertext_bytes = bytes(ciphertext)
cipher = ARC4.new(key)
plaintext = cipher.decrypt(ciphertext_bytes)

print("Decrypted Data:", plaintext.decode('utf-8'))

# flag{d8e8d9d0-b2b1-7304-74b760-90b11ab6a3}

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

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

相关文章

吉他、班卓琴和贝斯吉他降分器:Arobas Music Guitar 8.1.1

Arobas Music Guitar 是一款专业的吉他、班卓琴和贝斯吉他降分器。在熟练的手中&#xff0c;它不仅可以让您创作&#xff0c;还可以编辑、聆听和录制&#xff0c;以及导入和导出乐谱。如果有人感兴趣的话&#xff0c;录音是在八个轨道上进行的&#xff0c;你可以为每个轨道单独…

1.8 网络安全模型

思维导图&#xff1a; 1.8 网络安全模型笔记&#xff1a; 网络安全模型核心概念: 消息在Internet上从发送方传送至接收方&#xff0c;涉及到源地址、目的地址、通信协议&#xff08;如TCP/IP&#xff09;的使用。信息交换的双方需要合作保证交换的可靠性。 安全技术核心组成…

发布一款CAN总线接口的GPS模块

一、模块硬件介绍 GNSS模块&#xff1a;u-blox M9N&#xff0c;支持北斗、GPS、格洛纳斯和伽利略四系统并发处理陶瓷天线&#xff1a;太盟PA025AZ009&#xff0c;支持北斗、GPS、格洛纳斯三系统。根据太盟的回复&#xff0c;25*25*4尺寸的陶瓷天线无法做到完美的四系统兼容&am…

软考系统架构师知识点集锦十:计算机网络、数学与经济管理、知识产权与标准化

一、计算机网络 1.1、考情分析 2.1 TCP/IP协议簇 2.1.1常见协议及功能 网际层是整个TCP/IP体系结构的关键部分,其功能是使主机可以把分组发往任何网络并使分组独立地传向目标。 POP3: 110 端口&#xff0c;邮件收取SMTP: 25 端口&#xff0c;邮件发送FTP: 20数据端口/21控制…

最优值函数

一、最优状态值函数 解决强化学习任务大致上意味着找到一种政策&#xff0c;能够在长期内实现很多奖励。对于有限MDPs&#xff0c;我们可以精确地定义一种最优政策&#xff0c;其定义如下。值函数定义了政策的一种部分排序。如果一个政策的预期回报大于或等于另一个政策π0在所…

VS Code2023安装教程(最新最详细教程)附网盘资源

目录 一.简介 二.安装步骤 三.VS Code 使用技巧 网盘资源见文末 一.简介 VS Code是一个由微软开发的跨平台的轻量级集成开发环境&#xff08;IDE&#xff09;&#xff0c;被广泛用于编写各种编程语言的代码。它支持多种编程语言&#xff0c;并且可以通过插件扩展功能。 以…

读图数据库实战笔记04_路径与图变异

1. Groovy 1.1. Java编程语言的一个超集 1.2. Gremlin Console的一个特性是能和Groovy配合使用 1.2.1. Gremlin Console会自动地迭代结果 1.3. 从技术上说&#xff0c;Gremlin Console就是Groovy交互式解释器&#xff08;read-eval-print loop&#xff0c;REPL&#xff09;…

一篇博客理解Recyclerview的使用

从Android 5.0开始&#xff0c;谷歌公司推出了RecylerView控件&#xff0c;当看到RecylerView这个新控件的时候,大部分人会首先发出一个疑问&#xff0c;recylerview是什么&#xff1f;为什么会有recylerview也就是说recylerview的优点是什么&#xff1f;recylerview怎么用&…

图像视觉特效处理工具:Boris FX Optics 2024.0.1

BorisFX光效插件Optics首发2024版&#xff1a;3大新功能详解 2023年9月15日&#xff0c;全球领先的视觉后期软件开发公司BorisFX推出了旗下知名软件Boris FX Optics的全新2024版本&#xff0c;这款备受后期处理爱好者喜爱的Photoshop插件和独立程序再次升级&#xff0c;为您的…

【PC】特殊空投-2023年10月

亲爱的玩家朋友们&#xff0c;大家好&#xff01; 10月特殊空投活动来袭。本月我们也准备了超多活动等着大家来体验。快来完成任务获得丰富的奖励吧&#xff01;签到活动&#xff0c;每周一次的PUBG空投节&#xff0c;还有可以领取PGC2023免费投票劵的活动等着大家&#xff01;…

聊聊统一认证中的四种安全认证协议(干货分享)

大家好&#xff0c;我是陈哈哈。单点登录SSO的出现是为了解决众多企业面临的痛点&#xff0c;场景即用户需要登录N个程序或系统&#xff0c;每个程序与系统都有不同的用户名和密码。在企业发展初期&#xff0c;可能仅仅有几个程序时&#xff0c;管理账户和密码不是一件难事。但…

软考系统架构师知识点集锦九:数据库系统

一、考情分析 二、考点精讲 2.1数据库概述 2.1.1数据库模式 (1)三级模式:外模式对应视图&#xff0c;模式(也称为概念模式)对应数据库表&#xff0c;内模式对应物理文件。(2)两层映像:外模式-模式映像&#xff0c;模式-内模式映像;两层映像可以保证数据库中的数据具有较高的…

linux查看系统版本、内核信息、操作系统类型版本

1. 使用 uname 命令&#xff1a;这将显示完整的内核版本信息&#xff0c;包括内核版本号、主机名、操作系统类型等。 uname -a2. 使用 lsb_release 命令&#xff08;仅适用于支持 LSB&#xff08;Linux Standard Base&#xff09;的发行版&#xff09;&#xff1a;这将显示包含…

reactos 可调试光盘映像

链接&#xff1a;https://pan.baidu.com/s/13M9BZN4IDrWLc3bjnHO79g?pwd0gst 提取码&#xff1a;0gst

【计算机网络笔记】传输层——多路复用和多路分用

系列文章目录 什么是计算机网络&#xff1f; 什么是网络协议&#xff1f; 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能&#xff08;1&#xff09;——速率、带宽、延迟 计算机网络性能&#xff08;2&#xff09;…

08 _ 栈:如何实现浏览器的前进和后退功能?

浏览器的前进、后退功能,我想你肯定很熟悉吧? 当你依次访问完一串页面a-b-c之后,点击浏览器的后退按钮,就可以查看之前浏览过的页面b和a。当你后退到页面a,点击前进按钮,就可以重新查看页面b和c。但是,如果你后退到页面b后,点击了新的页面d,那就无法再通过前进、后退…

Qwt QwtScaleDraw自定义坐标轴

1.概述 QwtScaleDraw 是 Qt 绘图库 Qwt 中的一个类&#xff0c;用于绘制坐标轴刻度线和刻度标签。它提供了一些方法和属性来设置刻度线和标签的样式、布局和对齐方式。 以下是类继承关系&#xff1a; 2.常用方法 标签相关方法&#xff1a; setLabelRotation(double angle)&…

Hudi系列文章7-RFC24 Flink 写入流程优化

文章目录 前言问题背景瓶颈与解决方案瓶颈一解决方法工作流程&#xff1a;精准一次语义容灾CoorinatorCheckpoint如何配合使用StreamWriteOperatorCoordinator CheckpointedFunctionStreamWriteFunctionInstant 提前生成问题 瓶颈二问题解决方案BucketAssignerBucketWriter 重点…

将字符串中符合规则的元素替换为指定元素 re.sub()

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 将字符串中符合规则的元素 替换为指定元素 re.sub() 选择题 请问re.sub(r[0-9],*,s)的结果是&#xff1a; import re s "hello123" print("【显示】s ",s) print(&quo…

采购申请单明细账/汇总账页面编写

业务需求和功能 1、功能&#xff1a;编写采购申请页面和采购申请管理页面。在申请单界面添加常用的查询条件&#xff0c;如单品、申请单等。在采购申请管理页面以单品维度去展示采购申请单的汇总信息&#xff0c;添加一个默认查询时间为7天&#xff0c;并对查询出来的不同状态…