-
-
[原创]更新后的第一题仍然多解
-
2019-6-10 17:17
1784
-
系统认可的答案是:401353
但经我验证,3A!353 也可以通过验证
算法很简单,serial为6个字符,后三个必须是353. 前三个的ASCII相加等于149. 然后根据某个算法算出一个值保存在ESI中,这个ESI必须等于0x401353。接下来会发生异常,在异常处理的过程中会打印"success!"。
求解的过程也不复杂,设前三个字符分别为x, y, z,然后遍历所有可能求解即可。代码如下:
def check(x, y, z):
val = 0
for i in [x, y, z, 0x33, 0x35, 0x33]:
val = 16 * val + i - 48
return val == 0x401353
for x in range(1, 148):
for y in range(1, 149 - x - 1):
z = 149 - x - y
if z <= 0: continue
if check(x, y, z):
print(x, y, z)
print(chr(x), chr(y), chr(z))
打印结果为
(50, 82, 17)
('2', 'R', '\x11')
(51, 65, 33)
('3', 'A', '!')
(52, 48, 49)
('4', '0', '1')
(53, 31, 65)
('5', '\x1f', 'A')
(54, 14, 81)
('6', '\x0e', 'Q')
也就是说,以下两个输入均是正确的解!
3A!353
401353
经实验也是对的。
[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界
最后于 2019-6-10 17:25
被jeffli编辑
,原因: