首页 > 其他分享 >Crypto_XCTF_WriteUp | easychallenge

Crypto_XCTF_WriteUp | easychallenge

时间:2023-11-18 09:55:36浏览次数:34  
标签:return easychallenge WriteUp base64 Crypto 36 flag ans def

题目

一个 pyc 文件(……不知道怎么形容

分析

用 txt 格式打开是一串半人半鱼的……一串夹着一点点编程语言的乱码,必应了一下是 python 运行后生成的字节码文件。

直接运行出现报错:

提示 pyc 文件中的 magic number 错误,可能是 python 版本不匹配或者文件损坏导致。于是安装 uncompyle(之前安装了一部分报错,下图最后的一部分),对文件进行反编译查看源代码:

得到的 py 文件:

# uncompyle6 version 3.9.0
# Python bytecode version base 2.7 (62211)
# Decompiled from: Python 3.10.9 | packaged by Anaconda, Inc. | (main, Mar  1 2023, 18:18:15) [MSC v.1916 64 bit (AMD64)]
# Embedded file name: ans.py
# Compiled at: 2018-08-09 11:29:44
import base64

def encode1(ans):
    s = ''
    for i in ans:
        x = ord(i) ^ 36
        x = x + 25
        s += chr(x)

    return s


def encode2(ans):
    s = ''
    for i in ans:
        x = ord(i) + 36
        x = x ^ 36
        s += chr(x)

    return s


def encode3(ans):
    return base64.b32encode(ans)


flag = ' '
print 'Please Input your flag:'
flag = raw_input()
final = 'UC7KOWVXWVNKNIC2XCXKHKK2W5NLBKNOUOSK3LNNVWW3E==='
if encode3(encode2(encode1(flag))) == final:
    print 'correct'
else:
    print 'wrong'

可以看到输入的 flag 经过三次加密后再与 UC7KOWVXWVNKNIC2XCXKHKK2W5NLBKNOUOSK3LNNVWW3E=== 比较,若相同则通过。
根据反编译出的代码,我们逆着加密步骤写出 python3 版本的解密算法:

import base64


def decode3(s):
    return base64.b32decode(s)


def decode2(s):
    ans = ''
    for i in s:
        ans += chr((i ^ 36) - 36)
    return ans


def decode1(s):
    ans = ''
    for i in s:
        ans += chr((ord(i) - 25) ^ 36)
    return ans


print(decode1(decode2(decode3('UC7KOWVXWVNKNIC2XCXKHKK2W5NLBKNOUOSK3LNNVWW3E==='))))

运行即可得到 flag。

Flag

cyberpeace{interestinghhhhh}

参考

pyc文件究竟是用来干什么的?-Ejasmine-CSDN
bad magic number in .pyc file-CSDN文库
如何反编译pyc文件查看源代码-偷一个月亮-CSDN
Python 基础教程-菜鸟教程
base64(Internet Data)-Python中文开发手册-开发者手册-腾讯云开发者社区-腾讯云
python3遇到的"ord() expected string of length 1, but int found"问题-thinszx-CSDN
Python base64.b32decode()用法及代码示例-纯净天空

标签:return,easychallenge,WriteUp,base64,Crypto,36,flag,ans,def
From: https://www.cnblogs.com/Guanz/p/17839958.html

相关文章

  • Crypto_XCTF_WriteUp | 轮转机加密
    题目提示:你俩继续往前走,来到了前面的下一个关卡,这个铺面墙上写了好多奇奇怪怪的英文字母,排列的的整整齐齐,店面前面还有一个大大的类似于土耳其旋转烤肉的架子,上面一圈圈的也刻着很多英文字母,你是一个小历史迷,对于二战时候的历史刚好特别熟悉,一拍大腿:“嗨呀!我知道是什么东西了......
  • “技能兴鲁”职业技能大赛-网络安全赛项-学生组初赛 Crypto WP
    babyRSA查看代码fromgmpy2import*fromCrypto.Util.numberimport*flag='flag{I\'mnotgonnatellyoutheFLAG}'#这个肯定不是FLAG了,不要交这个咯p=getPrime(2048)q=getPrime(2048)m1=bytes_to_long(bytes(flag.encode()))e1=3247473589e2......
  • Crypto_BUUCTF_WriteUp | 还原大师
    题目我们得到了一串神秘字符串:TASC?O3RJMV?WDJKX?ZM,问号部分是未知大写字母,为了确定这个神秘字符串,我们通过了其他途径获得了这个字串的32位MD5码。但是我们获得它的32位MD5码也是残缺不全,E903???4DAB????08?????51?80??8A?,请猜出神秘字符串的原本模样,并且提交这个字串的32位MD......
  • cryptography hash 算法使用
    安装pipinstallcryptography使用方法fromcryptography.hazmat.primitivesimporthashesdigest=hashes.Hash(hashes.SHA256())#digest=hashes.Hash(hashes.SHA3_256())#digest=hashes.Hash(hashes.SM3())digest.update(b"abc")print(digest.finalize())......
  • Buuctf-Crypto-之深夜刷题部分wp
    萌萌哒的八戒首先下载好附件,解压,是一幅猪图,图的下方是一串看不懂的字,百度输入关键词猪、密码,可知这是猪圈密码,手撸得WHENTHEPIGWANTTOEAT大写不对,换成小写。whenthepigwanttoeat传统知识+古典密码首先下载好附件,解压:小明某一天收到一封密信,信中写了几个不同的年份辛卯,癸巳......
  • Web_XCTF_WriteUp | pure_color
    题目分析给了个纯白png图片,看来是图片隐写题。按照隐写题的解题思路,依次进行了:打开图片属性寻找flag:未果用010Editor打开文件代码寻找flag及查看文件的开头/结束标志:没有找到flag,标志也分别是png文件的开头/结束标志,没有异常因为这两天重装了虚拟机,所以先用......
  • Web_BUUCTF_WriteUp | [ACTF2020 新生赛]Include
    题目分析F12打开查看器,只有一个php文件,URL为http://9862c108-f9d1-4746-aeb0-848c1e0d8147.node4.buuoj.cn:81点tips看看,啥也妹有,URL为http://9862c108-f9d1-4746-aeb0-848c1e0d8147.node4.buuoj.cn:81/?file=flag.php完全没有头绪……又能学新东西了!找到一篇大......
  • buuctf——crypto(1-20)
    1.发现是bese加密,直接使用在线工具解开2.MD5加密,直接使用在线工具解开3.url加密,直接使用在线工具解开4.使用ctf工具随波逐流乱杀。乱杀5.摩斯密码,直接ctf工具随波逐流乱杀6.根据提示,张三的缩写,加上生日刚好满足flag的格式7.凯撒变异密码,使用脚本直接弄出来了8.看到太熟悉了......
  • Web_BUUCTF_WriteUp | Havefun
    题目分析用鼠标划了半天,好像不能撸(F12打开控制台,在查看器里看到一条PHP注释$cat=$_GET['cat'];echo$cat;if($cat=='dog'){echo'Syc{cat_cat_cat_cat}';}分析一下注释:$cat=$_GET['cat'];:变量cat获得变量_GET收集的来自method="get"的表单中的值。e......
  • 2023强网拟态crypto-一眼看出
    1、题目信息一眼看穿查看代码 fromCrypto.Util.numberimport*fromsecretimportflagimportgmpy2flag=b''r=getPrime(6)a=1100124079130849656541177384550975435259748146428827269932523139547213714461077464537281214967514136060046964049287422354......