特点
- v9的取值再怎么取都超不过22。再者在下边,无论随机取的是哪个值,都会进行相应的计算
- 题目只是取其中十个进行比较,就得出是否正确的结果。
"""
正向思路:
1.题目取数组中的随机十个,但是不受影响,会特定到某个位置
2.可以通过动态调试看是不是单独影响
3.计算temp。有个循环
4.结合temp计算最终值
5.与str_list作比较
6.我的爆破不成功
"""
str_list = [0x5F, 0xF2, 0x5E, 0x8B, 0x4E, 0x0E, 0xA3, 0xAA, 0xC7, 0x93,
0x81, 0x3D, 0x5F, 0x74, 0xA3, 0x09, 0x91, 0x2B, 0x49, 0x28,
0x93, 0x67]
# 不成功的爆破代码
def exp():
flag = []
f = 0
# temp = 0
for c in range(0x100):
# temp = 0
for i in range(22):
temp = 0
for x in range(i+1):
temp = (1828812941 * temp + 12345)
f = (temp & 0xff) ^ c
if f == str_list[i]:
flag.append(chr(c))
print("".join(flag))
exp()
# 成功的逆向代码
def rev():
flag = []
for i in range(22):
# c = str_list[i]
temp = 0
for x in range(i+1):
temp = (1828812941 * temp + 12345)
f = (temp^str_list[i]) & 0xff
flag.append(chr(f))
print("".join(flag))
rev()