XYCTF2024部分wp

Re

聪明的信使

发现是rot9

想起来不是简单的减9,是循环着来

1
flag{Y0u_KnOw_Crypt0_14_v3ry_Imp0rt@nt!}

miao

和省赛的差不多

交叉引用过去

1
flag{My_fl@g_h4s_br0ken_4parT_Bu7_Y0u_c@n_f1x_1t!}

大学生

第一次遇到dos系统

输入然后相邻两位异或

最后和密文比较

直觉是密文相邻两位异或

DebugMe

jadx混淆有点严重

不如jeb直接动调,不要下断点,直接attach之后click就有flag

1
XYCTF{d3bugg3r_15_v3ry_u53ful}

TrustMe

rc4解密

解密不够,去看其他方法,发现了decrypt,异或0xff,二进制位原来是1变为0,原来是0变为1

高版本没有debug

最后一部分没有注释,那估计是有用数据

发现还真是zip,同时也是apk,记得最后四位不要,这样才能在模拟器中打开

还是一个apk,flag从数据库中读出来

找到db文件了,但是在线工具一直打不开,应该要能想到已经被加密了(师傅提醒,有点misc),因为数据库这种不加密很危险

对着原本的文件头去异或,发现异或的是同一个数0xff,估计是第一个apk把所有有用文件都异或0xff了

异或后直接搜就能出

这样就能在线查看了

砸核桃

demo解压到本地就能脱壳了

baby_unity-2

https://www.52pojie.cn/thread-1580642-1-1.html

发现并没有需要的libil2cpp.so,用GameAssembler.dll代替

在师傅的提醒下发现有壳,其实想想也应该的,只有这个程序会有改动

用dnSpy打开,发现并没有具体实现

用ida打开GameAssembly.dll,但是找不到密文

发现sha1

ezcube

看颜色应该是三个中间块没有还原

且步数不能超过12

用z3不行

想到了最后一步还原公式

1
flag{RuRURURuruRR}

今夕是何年-2

工具反编译不了

ez_rand-2

看上去像是真随机,没啥想法

何须相思煮余年-2

gpt生成的汇编看不懂

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
push ebp
mov ebp, esp
sub esp, 0x81ec
mov eax, [0xa8]
mov ecx, [0x414040]
xor eax, [0xfc45]
push 0x0
lea eax, [ebp-0xa0]
push eax
call 0xc7a
add esp, 0xc
mov dword ptr [ebp-0xa8], 0x27
mov dword ptr [ebp-0xa4], 0x0
jmp short 0xf
mov ecx, [ebp-0xa4]
add ecx, 0x1
mov dword ptr [ebp-0xa4], ecx
cmp dword ptr [ebp-0xa4], 0x27
jle short 0xf
lea ebp, [ebp]
mov edx, [ebp-0xa4]
mov eax, [ebp+0x60]
lea ebx, [ebp+edx-0x3]
mov edx, [ebp-0xa4]
mov ecx, [ebp-0xa4]
mov dword ptr [ebp+ecx*4-0x3], edx
mov edx, [ebp-0xa4]
mov eax, [ebp-0xa4]
mov dword ptr [ebp+eax*4-0x3], edx
jmp short 0x73
mov ecx, [ebp-0xa4]
add ecx, 0x3
mov dword ptr [ebp-0xa4], ecx
cmp dword ptr [ebp-0xa4], 0x27
jle short 0x73
lea esi, [ebp-0xa4]
mov ecx, [ebp-0xa4]
mov edx, [ebp+0x60]
sub esi, edx
mov edx, [ebp-0xa4]
mov ecx, [ebp-0xa4]
mov dword ptr [ebp+ecx*4-0x3], edx
mov edx, [ebp-0xa4]
mov eax, [ebp-0xa4]
mov dword ptr [ebp+eax*4-0x3], edx
jmp short 0x38
mov ecx, [ebp-0xa4]
add ecx, 0x3
mov dword ptr [ebp-0xa4], ecx
cmp dword ptr [ebp-0xa4], 0x27
jle short 0x38
lea edi, [ebp-0xa4]
mov ecx, [ebp-0xa4]
mov edx, [ebp+0x60]
xor edi, edx
mov edx, [ebp-0xa4]
mov ecx, [ebp-0xa4]
mov dword ptr [ebp+ecx*4-0x3], edx
mov edx, [ebp-0xa4]
mov eax, [ebp-0xa4]
mov dword ptr [ebp+eax*4-0x3], edx
jmp short 0xf7
xor eax, eax
mov ecx, [ebp-0x4]
xor ecx, ebp
call 0x4
mov ebp, esp
ret

Misc

神之套-2

一眼掩码攻击

套比flag多了flag.md,其他都一样

找到同样地址的地方,发现^0xff之后有压缩包

TCPL

直接运行不了

ida不能反编译,那就用ghidra

按照流程得到输出,但是好像没啥用

由于题目说是把1用下面的图片来代替,那么可以知道下面的图片也表示一个字母或者数字,仔细去看上面的反编译代码后半部分可以发现是在调换数组的元素,那么数组的0x0就可以忽略,同时由于是5×5的矩阵,那猜测第59行应该是×5,同理上面应该是直接异或i,最后用0代替1即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
a=[0x46, 0x4D, 0x43, 0x44, 0x7F, 0x55, 0x4A, 0x44, 0x5C, 0x56,
0x4B, 0x65, 0x38, 0x52, 0x7C, 0x3E, 0x43, 0x52, 0x64, 0x4C,
0x6C, 0x24, 0x7E, 0x62, 0x79, 0x77, 0x74, 0x2A, 0x61]
#print(hex(len(a)))
s1=''
for i in range(0x1d):
#print((a[i]+i)^i,end=",")
s1+=chr((a[i]^i))
print(s1)

b=[0x20, 0x2A, 0x2A, 0x2A, 0x20,0x2A, 0x20, 0x20,0x20, 0x2A,0x2A, 0x20, 0x20, 0x20,0x2a, 0x2A, 0x20,0x20,0x20,0x2a,0x20,0x2a,0x2a,0x2a,0x20]
print(len(b))
s2=''
for i in range(5):
for j in range(5):
s2+=chr(b[j+i*5])
print(s2,end="")
print('\n',end="")
s2=''
#FLAG{PLCT_An4_r1SCv_x1huann1}
FLAG{PLCT_An4_r0SCv_x0huann0}

baby-AIO-2

去看so层发现关键函数

后来又给了一个apk,发现是vm


XYCTF2024部分wp
https://j1ya-22.github.io/2024/04/27/XYCTF2024部分wp/
作者
j1ya
发布于
2024年4月27日
许可协议