昨天线下赛的复盘,有哪些细节值得反复推敲?

摘要:这次最大的感受: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写个脚本。
阅读全文