Seclab-----WriteUp

 

  • 密钥生成-不能再简答的RSA

在一次RSA密钥对生成中,假设p=473398607161,q=4511491,e=17 求解出d。
答案格式:flag{d}

根据这张表,其中e^{-1},表示 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:]提取出来,输出结果