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

news/2024/5/19 23:20:26 标签: Crypto, 网络安全, CTF, python, Reverse, WP

文章目录

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

在这里插入图片描述

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

python">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
在这里插入图片描述

按照原来的思路 写脚本

python">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 字节码的信息。

将上面改成:

python">from dis import dis
dis(code_obj)

再次运行:

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

python">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.niftyadmin.cn/n/5136294.html

相关文章

混合编程 ATPCS规范及案例(汇编调用C、C调用汇编、内联汇编)

1.混合编程的规范 2.汇编调用C 2.C调用汇编 3.内联汇编 例子&#xff1a;

电脑文件夹怎么压缩?分享三个简单的方法!

为了节省存储空间和便于管理&#xff0c;压缩文件夹可以将多个文件或文件夹整合成一个压缩文件&#xff0c;从而节省存储空间。此外&#xff0c;压缩文件夹还可以方便地管理文件&#xff0c;那么电脑文件夹怎么压缩呢&#xff1f;一起来看看吧~ 一、电脑自带的压缩功能 1、找到…

私有云:【7】VCenter安装Composer服务

私有云&#xff1a;【7】VCenter安装Composer服务 1、创建Composer数据库2、VCenter安装Composer服务2.1、安装Native Client组件2.2、对Composer服务器扩容出一个安装盘 3、安装Composer服务 服务器创建好后配置IP&#xff0c;加入域以及添加域管理员cloudadmin&#xff0c;可…

【蓝桥每日一题]-线性筛(保姆级教程 篇1)#质数率 #不喜欢的数

今天讲线性筛 目录 题目&#xff1a;质数率 题目&#xff1a;不喜欢的数 思路&#xff1a; 话不多说&#xff0c;先上模板&#xff08;带注释&#xff09; #include <bits/stdc.h>//线性筛模板 using namespace std; int getprime(int n){//线性筛O(n)速度求出小于n的…

【算法】染色法判定二分图

题目 给定一个 n 个点 m 条边的无向图&#xff0c;图中可能存在重边和自环。 请你判断这个图是否是二分图。 输入格式 第一行包含两个整数 n 和 m。 接下来 m 行&#xff0c;每行包含两个整数 u 和 v&#xff0c;表示点 u 和点 v 之间存在一条边。 输出格式 如果给定图是二分…

【Linux】第七站:vim的使用以及配置

文章目录 一、vim1.vim的介绍2.vim基本使用3.vim的命令模式常用命令4.底行模式 二、vim的配置 一、vim 1.vim的介绍 vim编辑器&#xff0c;用来文本编写&#xff0c;可以写代码 它是一个多模式的编辑器 它有很多的模&#xff0c;不过我们暂时先只考虑这三种模式 命令模式插入模…

在Xamarin.Android项目中调用自己写的java jar包

一、开发环境 1.IntelliJ IDEA 2023.2.3 (Community Edition) 2.Visual Studio 2019 (v16.11.30) 3.Windows PowerShell 二、打开IDEA&#xff0c;编写Java脚本并编译为jar文件 1.打开IDEA--->File--->New--->Project... 三、打开Visual Studio 2019&#xff0c;…

网络工程师知识点整理(一)

固态硬盘&#xff08;SSD&#xff09;和U盘的存储介质都是闪存&#xff08;flash&#xff09;虚拟存储技术是把内存和外存有机结合起来使用的机械硬盘接口&#xff1a;SATA、SAS、SCSI、FC、IDE&#xff0c;其中SATA、SAS应用较为广泛固态硬盘接口&#xff1a;SATA、mSATA、SAS…