昨天线下赛的复盘,有哪些细节值得反复推敲?
摘要:这次最大的感受:Re做题的时候不要啥都没分析出来就去写代码,不要觉得自己写着写着就能看懂,不可能的,不如先分析好,即使是先猜一下呢,还有就是测试数据不要写0,会和本身就是空的数据混了 Re1 分最少的一题,附件很大而且F12全是Py开头的
这次最大的感受:Re做题的时候不要啥都没分析出来就去写代码,不要觉得自己写着写着就能看懂,不可能的,不如先分析好,即使是先猜一下呢,还有就是测试数据不要写0,会和本身就是空的数据混了
Re1
分最少的一题,附件很大而且F12全是Py开头的
断定是python逆向:
pyinstxtractor拆exe程序:
一般情况下,需要找和附件同名的pyc文件进行反编译,但是没找到,比较可疑的是src这个
用pycdc进行反编译:
# Source Generated with Decompyle++
# File: src.pyc (Python 3.10)
import hashlib
def get_user_input():
user_input = input('请输入: ').strip()
if len(user_input) != 9:
print('你的输入存在错误!')
continue
if not user_input.isdigit():
print('你的输入存在错误!')
continue
return user_input
def check_md5_match(user_input, target_hash):
input_md5 = hashlib.md5(user_input.encode()).hexdigest()
if input_md5 == target_hash:
return True
def main():
TARGET_HASH = 'b4bb721a74f07177a6dbc3e113c327e3'
user_input = get_user_input()
is_match = check_md5_match(user_input, TARGET_HASH)
if is_match:
flag = "flag{md5(user_input + 'SDnisc')}"
print('验证成功!')
print(f'''Flag: {flag}''')
return None
None('验证失败!')
if __name__ == '__main__':
main()
return None
可以看出,首先会对input的内容去除回车和空格/制表符那种
if not user_input.isdigit():其次,不能存在字母,长度为9,进行md5值计算,然后和给出的md5进行比较
所以,结论很明确了,我们只需要进行9位纯数字的md5爆破就可以。
我们当然可以用python写个脚本。
