找到main函数
首先将输入的字符串放入函数中进行处理
__gmpz_init_set_str函数:将第二个元素按照第三个元素的进制转换然后存放在第一个元素的地址中
__gmpz_powm函数:用第二个数的第三个数次方模上第四个元素,然后将值保存在第一个数的地址(v6*v5modv4)
__gmpz_cmp函数:将v6与v7进行比较
这个函数将输入的将输入的字符串转化为ascii的十六进制的表示形式
一个整数一个余数你会发现这是把输入字符变成两个分开的十六进制存储起来,比如输入字符 ‘1’ ,它的整数是49,49除16的整数是3,余数是1,在byte_202010下标中分别对应3和1,构成的31就是字符 '1’的ASCII的十六进制形式,只不过是分开的十六进制,3 1 共两个字节。
编写脚本
from Crypto.Util.number import * from gmpy2 import invert e=65537 c=0xad939ff59f6e70bcbfad406f2494993757eee98b91bc244184a377520d06fc35 p=282164587459512124844245113950593348271 q=366669102002966856876605669837014229419 n=p*q phi=(p-1)*(q-1) d=invert(e,phi) flag=pow(c,d,n) print(bytes.fromhex(hex(flag)[2:]))