前言:

  这题跟python有关,可见看懂python代码还是很有必要得,需要有一些python基础才好

easychallenge:

 题目: 下载后来发现是一个.pyc为后缀得文件,查找资料可知,该文件为python编译后得文件,所以我们第一步应该是反编译,将其转成py文件

我们使用python得uncompyle6库来进行反编译,安装出错或者太慢试试这个,

 pip install -i https://pypi.doubanio.com/simple/ 包名

下面给出如何使用得命令

uncompyle6  -o  F:\桌面\  F:\桌面\tmp\1.pyc

然后将反编译后得py文件内容给出:

 1 # uncompyle6 version 3.7.3
2 # Python bytecode 2.7 (62211)
3 # Decompiled from: Python 3.8.5 (tags/v3.8.5:580fbb0, Jul 20 2020, 15:43:08) [MSC v.1926 32 bit (Intel)]
4 # Embedded file name: ans.py
5 # Compiled at: 2018-08-09 11:29:44
6 import base64
7
8 def encode1(ans):
9 s = ''
10 for i in ans:
11 x = ord(i) ^ 36
12 x = x + 25
13 s += chr(x)
14
15 return s
16
17
18 def encode2(ans):
19 s = ''
20 for i in ans:
21 x = ord(i) + 36
22 x = x ^ 36
23 s += chr(x)
24
25 return s
26
27
28 def encode3(ans):
29 return base64.b32encode(ans)
30
31
32 flag = ' '
33 print 'Please Input your flag:'
34 flag = raw_input()
35 final = 'UC7KOWVXWVNKNIC2XCXKHKK2W5NLBKNOUOSK3LNNVWW3E==='
36 if encode3(encode2(encode1(flag))) == final:
37 print 'correct'
38 else:
39 print 'wrong'

可以看到通过该py文件加密后得final是 UC7KOWVXWVNKNIC2XCXKHKK2W5NLBKNOUOSK3LNNVWW3E===  ,然后我们修改一下encode3 encode2 encode1,将其改成decode1 decode2 decode3,

下面给出代码:

 1 # uncompyle6 version 3.7.3
2 # Python bytecode 2.7 (62211)
3 # Decompiled from: Python 3.8.5 (tags/v3.8.5:580fbb0, Jul 20 2020, 15:43:08) [MSC v.1926 32 bit (Intel)]
4 # Embedded file name: ans.py
5 # Compiled at: 2018-08-09 11:29:44
6 import base64
7
8 def decode3(ans):
9 s = ''
10 for i in ans:
11 # x = ord(i) ^ 36
12 # x = x + 25
13
14 x = ord(i) -25
15 x = x ^ 36
16 s += chr(x)
17
18 return s
19
20
21 def decode2(ans):
22 s = ''
23 for i in ans:
24 # x = ord(i) + 36
25 # x = x ^ 36
26
27 x = i ^ 36
28 x = x - 36
29 s += chr(x)
30
31 return s
32
33
34 def decode1(ans):
35 return base64.b32decode(ans)
36
37
38 final = b'UC7KOWVXWVNKNIC2XCXKHKK2W5NLBKNOUOSK3LNNVWW3E==='
39 print(decode3(decode2(decode1(final))))

反向即可解码

参考链接:

https://www.runoob.com/python3/python3-func-ord.html

Crypto入门 (十一)easychallenge的更多相关文章

  1. C#基础入门 十一

    C#基础入门 十一 复选框 复选框的应用--问卷调查 实现描述:通过问卷调查统计性别和下班后回家的方式,单击"提交"按钮,通过消息框显示所提交的信息.运行结果如下图所示(图27): ...

  2. Crypto++入门学习笔记(DES、AES、RSA、SHA-256)(加解密)

    转自http://www.cppblog.com/ArthasLee/archive/2010/12/01/135186.html 最近,基于某些原因和需要,笔者需要去了解一下Crypto++库,然后 ...

  3. Crypto++入门学习笔记(DES、AES、RSA、SHA-256)

    最先附上 下载地址 背景(只是个人感想,技术上不对后面的内容构成知识性障碍,可以skip): 最近,基于某些原因和需要,笔者需要去了解一下Crypto++库,然后对一些数据进行一些加密解密的操作. 笔 ...

  4. ES6入门十一:Generator生成器、async+await、Promisify

    生成器的基本使用 生成器 + Promise async+await Promise化之Promisify工具方法 一.生成器的基本使用 在介绍生成器的使用之前,可以简单理解生成器实质上生成的就是一个 ...

  5. SpringCloud入门(十一):Sleuth 与 Zipkin分布式链路跟踪

    现今业界分布式服务跟踪的理论基础主要来自于 Google 的一篇论文<Dapper, a Large-Scale Distributed Systems Tracing Infrastructu ...

  6. Android入门(十一)SQLite CURD

    原文链接:http://www.orlion.ga/594/ 一.添加数据 SQLiteOpenHelper的getReadableDatabase()或getWritableDatabase()方法 ...

  7. HTML5入门十一---Canvas画布实现画图(二)

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  8. Hibernate入门(十一)多对多案例

    Hibernate多对多案例 1.用户对角色 DROP TABLE IF EXISTS emp_role; DROP TABLE IF EXISTS employee; DROP TABLE IF E ...

  9. SpringBoot入门 (十一) 数据校验

    本文记录学习在SpringBoot中做数据校验. 一 什么是数据校验 数据校验就是在应用程序中,对输入进来得数据做语义分析判断,阻挡不符合规则得数据,放行符合规则得数据,以确保被保存得数据符合我们得数 ...

  10. 设计模式之装饰器模式io的小入门(十一)

    装饰器模式详解地址 原文总结 定义: 在不必改变原类文件和使用继承的情况下, 动态的扩展一个对象的功能. 通过创建一个包装对象, 也就是装饰来包裹真实的对象 部分详解提示 看了一些文档, 装饰器模式非 ...

随机推荐

  1. python获取当前运行函数名

    两种方式: #!/usr/bin/env python3#coding:utf-8 import sys, inspectdef test_a(): print('func name: ', sys. ...

  2. docker-compose 搭建 redis 集群

    准备配置文件 bind 0.0.0.0 # redis端口 port ${PORT} requirepass redispwd # 关闭保护模式 protected-mode no # 开启集群 cl ...

  3. 指针和指针运算符一起时的运算规则(比如*p++和*++p的区别)

    接下来,通过示例彻底理解自增运算符的两种用法(自减的用法与之类似,只不过是加1变成了减1). 1.++i和i++的区别 如清单1(注意代码中的注释): #include <stdio.h> ...

  4. Dynamics 365 CRM 弹窗 打开自定义页面 Xrm.Navigation.navigateTo Open Web Resource

    在CRM中经常需要打开自定义的HTML界面,而且打开这个界面的时候需要模态窗体,阻止用户填写除了弹窗之外的东西,只能先填写窗体的内容: 这个时候很多人喜欢选择第三方的library去实现模态窗体,但是 ...

  5. 解决 django channel: zadd() got an unexpected keyword argument 'daphne.response.HzSXMUhzYL!QSfUgrDObf'

    在stackoverflow上找到答案 If you are using Redis version 3.0 or above, it will not work with channels vers ...

  6. 安全漏洞之grafana-cve_2021_43798

    漏洞说明 一个可绕过用户登录进行任意文件读取的漏洞 环境搭建 我使用的是vulfocus提供的vulfocus/grafana-cve_2021_43798 ,由vulfocus后台统一管理 利用脚本 ...

  7. Linux - 查看、修改、更新系统时间(自动同步网络时间)

    系统:Centos7 1.查看系统时间 执行 date 命令可以查看当前系统的时间: 执行 hwclock 命令可以查看当前系统的时间 2.手动修改系统时间 (1)执行如下命令可以设置一个新的系统时间 ...

  8. 软件离线许可(License)实现原理

    我们经常使用各种开发软件,比如IntelliJ IDEA.Navicat.Visual Studio等,这些软件都有一个特点,就是要收费.一般是我们需要去购买一个许可,然后输入这个许可到软件里就能够使 ...

  9. 实现MybatisPlus乐观锁

    1.实体类中添加version字段及相关注解 @Version@TableField(fill = FieldFill.INSERT)//第一次添加数据时使其有个默认值1private Integer ...

  10. Django 之 Form

    forms组件 1. 校验字段功能 针对一个实例:注册用户讲解. 模型:models.py class UserInfo(models.Model): name=models.CharField(ma ...