攻防世界 re 新手模式 Signln

 本次re主要考察了关于RSA加密的识别

先alt+f12看看字符串

点进input your flag处按x查看引用的函数

看到其实就是主函数

这个主函数比较简略

输入flag在sub_96A中对flag进行处理

这里a2+I=byte_202010[a1[v3]>>4]之中,>>右移运算符其实就是除法,也就是a1[v3]除以16后剩余的整数部分,而在(a2 + i + 1LL) = byte_202010[a1[v3++] & 0xF]中的a1[v3++]& 0xF,就是a1[v3++]mod16,所以这个函数的工作就是把输入的字符变成两个分开的十六进制存储,也就是说如果输入“0”,转换成ascll值就是48,除以16就是3,取模为0,在byte_202010,中对应就是3和0,而3和0组成的30就是“0”的ascll值的十六进制,所以这个函数就是转化成十六进制并转化成字符串,也就是说这个函数不用管。

回到主函数中出现多个__gmpz_init_set_str函数

查询得知,该函数引用了GNU 高精度算法库

__gmpz_init_set_str的作用就是把第二个参数指定的字符串按第三个参数设定的进制解读成数值并放入第一个参数所指定的内存中;

__gmpz_powm的作用是计算第二个参数的第三个参数的次方然后对第四个参数取模,放入第一个参数中

__gmpz_cmp就是个比较函数

这里最主要的就是__gmpz_powm,类似于RSA加密,需要利用RSA解密的方法求解flag

RSA算法如图

其中e就是v5,C是v7,n是v4

此时我们需要求出p,q,可以利用大数分解网站

这里可以得出p,q

然后编写解密脚本

即可得出答案

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值