[ACTF新生赛2020]easyre&[SUCTF2019]SignIn


前言

本文主要记录[ACTF新生赛2020]easyre、[SUCTF2019]SignIn的做题过程和相关思路

[ACTF新生赛2020]easyre

首先下载得到一个tar包,解压后得到easyre.exe,查壳,发现有UPX壳

在这里插入图片描述

使用OD手工脱壳,利用ESP堆栈平衡下硬件断点找到OEP,dump下来,并将脱壳后的文件用32位IDA打开,发现明显多了很多函数

在这里插入图片描述

进入到main函数,发现用到了一个byte_402000数组

在这里插入图片描述

点击查看数组的元素注意别把7E漏了

在这里插入图片描述

而flag中元素的ASCII值减一就是v4中的元素在byte_402000数组中的下标(所以在逆向的时候要进行加一),直接写脚本

v4 = "*F'\"N,\"(I?+@"
byte_402000 = '~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)(\'&%$# !"'
x = ""
idx = []
for c in v4:
    for i in range(len(byte_402000)):
        if c == byte_402000[i]:
            idx.append(i)  # 先找到对应元素的下标
for n in idx:
    x += chr(n + 1) 
print(x)  # U9X_1S_W6@T?

[SUCTF2019]SignIn

首先查壳,无壳,且为64位ELF文件

在这里插入图片描述

用对应IDA打开,查找字符串,发现有一句'TTTTTTTTTTql!',查看引用,进入主函数

在这里插入图片描述

发现在主函数中还调用了一个子函数sub_96A,作用是将字符串转为对应的十六进制字符串

在这里插入图片描述

接着看看main函数中用到的三个函数
__gmpz_init_set_str

在这里插入图片描述

__gmpz_powm

在这里插入图片描述

__gmpz_cmp

在这里插入图片描述

其实可以理解为是RSA算法

在这里插入图片描述

把v7理解为密文,v6为明文,v5为公钥,v4为模,套上加密公式,即

v7 = (v6 ^ v5) mod v4

现在已知密文,求明文,利用解密公式,即

v6 = (v7 ^ x) mod v4

x就是目标,其实也就是私钥,私钥与选取的两个质数p、q有关,而p*q=v4,问题的关键是能否从v4中分离出p、q,这里使用yafu工具进行质数分解

在这里插入图片描述

得到p、q后,先计算出公私钥供共有的部分N=p*q,接着根据欧拉公式计算出T=(p-1)*(q-1),同时又拥有公钥E,即通过模逆运算可以计算出私钥D,使用gmpy2来进行模逆运算

import gmpy2

p = 282164587459512124844245113950593348271
q = 366669102002966856876605669837014229419
c = 0xad939ff59f6e70bcbfad406f2494993757eee98b91bc244184a377520d06fc35
E = 65537
N = p * q
T = (p - 1) * (q - 1)

D = int(gmpy2.invert(E, T))
m = gmpy2.powmod(c, D, N)
hex_m = str(hex(m)[2:])  # 去掉'0x'
byte_value = bytes.fromhex(hex_m)
flag = byte_value.decode('utf-8')
print(flag)  # suctf{Pwn_@_hundred_years}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值