dis

点击此处获得更好的阅读体验


WriteUp来源

来自MO1N战队

题目描述

某程序上残留下的一个程序字节码,请您帮助分析。flag格式为:flag{}。

题目考点

  • pyc逆向

解题思路

逐条还原python语句

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
a = raw_input("Input Your Password:")
a = '0x'+a.encode('hex')
a = int(a,16)
b = 65537
c = 108539847268573990275234024354672437246525085076605516960320005722741589898641
a=a%c
ans=1
while b!=0:
if b&1:
ans=(ans*a)%c
b>>=1
a=(a*a)%c
if ans == 19768389376732605541278069478730687959201475928791774076030532997986175692691:
print 'correct'
else :
print 'error'

分析后发现就是个RSA加密的过程

其中n可以被很容易的分解

解密一下就可以了

1
2
3
4
5
6
7
8
9
10
import gmpy2
p = 325593180411801742356727264127253758939
q = 333360321402603178263879595968004169219
e = 65537
c = 19768389376732605541278069478730687959201475928791774076030532997986175692691
fi = (p-1)*(q-1)
n = p*q
d = gmpy2.invert(e,fi)
m = pow(c,d,n)
print hex(m)[2:].decode('hex')

Flag

1
flag{RSA_i5_Safe}