Geek Challenge 2023 RE reserve 小黄鸭

19 篇文章 0 订阅
10 篇文章 0 订阅
文章讲述了如何通过IDA工具分析打包成EXE的Python程序,使用pyinstxtractor和uncompyle6进行反编译,揭示了Python字节码的加密过程,以及一个关于CTF挑战的线索解密过程。
摘要由CSDN通过智能技术生成

题解

......

用ida分析,查看字符串发现有大量pyXXXX的字符

那这就是用python写的打包成exe的程序

用pyinstxtractor工具进行python反编译,再用uncompyle6对pyc文件进行还原(也可以用在线工具python反编译 - 在线工具)

结果:

# uncompyle6 version 3.9.0
# Python bytecode version base 3.7.0 (3394)
# Decompiled from: Python 3.8.5 (tags/v3.8.5:580fbb0, Jul 20 2020, 15:57:54) [MSC v.1924 64 bit (AMD64)]
# Embedded file name: 1.py
import sys
arr = '~h|p4gs`gJdN`thPwR`jDn`te1w`2|RNH'
arr = list(arr)
print('快帮帮小黄鸭,找到它的钥匙')
a = input('请输入你找到的钥匙>:')
a = list(a)
if not ord(a[0]) != 83:
    if ord(a[1]) != 89 or ord(a[2]) != 67:
        print('不对喔~')
        sys.exit(0)
    a = a[::-1]
    b = []
    for i in range(len(a)):
        if a[i].isalpha():
            c = a[i]
            c = chr(ord(c) + 13 - 26 if ord(c) + 13 > (90 if c <= 'Z' else 122) else ord(c) + 13)
            b.append(chr(ord(c) + 2))
        else:
            b.append(chr(ord(a[i]) + 1))

    if chr(ord(a[1])) != 's' or ord(a[2]) != 109 or chr(ord(a[17])) != 'C':
        print('呀呀呀,怎么算出来不对呀?')
        sys.exit(0)
    cnt = 0
    for i in range(len(b)):
        if arr[i] == b[i]:
            cnt += 1

    if cnt == len(b):
        print('密码正确啦!!!,快去告诉小黄鸭吧~')
else:
    print('密码不对喔~,请再想想吧')

对这段python代码分析

对输入的数据进行进行运算,是字母就rot13再加2,不是就加1,再与arr比较,相同就是flag了

注意它逆转了一下

脚本:

d='~h|p4gs`gJdN`thPwR`jDn`te1w`2|RNH'
flag=''
for i in range(len(d)):
    if d[i].isalpha():
        c=chr(ord(d[i])-2)
        flag+=chr(ord(c) + 13 - 26 if ord(c) + 13 > (90 if c <= 'Z' else 122) else ord(c) + 13)

    else:
        flag+=chr(ord(d[i])-1)
print(flag[::-1])

SYC{1_h0pe_yOu_ChAse_YoUr_dr3a{s}

可以是我菜,倒数第二个字符没有正确输出,但根据这行代码可以确定是m,也可以根据flag这句话推这个单词是dream

SYC{1_h0pe_yOu_ChAse_YoUr_dr3ams}

结语:

dream 没有dream和闲鱼有什么区别

(本人是菜鸟,想找对CTF感兴趣的CTFer,一起交流学习,共同进步,迈向星辰大海!!!!^_^(有兴趣的加扣群:470196890))

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值