本文主要是介绍[WUSTCTF2020]level11,[GUET-CTF2019]re1,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
没有壳,64位ida打开
主函数里有很明显的flag
for ( i = 1; i <= 19; ++i ){if ( i & 1 )printf("%ld\n", (unsigned int)(ptr[i] << i));elseprintf("%ld\n", (unsigned int)(i * ptr[i]));}return 0;
}
简单写一个脚本逆向
有一个if
条件判断:if ((i+1) & 1):
。这里使用了位与操作&
来判断索引i+1
是否为奇数。如果是奇数,执行条件语句的第一部分。
a = [198,232,816,200,1536,300,6144,984,51200,570,92160,1200,565248,756,1474560,800,6291456,1782,65536000]for i in range(19):if ((i+1) & 1):print(chr(a[i] >> (i+1)),end="")else:print (chr(a[i] // (i+1)),end="")
upx壳
关键加密函数
求出a1即可
可写出代码
第六个不知道0-9一个一个试试
flag=''
flag+=chr(166163712//1629056)
flag+= chr(731332800 // 6771600)
flag += chr(357245568 // 3682944)
flag += chr(1074393000 // 10431000)
flag += chr(489211344 // 3977328)
flag += chr(518971936 // 5138336)
flag+='?'
flag += chr(406741500 // 7532250)
flag += chr(294236496 // 5551632)
flag += chr(177305856 // 3409728)
flag += chr(650683500 // 13013670)
flag += chr(298351053 // 6088797)
flag += chr(386348487 // 7884663)
flag+= chr(438258597 // 8944053)
flag+= chr(249527520 // 5198490)
flag+= chr(445362764 // 4544518)
flag+= chr(981182160 // 10115280)
flag+= chr(174988800 // 3645600)
flag+= chr(493042704 // 9667504)
flag += chr(257493600 // 5364450)
flag+= chr(767478780 // 13464540)
flag+= chr(312840624 // 5488432)
flag += chr(1404511500 // 14479500)
flag+= chr(316139670 // 6451830)
flag+= chr(619005024 // 6252576)
flag+= chr(372641472 // 7763364)
flag+= chr(373693320 // 7327320)
flag+= chr(498266640 // 8741520)
flag+= chr(452465676 // 8871876)
flag+= chr(208422720 // 4086720)
flag+= chr(515592000 // 9374400)
flag+= chr(719890500 // 5759124)
print(flag)#flag{e?65421110ba03099a1c039337}
这篇关于[WUSTCTF2020]level11,[GUET-CTF2019]re1的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!