RE

【你看我反不反就完了】字符串对比:

拖到die中,发现是无壳,64位,拖动到64位的ida中进行反编译

img

成功打开后,就找到了最开始界面,就已经看到了flag

img

可以按一下f5进入伪代码的窗口:

这样就得到了flag:QLNU{he11ow_re!}

可以win+r 然后输入cmd进行命令界面,然后把程序拖动进去,输入得到的flag,显示输入正确

img

【阿斯克】ascll码表对比:

还是一样的查壳,是64位无壳,直接进行反编译

img

这里看到了有一个v5的数组,这个就是所谓的ascll码

ascll码81对应的字符的‘Q’,76是‘L’,所以不难猜测,这一串字符连起来就是flag了

81,76,78,85,123,119,51,49,99,48,109,101,95,116,48,95,114,51,125

flag:QLNU{w31c0me_t0_r3}

给一个比较不错的转化网站实现ascll码、16进制、10进制、二进制互相转化:

https://www.rapidtables.org/zh-CN/convert/number/ascii-hex-bin-dec-converter.html

img

非预期解:

在进入软件后按空格进入汇编指令,然后就可以直接看到把ascll码转换过之后的flag

img

还有一样的操作,在cmd窗口运行一下:

img

f1@g】

首先,把下载的文件拖入die(查壳工具),无壳,32位

然后拖入ida32,F5反编译

img

很显然,这不是flag,点进replaceOneWithI函数

img

很明显,这个函数就是修改了部分flag,对着数字按R转换

img

替换部分字母,得到正确的flag

1
QLNU{Am_1_th3_f1@g?}

好多get啊!你get到了吗??】

首先,把下载的文件拖入die(查壳工具),无壳,32位

然后拖入ida32,F5反编译

img

看见好多get函数,点进去

img

对着数字,按R转换

img

依次转换get函数,得到flag

1
QLNU{ni_zhua_dao_wo_le!}

【我也很疑惑呀????!】

这题涉及到异或的计算,是一个位运算

img

就是每一位和6进行异或计算,脚本直接嗦了

1
2
3
4
5
6
7
8
9
str1 = "WJHS}^itY~iTY~6tY^6TY~itY^iTY~It{"

result = ""

for i in range(len(str1)):
result += chr(ord(str1[i]) ^ 6)

print(result)
//QLNU{Xor_xoR_x0r_X0R_xor_XoR_xOr}

【baby_base64

首先,把下载的文件拖入die(查壳工具),无壳,64位

然后拖入ida64,F5反编译

img

根据提示可以看出是base64加密且是换表加密

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import base64
import string

string = "rrOxqoSIkKCVloqgjJeWoJKeoJ2WnpCgkKmQ3oL="

tableBase64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
tableNew = "+/9876543210zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA"

'1.换表'
maketrans = str.maketrans(tableNew, tableBase64)
'2.使用新表转换字符串'
translate = string.translate(maketrans)
print(translate)
'3.Base64解码'
flag = base64.b64decode(translate)

flag = base64.b64decode(string.translate(str.maketrans(tableNew, tableBase64)))
print(flag)
QLNU{wo_jiu_shi_ma_biao_oVo!}

走个迷宫试试_3岁小孩版】

首先,把下载的文件拖入die(查壳工具),无壳,64位

然后拖入ida64,F5反编译

img

迷宫算法,跑程序

img

img

迷宫路径:ssdsddwwwd

img

在线MD5加密网站

img

1
QLNU{9E7837810192102F}

走个迷宫试试_18岁青年版】

首先,把下载的文件拖入die(查壳工具),无壳,64位

然后拖入ida64,F5反编译

img

img

俩循环,外循环循环10次,代表行,内循环循环16次,代表列

1
2
3
4
5
6
7
8
9
10
11
12
1111111111111111
1001000100000011
1101110101101011
1100010001001011
1111011101100011
1100000100001111
1111101101100111
1100000000010011
1100000000101001
1111111111111111

dssddssdssdddwwdddsdsdsd

img

1
QLNU{zhnZzgrZC2rZC2rKzhD3zgrKC2rZzhnK}

ez_base64】

img

hard_base64】

首先,把下载的文件拖入die(查壳工具),无壳,64位

然后拖入ida64,F5反编译

img

解题脚本

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
def generate_new_base():
base = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
index = [52, 62, 0, 26, 1, 27, 2, 28, 3, 29, 4, 30, 5, 31, 6, 32, 7, 33, 8, 34, 9, 35, 10, 36, 11, 37,
12, 38, 13, 39, 14, 40, 15, 41, 16, 42, 17, 43, 18, 44, 19, 45, 20, 46, 21, 47, 22, 48, 23, 49,
24, 50, 25, 51, 53, 61, 54, 60, 55, 59, 56, 58, 57, 63]

new_base = [base[index[i]] for i in range(64)]
return ''.join(new_base)

if __name__ == "__main__":
new_base = generate_new_base()
print(new_base)
#0+AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz192837465/
import base64
string = "GJlBLSlCjbtZGibfMyrKLKpRhJzZGjlfmZ2yKabCMSbSjRnpOkfLjR62jjJ="

tableBase64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
tableNew = "0+AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz192837465/"
'''
maketrans():用于创建字符映射的转换表,对于接受两个参数的最简单的调用方式,第一个参数是字符串,表示需要转换的字符,第二个参数也是字符串表示转换的目标;
translate():法根据参数table给出的表(包含 256 个字符)转换字符串的字符, 要过滤掉的字符放到 del 参数中;
decode():以encoding指定的编码格式解码字符串。
'''

'1.换表'
maketrans = str.maketrans(tableNew, tableBase64)
'2.使用新表转换字符串'
translate = string.translate(maketrans)
print(translate)
'3.Base64解码'
flag = base64.b64decode(translate)

'''
三合一操作:
flag = base64.b64decode(string.translate(str.maketrans(tableNew, tableBase64)))
'''
flag = base64.b64decode(string.translate(str.maketrans(tableNew, tableBase64)))
print(flag)


input_str = "9FDbfFTZt91Mk9VahdEMt9VMoN3X1FjafVGaysXVOxUU"
reversed_str = input_str[::-1]
print(reversed_str0)
#UUxOVXsyaGVfajF1X3NoMV9tMEdhaV9kM19tZTFfbDF9
import base64

# Base64 编码的数据
encoded_data = "UUxOVXsyaGVfajF1X3NoMV9tMEdhaV9kM19tZTFfbDF9"

# 解码数据
decoded_data = base64.b64decode(encoded_data).decode('utf-8')
print("Decoded:", decoded_data)
#QLNU{2he_j1u_sh1_m0Gai_d3_me1_l1}

或者使用cyberchef

img

有时候运气也是实力的一部分!】

首先,把下载的文件拖入die(查壳工具),有壳,UPX壳,64位

img

先进行脱壳,使用upx工具

img

然后拖入ida64,F5反编译

其他都是题目加密函数,重点看画红框的函数

img

函数sub10087

img

函数sub10086

img

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
def sub10087():
Str = ",W=%%6W]:B0+73#GO}"
Str = list(Str)

for i in range(len(Str)):
if ord(Str[i]) > 59 and ord(Str[i]) <= 100:
Str[i] = chr(ord(Str[i]) - 60)

Destination = "".join(Str)

for j in range(len(Destination) - 2, -1, -1):
Destination = Destination[:j] + chr(ord(Destination[j]) ^ ord(Destination[j + 1])) + Destination[j + 1:]

return Destination


result = sub10087()
print(result)
#_shiLi_De_YiBuFen}

看代码看到这里

img

v5就是a1

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
v13 = 678
if v13 == 678:
v5 = [0] * 3
for i in range(3):
v5[i] = v13 % 10
v13 //= 10
else:
v5 = None

print(v5) # 输出v5的内容
#[8, 7, 6]
def encrypt_v0(v0, a1):
v3 = [0] * len(v0)

for i in range(len(v0)):
key = a1[i % 3]
v3[i] = chr(ord(v0[i]) ^ key)

return ''.join(v3)


v0 = "YKH]|_}iWaX_mTna"
a1 = [8, 7, 6]

encrypted_v0 = encrypt_v0(v0, a1)
print(encrypted_v0)
#QLNU{YunQi_YeShi

得到flag

1
QLNU{YunQi_YeShi_shiLi_De_YiBuFen}