题解
......
用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))