buuctf——[ACTF新生赛2020]easyre && buuctf——[SUCTF2019]SignIn && buuctf——相册

[ACTF新生赛2020]easyre

在这里插入图片描述
upx,脱
在这里插入图片描述
第43行就可以知道我们输入的字符串就是flag
第48行for语句可以知道flag{}括号里的字符串长度为12
第50行v4=byte_402000[数组内的值-1]
v4=[42,70,39,34,78,44,34,40,73,63,43,64]
看byte_402000:
在这里插入图片描述
写脚本

v4 = [42,70,39,34,78,44,34,40,73,63,43,64]
string = chr(0x7E)+"}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)(" + chr(0x27) + '&%$# !"'
A=""

for i in v4:
    for k in range(1,len(string)):
        if i == ord(string[k]):
            A+=chr(k+1)

print ("flag{"+A+"}")

在这里插入图片描述

[SUCTF2019]SignIn

在这里插入图片描述
在这里插入图片描述
程序调用了 __gmpz_init_set_str 函数,搜索后知道这其实是一个 GNU 高精度算法库(GNU Multiple Precision Arithmetic Library)。

很显然这个函数的作用就是将 str 字符数组以 base 指定的进制解读成数值并写入 rop 所指向的内存。该程序通过调用这个函数来实现数据的初始化赋值。

之后调用的一个函数 __gmpz_powm 在文档中的定义是这样的:

void mpz_powm (mpz_t rop, const mpz_t base, const mpz_t exp, const mpz_t mod) [Function]
Set rop to base^exp mod mod.

该函数将计算 base 的 exp 次方,并对 mod 取模,最后将结果写入 rop 中。
这种计算与RSA中的加密过程如出一辙。
代码中的敏感字符串,显然就是RSA

C=ad939ff59f6e70bcbfad406f2494993757eee98b91bc244184a377520d06fc35
N=103461035900816914121390101299049044413950405173712170434161686539878160984549
E=65537
在线网站分解N得到p,q
在这里插入图片描述
在线网站
p=282164587459512124844245113950593348271
q=366669102002966856876605669837014229419
条件齐了,直接脚本解密

import gmpy2
import binascii

p = 282164587459512124844245113950593348271
q = 366669102002966856876605669837014229419
e = 65537
c = 0xad939ff59f6e70bcbfad406f2494993757eee98b91bc244184a377520d06fc35
n = p * q
d = gmpy2.invert(e, (p-1) * (q-1))
m = gmpy2.powmod(c, d, n)

print(binascii.unhexlify(hex(m)[2:]).decode(encoding="utf-8"))

flag{Pwn_@_hundred_years}

相册

apk文件,用jadx-gui打开
搜索mail在这里插入图片描述
在这里插入图片描述
查看调用sendMailByJavaMail的位置
在这里插入图片描述
在这里插入图片描述
MAILSERVER就是我们要的邮箱,右键跳到声明
在这里插入图片描述
进入NativeMethod,发现里面都是空的
在这里插入图片描述
MAILSERVER就是加载外部so文件中NativeMethod.m1m()函数所返回的值,再进行base64解密。因此我们只需要找到so文件中经过base64加密的字符串。
在这里插入图片描述

将文件解压找到libcore.so用ida打开
发现base64字符串
在这里插入图片描述
解密
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
flag{18218465125@163.com}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值