攻防世界-crypto-easychallenge(.pyc反编译)

摘要:
pyc是一种二进制文件,是由py文件经过编译后,生成的文件,是一种bytecode,py文件变成pyc文件后,运行加载的速度会有所提高;另一反面,把py文件编译为pyc文件,从而可以实现部分的源码隐藏,保证了python做商业化软件时的安全性用uncompyle6这个第三方python反编译器来进行反编译。uncompyle6是一个原生python的跨版本反编译器和fragment反编译器,是decompyle、uncompyle、uncompyle2等的接替者。因此对应的decode3函数应该是base64.b32decode()。

进入题目后下载附件,发现是一个.pyc文件。

pyc是一种二进制文件,是由py文件经过编译后,生成的文件,是一种byte code,py文件变成pyc文件后,运行加载的速度会有所提高;另一反面,把py文件编译为pyc文件,从而可以实现部分的源码隐藏,保证了python做商业化软件时的安全性

用uncompyle6这个第三方python反编译器来进行反编译。

uncompyle6是一个原生python的跨版本反编译器和fragment反编译器,是decompyle、uncompyle、uncompyle2等的接替者。

uncompyle6可将python字节码转换回等效的python源代码,它接受python 1.3版到3.8版的字节码,这其中跨越了24年的python版本,此外还包括Dropbox的Python 2.5字节码和一些PyPy字节码。

github项目:https://github.com/rocky/python-uncompyle6

pip install uncompyle6

uncompyle6 -o . test.pyc

攻防世界-crypto-easychallenge(.pyc反编译)第1张

得到py代码如下:

importbase64

defencode1(ans):
    s = ''
    for i inans:
        x = ord(i) ^ 36x = x + 25s +=chr(x)

    returns


defencode2(ans):
    s = ''
    for i inans:
        x = ord(i) + 36x = x ^ 36s +=chr(x)

    returns


defencode3(ans):
    returnbase64.b32encode(ans)


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

代码解析

encode1函数是把输入的字符串分割成单独的字符,先转换为ascii数值,再与36异或,然后+25,接着转回字符,最后拼接为新的字符串输出。

因此对应的decode1函数应该是先-25,再与36异或(异或的逆操作还是异或)。

encode2函数是把输入的字符串分割成单独的字符,先转换为ascii数值,再+36,然后与36异或,接着转回字符,最后拼接为新的字符串输出。

因此对应的decode2函数应该是先与36异或,再-36。

encode3函数是调用base64库里的b32encode()函数进行base32运算。

因此对应的decode3函数应该是base64.b32decode()。

下面是对应的解密代码

importbase64

defdecode1(ans):
    s = ''
    for i inans:
        x = ord(i) - 25x = x ^ 36s +=chr(x)

    returns


defdecode2(ans):
    s = ''
    for i inans:
        x = i^ 36x = x - 36s +=chr(x)

    returns


defdecode3(ans):
    returnbase64.b32decode(ans)


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

得到对应的flag为cyberpeace{interestinghhhhh}

参考:https://www.jianshu.com/p/aafdedcbab4f

免责声明:文章转载自《攻防世界-crypto-easychallenge(.pyc反编译)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇【Win10应用开发】自定义磁贴通知的排版《第一行代码》阅读笔记(二十五)——PermissionsDispatcher(补充)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

pyinstaller打包python源程序访问hive

1.需求   使用hvie server一段时间后,业务部门需要自己不定时的查询业务数据,之前这一块都是他们提需求我们来做,后来发现这样重复一样的工作放在我们这边做是在没有效率,遂提出给他们工具或者web UI自助查询,当然hive有自己的hwi可以通过网页UI进行自助查询,但是这对不懂sql的业务人员有点不太友好,目前有没时间去修改hwi的UI,所以还是...

python 调用 opencv 实现 图片文本倾斜校正

本项目为python项目需要安装python及python的opencv模块:opencv_python-4.0.1-cp37-cp37m-win32.whl 和 python的矩阵运算模块:numpy。        1、第一步,安装python3.7,具体安装步骤略。        2、第二步,使用pip安装python的矩阵运算模块:numpy。  ...

python调用摄像头

1.python实时调取本地摄像头 import numpy as np import cv2 cap = cv2.VideoCapture(0)    #参数为0时调用本地摄像头;url连接调取网络摄像头;文件地址获取本地视频 while(True): ret,frame=cap.read() #灰度化 gray=cv2.cvtColor(frame,...

第三方库requests详解

Requests 是用Python语言编写,基于 urllib,采用 Apache2 Licensed 开源协议的 HTTP 库。它比 urllib 更加方便,可以节约我们大量的工作,完全满足 HTTP 测试需求。Requests 的哲学是以 PEP 20 的习语为中心开发的,所以它比 urllib 更加 Pythoner。更重要的一点是它支持 Pytho...

Ansible主机清单Inventory文件hosts

Ansible主机清单Inventory文件hosts 发表于 2017-05-14 | 分类于 运维相关 , Ansible | | 阅读次数 4638| 字数统计 1,442 | 阅读时长预计 6 Ansible 通过读取默认的主机清单配置,可以同时连接到多个远程主机上执行任务组和主机之间的关系通过 inventory 文件配置. 默认的...

一个用python简单的封装了aria2的jsonrpc中adduri的脚本

aria2是一个十分牛逼的下载神器,有时候项目需要一个很牛逼的下载中间件的话,aria2是一个不错的选择。其中支持jsonrpc和websocket的特性尤其诱人。但是python用起来还是有点不爽,所以简单封装一下aria2的jsonrpc。 所以,用python简单的封装了aria2的jsonrpc中adduri的脚本。 使用起来非常简单,仅需要三行代...