附件链接:
给了一个pyc文件
利用命令将pyc转换为py文件
1
|
uncompyle6 ezPython.pyc > ezPython.py
|
打开py文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
from
Crypto.Util.number
import
*
import
base64, base58
password
=
open
(
'password.txt'
,
'r'
).read()
tmp
=
bytes_to_long(password.encode(
'utf-8'
))
ans
=
base64.b64encode(base58.b58encode(
str
(tmp))).decode()
print
(
"I've forgot my password,could you please help me find the password?"
)
if
ans
=
=
'M0hBajFITHVLcWV6R1BOcEM5MTR0R0J3eGZVODV6MTJjZUhGZFNHQw=='
:
print
(
'You get the password!'
)
else
:
print
(
'Wrong! try again'
)
|
这段代码是Python中的字符串和编码转换操作。
首先,password是一个字符串,使用encode()方法将其转换为字节类型(bytes),采用UTF-8编码方式进行转换。接下来,tmp使用bytes_to_long函数将字节序列转换为一个长整型数值。
然后,tmp的值通过先使用Base58编码,再使用Base64编码的方式进行转换。base58.b58encode()和base64.b64encode()分别是对应的编码函数。
最后,使用decode()方法将编码后的结果转换为字符串类型。使加密后的值也就是ans等于M0hBajFITHVLcWV6R1BOcEM5MTR0R0J3eGZVODV6MTJjZUhGZFNHQw==
整个过程就是将密码转换为经过Base58编码和Base64编码的字符串,以ans变量保存结果。
解码过程:
先将ans进行base64解密,再进行base58解密
1
|
3HAj1HLuKqezGPNpC914tGBwxfU85z12ceHFdSGC
|
1
|
22385992650816784030032474165
|
再用python跑出bytes字节类型转换为长整型数值
1
2
3
4
5
6
7
|
from
Crypto.Util.number
import
*
import
base64, base58
password
=
'22385992650816784030032474165'
tmp
=
long_to_bytes(password.encode(
'utf-8'
))
print
(tmp)
|
password为HUBUCTF@1405
根据题目描述,flag为md5(password),一般取md5加密都是32位小写
故flag:
1
|
NSSCTF{fd78ee3399dd6a3c1d0b637fdca0c075}
|
更多【[HUBUCTF 2022 新生赛]ezPython】相关视频教程:www.yxfzedu.com