当前位置: 首页 > news >正文

[SUCTF2019]SignIn wp

检查无壳,是ELF文件
image

使用IDA打开
image

搜索__gmpz_init_set_str和__gmpz_powm函数怎么用
打开gmp_lib.mpz_init_set_str Method发现其实就是把中间的东西转为右边的相应进制并写入左边的变量
__gmpz_powm(v6, v6, v5, v4) 这个的意思其实就是 计算v6的v5次方并对v4取模,结果写入v6。
__gmpz_cmp,一看cmp就知道是比较v6,v7是否相等,搜索这个函数发现相等返回0,if(0)为假,进入else分支即:输出TTTTTTTT……表示正确,所以v7已知,
(v6 ** v5) mod v4 = v7
v4、v5、v7已知,求v6
使用yafu分解那个大数v4,因为大所以就是n,其分解可以得到p和q
factor(103461035900816914121390101299049044413950405173712170434161686539878160984549)

fac: factoring 103461035900816914121390101299049044413950405173712170434161686539878160984549
fac: using pretesting plan: normal
fac: no tune info: using qs/gnfs crossover of 95 digits

starting SIQS on c78: 103461035900816914121390101299049044413950405173712170434161686539878160984549

==== sieving in progress (1 thread): 36224 relations needed ====
==== Press ctrl-c to abort and save state ====

SIQS elapsed time = 0.6615 seconds.
Total factoring time = 0.6762 seconds

factors found

P39 = 366669102002966856876605669837014229419
P39 = 282164587459512124844245113950593348271

ans = 1
RSA 加密算法的数学原理:
加密:c≡m^e (modn)
解密:m≡c^d (modn)
其中 d 是 e 模 φ(n) 的乘法逆元,即 e⋅d≡1(modφ(n))。
这里 φ(n)=(p-1)(q-1),因为 n=p⋅q 且 p,q 均为素数。
只有知道 p 和 q 才能计算 φ(n),进而求出私钥 d。
然后用 d 对密文 c 进行模幂运算,就能恢复出明文 m。
EXP:
import gmpy2
n = 103461035900816914121390101299049044413950405173712170434161686539878160984549
p = 366669102002966856876605669837014229419
q = 282164587459512124844245113950593348271
e = 65537
c_hex = "ad939ff59f6e70bcbfad406f2494993757eee98b91bc244184a377520d06fc35"

将v7转为十进制

c = int(c_hex, 16)
phi = (p - 1) * (q - 1)

计算欧拉函数 φ(n),其中 n = p * q,p 和 q 是大素数。根据数论,φ(n) = (p-1)(q-1)。

d = gmpy2.invert(e, phi)

计算 e 关于模 φ(n) 的乘法逆元 d,即满足 (e * d) % φ(n) == 1。gmpy2.invert(e, phi) 返回这个逆元 d。

m = pow(c, d, n)
m_hex = hex(m)[2:]
if len(m_hex) % 2:
m_hex = '0' + m_hex
flag_bytes = bytes.fromhex(m_hex)
flag = flag_bytes.decode('utf-8')
print(flag)
pow(c, d, n)计算 c 的 d 次方再对 n 取模,即:
m=c^d (modn)

RSA 解密算法的核心步骤:
加密:c≡m^e (modn)(公钥 e,n)
解密:m≡c^d (modn)(私钥 d,n)
根据数论,当 d 满足 e⋅d≡1(modφ(n)) 时,(m^e )^d≡m(modn) 成立。因此,用私钥 d 对密文 c 进行模幂运算,就能恢复出原始明文 m。
if len(m_hex) % 2:
检查十六进制字符串的长度是否为奇数。因为每两个十六进制字符对应一个字节,奇数长度意味着缺少前导零,会导致后续转换失败。
m_hex = '0' + m_hex
如果长度为奇数,则在字符串开头补一个 '0',使其长度变为偶数。例如,"abc" 补成 "0abc",这样就能正确表示两个字节 0x0a 和 0xbc。
flag_bytes = bytes.fromhex(m_hex)
将补零后的十六进制字符串转换为字节对象(bytes)。例如,"48656c6c6f" → b'Hello'。
flag = flag_bytes.decode('utf-8')
将字节对象按 UTF-8 编码解码为字符串,得到最终的 flag 文本(如 "flag{...}")。
RSA 解密得到的明文整数 m 在转换为十六进制字符串时,如果最高有效字节的高 4 位为 0,Python 的 hex() 会省略这个前导零,导致字符串长度为奇数。补零是为了还原完整的字节表示,确保 bytes.fromhex 能正确解析。

http://www.jsqmd.com/news/656950/

相关文章:

  • 不踩雷不溢价!闪电喵星人联名鞋,Z世代穿搭刚需首选 - 中媒介
  • OpenCASCADE避坑指南:手把手教你从TopoDS_Shape提取三角网格,构建自己的BVH碰撞检测器
  • 深度解析:为什么Thorium浏览器是Chromium性能优化的终极选择
  • 避坑指南:STM32CubeMX配置GPIO驱动LED/蜂鸣器时,LL库与HAL库的关键区别与选择
  • 基于TDC-GPX的多通道高精度时间测量系统设计与激光雷达应用
  • 2026年3月门窗品牌推荐,铝门窗/安全门窗/慕莎尼奥门窗/断桥铝门窗/侧压平移推拉窗/门窗,门窗批发厂家推荐 - 品牌推荐师
  • 2026年美国投资移民中介排名及服务能力分析 - 品牌排行榜
  • 2026年康安倍泰秘语风花植物精华:植物力量守护女性私密健康 - 品牌排行榜
  • Zotero-GPT完全指南:3步打造你的AI文献研究助手
  • 别再只盯着主硬盘位!给联想老本加装固态,光驱位安装Win10的完整避坑指南
  • SpringBoot+MyBatis实战:手把手教你从零搭建一个企业级CRM系统(附完整源码)
  • reverse1 wp
  • 解锁Halcon性能潜力:从AOP自动并行到GPU加速的实战指南
  • Android 7.1车机蓝牙开发实战:如何修改源码将设备配置为音频接收端(Sink模式)
  • 别再瞎猜了!用Jellyfish和GenomeScope2.0,5步搞定你的物种基因组大小和杂合度估算
  • 从LVDS接口到Ultrascale SelectIO:IDDRE1与ODDRE1原语的实战仿真解析
  • VMware安装kali的常见问题及解决方案
  • Sora-2 Sora-2-pro 视频生成 API 对接指南(附 Python/Node.js 完整源码)
  • Smithbox终极指南:从零开始掌握魂系游戏修改的艺术
  • KITTI数据集IMU频率从10Hz升级到100Hz的保姆级操作指南(附百度云资源)
  • Spring Boot 整合 Apache Doris:从零构建实时数据服务接口
  • easyre wp
  • 免费开源PS Vita内容管理终极指南:如何用QCMA轻松管理你的掌机数据
  • 嵌入式裸机开发实战:四大软件架构选型指南
  • 数字孪生技术栈解析:数据采集的八种实战策略
  • 3步打造专属Windows 11:tiny11builder终极精简方案指南
  • Etcher 跨平台镜像烧录指南:从下载到实战(附常见问题解析)
  • Windows Precision Touchpad终极方案:为苹果触控板解锁原生级Windows体验
  • 【SITS2026官方认证专家亲授】:AI生成单元测试的5大落地陷阱与97.3%通过率实战框架
  • Zotero Reference:3分钟学会PDF文献参考文献自动提取的神器