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姐姐赛后的指导

 

posted @ 2020-03-09 23:18  Harmonica11  阅读(170)  评论(0编辑  收藏  举报