Seclab-----WriteUp
-
**生成-不能再简答的RSA
在一次RSA**对生成中,假设p=473398607161,q=4511491,e=17 求解出d。
答案格式:flag{d}
根据这张表,其中,表示 e在(p-1)(q-1)中的乘法逆元,mod 是求余运算。
解得 (p-1)(q-1) = 2135733082216268400
e-1 = ,即,125631357777427553
所以, d = 125631357777427553
也可以使用脚本跑
import gmpy2
p = gmpy2.mpz(473398607161)#初始化
q = gmpy2.mpz(4511491)
e = gmpy2.mpz(17)
phi_n = (p - 1) * (q - 1)
d = gmpy2.invert(e, phi_n)
print ("private key:")
print (d)
-
程序加密
有一个程序加密得到以下密文……
下载后修改后缀为zip,解压里面只有一个线索文件和.pyc文件。
什么是.pyc文件,pyc和py文件的区别
使用uncompyle6模块进行python3反编译,
反编译过后是个python2脚本,研究一下代码,
发现关键在于 len(sys.argv),上网查了一下,发现sys.argv表示命令行参数,
sys.argv[0]是代表当前所执行的脚本
sys.argv[1] 脚本第一个参数
所以len(sys.argv)<3 代表当前脚本的参数小于3。
若执行命令为python hello.py "111"
则len(sys.argv)==2,hello.py也是其中的一个参数
往下看可以发下,当sys.argv[1]也就是第二个参数a为 -d 时,执行decode(解码)操作,还少了一个参数,这时
想起还有个线索文件hint.txt,打开是一串字符串,复制下来就是第三个参数b,代码执行
什么都没有,再回到源代码,研究了一下,我最后把main函数上的判断改成这样,
把if判断下的都注释掉,再把return result[26:]提取出来,输出结果