hgamefinal re peko-chain!
这题一直想偏了,一直关心4,结果1才是重点。。。还是太菜了。。。
感觉自己做题时总是很慌,平时刷题还好,一到比赛本来能分析明白的地方也看不出来。。。不知有没有什么好办法。。。
======================================================================================================
这题是一个简化的区块链,提示了是哈希链表,慌得我连提示没注意到
本题的关键在于1,
在sub_400A76里
将输入的名字md5后做了一个这样的结构,之后在sub_4008F6里
将这个结构再次md5,将md5&0xfffff作为索引,在创世块中这个值为1656A
再看2
在2和4里都用了这个函数,可以由此拿到shell,但是由于4里有cat flag 我一直在看4,结果其实4里是个假flag和提示
hgame{fakefakefakefake}
I'm so sorry that lied you..But to be honest, you are a bit close to the final answer
You may also realized that the peko-chain has So many bugs there
To think about it: It's hash function always safe? Or what is the defiction of safe hash function
Good Luck~
于是思路就是在将输入名字进行计算后,在用2拿shell
先计算
# -*- coding: utf-8 -*-
import base64,hashlib
from itertools import *
list = 'abcdefghijklmnopqrstuvwxyz'
for i in product(list, repeat=5):
name = "".join(i)
name_md5 = hashlib.md5(name).hexdigest()
j=0
name_key=b''
for i in range(16):
name_key+=chr(eval('0x'+name_md5[j:j+2]))
j+=2;
key = '\x75\x6F\x6B\x6E\x6E\x69\x67\x69\x6B\x75\x73\x64\x6F\x6B\x65\x70'
key+=name_key
key+= '\x6A\x65\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
key+= '\x32\x00\x00\x00\x00\x00\x00\x00'
key = hashlib.md5(key).hexdigest()
if(key[0:4]=='6a65' and key[5]=='1'):
print 'realname:'+name
break
6a65f10a5f7b7d53a73a0c5094a6e5be
realname:enecr
注:虽然放的都是静态调试的图,但其实是做完之后懒得截图了,主要还是靠动态调试出来
最后感谢出题人Ch1p姐姐赛后的指导