世安杯-get_flag

2017-10-18  本文已影响0人  2mpossible

一开始不知道怎么调试,拿到代码很乱,后面慢慢的调,终于找到关键代码

关键就是那个比较,其中eax的计算根据输入计算得到的,exc在内存中提出来的
然后我们来看地址0xeb5018是什么字符,在00EB1222那里右键数据窗口中跟随==>地址常量

可以看到要比较的十六进制数,然后我们再来看具体的算法操第一步的操作:

可以知道大概就是(ecx*2-6)^ecx 而ecx放的就是输入的字符串的一个字节

第二步:

这里就是之前的数-2edx,而edx是从0-15的,最后理解了大概的逻辑,写脚本:

import string
dic = string.printable
dict=[0xB9,0x3A,0xA9,0xD8,0x15,0x8A,0xE7,0x42,0x69,0x90,0xCA,0xA3,0x4D,0xD8,0xD9,0xC9]
flag=""

for i in range(16):
    for j in dic:
        if( ( ( (ord(j)*2-6) ^ ord(j) ) - 2*i )==dict[i]):
            flag+=j
            break
        
print flag
上一篇下一篇

猜你喜欢

热点阅读