国赛ciscn2024-WP-re4-whereThel1b(动态调试Cpython的so文件)

看py题目发现主要是调用了trytry函数和whereistheflag函数!

whereThel1b.whereistheflag(flag)
ret = whereThel1b.trytry(flag)

动态调试发现whereThel1b.whereistheflag(flag)这个东西所输出的东西是随机无用的!

那么接下来就是使用ida动态调试trytry函数来看看加密逻辑了!
发现trytry的作用貌似是设置了随机数种子seed!
trytry - 》whereistheflag1,发现调用了whereistheflag1

感觉加密逻辑就在这里了!发现base64加密

这里生成了随机数!跟之前的随机数种子呼应!

这里应该是获取随机数!

这里进行了异或操作!,运行之后就会陷入下一个循环继续进行随机数获取和xor操作了!
然后就进行了返回操作whereistheflag1就结束了
很显然这道题的加密逻辑:

  1. 先设置随机数0
  2. 在进行base64加密
  3. 再通过随机数获取出keylist,在进行异或就算完整的加密过程了!、

先写个脚本测试一下,加密算法:

import whereThel1b
import base64

#flag1 = input("where is my flag:")
arrlist = []

encry = [108, 117, 72, 80, 64, 49, 99, 19, 69, 115, 94, 93, 94, 115, 71, 95, 84, 89, 56, 101, 70, 2, 84, 75, 127, 68, 103, 85, 105, 113, 80, 103, 95, 67, 81, 7, 113, 70, 47, 73, 92, 124, 93, 120, 104, 108, 106, 17, 80, 102, 101, 75, 93, 68, 121, 26]
def fun(flag):
    value = []
    whereThel1b.whereistheflag(flag)
    ret = whereThel1b.trytry(flag)
    
    tmp = base64.b64encode(flag)
    print(tmp)
    out = []
    for i in tmp:
        out.append(i)
    print("输入:",out)
    print("结果:",ret)
    temp = []
    for i in range(len(out)):
        temp.append(out[i]^ret[i])
    print("")
    arrlist.append(temp)

idx = 1
while idx < 7 :
    fun(b'f'*idx)
    idx += 1
print(arrlist)

idx = 1
for list1 in  arrlist:
    print(idx,list1)
    idx += 1


那么下面结果也就出来了!

解题py也就出来了!

import random
import base64

encry = [108, 117, 72, 80, 64, 49, 99, 19, 69, 115, 94, 93, 94, 115, 71, 95, 84, 89, 56, 101, 70, 2, 84, 75, 127, 68, 103, 85, 105, 113, 80, 103, 95, 67, 81, 7, 113, 70, 47, 73, 92, 124, 93, 120, 104, 108, 106, 17, 80, 102, 101, 75, 93, 68, 121, 26]
keylist = []
random.seed(0)
for ch in range(len(encry)):
    keylist.append(random.randint(0, len(encry)))
flag = []
for i in range(len(encry)):
    flag.append(keylist[i] ^ encry[i])

# 将 flag 转换为字符列表并连接成字符串
flag_str = ''.join(map(chr, flag))

# 将生成的字符串编码为字节
flag_bytes = flag_str.encode()

# 使用 Base64 解码字节并打印
decoded = base64.b64decode(flag_bytes)
print(decoded)
  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值