-
-
[原创]更新后的第一题仍然多解
-
2019-6-10 17:17
1737
-
系统认可的答案是: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
经实验也是对的。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2019-6-10 17:25
被jeffli编辑
,原因: