版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/CosmopolitanMe/article/details/89352182
拿到一个pyc反编译,分析了一下,要求t1,t2,t3
from flag import t1, t2, t3
N = 91080783459224114417419735848141602413276894709356670475166857901383529276788422992031159L
s1 = 11411269144987772222786703496950992585276983184692849555141859373112423610294869112786252L
s2 = 58599619676130565690598871824198278116020685570207351127154648707502599199944142046246402L
s3 = 65974795812758987659130564760412992885703783478354682873750151867682024151063561297876490L
if s1 * t1 % N != 1:
exit()
if s2 * t2 % N != 1:
exit()
if s3 * t3 % N != 1:
exit()
flag = hex(t1 + t2 + t3)[2:-1].decode('hex')
print flag
已知s1*t1%N==1,求t1,这其实是个数论问题,t1=ModReverse(s1,N)
链接:https://blog.csdn.net/CosmopolitanMe/article/details/78948011
解题代码:
def gcd(a, b):
while a != 0:
a, b = b % a, a
return b
def findModReverse(a, m):
if gcd(a, m) != 1:
return None
u1, u2, u3 = 1, 0, a
v1, v2, v3 = 0, 1, m
while v3 != 0:
q = u3 // v3
v1, v2, v3, u1, u2, u3 = (u1 - q * v1), (u2 - q * v2), (u3 - q * v3), v1, v2, v3
return u1 % m
t1=0
t2=0
t3=0
N = 91080783459224114417419735848141602413276894709356670475166857901383529276788422992031159L
s1 = 11411269144987772222786703496950992585276983184692849555141859373112423610294869112786252L
s2 = 58599619676130565690598871824198278116020685570207351127154648707502599199944142046246402L
s3 = 65974795812758987659130564760412992885703783478354682873750151867682024151063561297876490L
t1=findModReverse(s1,N)
t2=findModReverse(s2,N)
t3=findModReverse(s3,N)
flag = hex(t1 + t2 + t3)[2:-1].decode('hex')
print flag