#!/usr/bin/env python
# -*- coding:utf-8 -*-
from hashlib import sha256
def xor(a,b):
result = []
for (i, j) in zip(a, b):
result.append(chr(ord(i) ^ ord(j)))
return "".join(result)
def HASH(msg):
return sha256(msg).digest()[:8]
def zjctf_encrypt(gen_keys, hahahah):
i = 0
d1 = hahahah[:8]
d2 = hahahah[8:]
for i in gen_keys:
d1 = xor(xor(HASH(d2),i),d1)
d1, d2 = d2, d1
return d2 + d1
def gen_keymap(key):
maps = []
_ = key
for i in range(16):
_ = HASH(_)
maps.append(_)
return maps
def encrypt(key, data):
keys = gen_keymap(key)
return zjctf_encrypt(keys, data).encode('hex')
if __name__ == "__main__":
result = encrypt("zzzzzjctffffffff", "This_is_the_flag")
print(result)
# your result = 1b3a0152bef25769f384a740aa189e78

做题提示是利用xor解决,下载下来发现是一个py文件。

首先把 "zzzzzjctffffffff", "This_is_the_flag" 这俩参数传进 encrypt()中,

gen_keymap() 对  "zzzzzjctffffffff" 进行 HASH 处理 返回一个maps

zjctf_encrypt() 把这个maps与 "This_is_the_flag"  进行切片和异或 返回d2+d1 并输出

解密代码如下:

 from hashlib import sha256
def xor(a,b):
result = []
for (i, j) in zip(a, b):
result.append(chr(ord(i) ^ ord(j)))
return "".join(result)
def HASH(msg):
return sha256(msg).digest()[:8]
def zjctf_encrypt(gen_keys, hahahah):
i = 0
d1 = hahahah[:8]
d2 = hahahah[8:]
d1, d2 = d2, d1
for i in gen_keys:
d2= xor(xor(HASH(d1),d2),i)
d1, d2 = d2, d1
return d1+d2
def gen_keymap(key):
maps = []
_ = key
for i in xrange(16):
_ = HASH(_)
maps.append(_)
maps.reverse()
return maps
def encrypt(key, data):
keys = gen_keymap(key)
return zjctf_encrypt(keys, data) key="zzzzzjctffffffff"
result = '1b3a0152bef25769f384a740aa189e78'
result=result.decode('hex')
print encrypt(key, result)

这题考察的不仅是python的语法,还考察了对hashlib库的使用,加密算法的了解。

ZJCTF预赛一个.py的逆向题的更多相关文章

  1. z3 巧解CTF逆向题

    z3 巧解逆向题 题目下载链接:http://reversing.kr/download.php?n=7 这次实验的题目为Reversing.kr网站中的一道题目. 题目要求: ReversingKr ...

  2. 社团的CTF逆向题WriteUp

    最近社团弄了CTF比赛,然后我就帮忙写了逆向的题目,这里写一下WriteUp,题目和源码在附件中给出 一个简单的逆向:one_jmp_to_flag.exe 这题算是签到题,直接OD智能搜索就完事了, ...

  3. [BZOJ 2759] 一个动态树好题

    [BZOJ 2759] 一个动态树好题 题目描述 首先这是个基环树. 然后根节点一定会连出去一条非树边.通过一个环就可以解除根的答案,然后其他节点的答案就可以由根解出来. 因为要修改\(p_i\),所 ...

  4. BZOJ2759: 一个动态树好题

    BZOJ2759: 一个动态树好题 Description 有N个未知数x[1..n]和N个等式组成的同余方程组:x[i]=k[i]*x[p[i]]+b[i] mod 10007其中,k[i],b[i ...

  5. PyCharm在同一个包(package)下,如何把一个.py文件导入另外一个.py文件下

    PyCharm在同一个包(package)下,如何把一个.py文件导入另外一个.py文件下 在同一个包下只需要用import 掉以后就可以找到模块所在的位置,但是如果不在同一个包下,在需要返回父级调用 ...

  6. 什么是函数,干嘛啊,怎么干。一个py程序员的视角.md

    目录 前言 本质 math definition py definition class 是类,是对象的蓝本 回到函数 一个结论 self 是什么? 以上就是py世界里函数的定义 什么是函数,干嘛啊, ...

  7. Python(一) 快速配置Python编译环境与第一个py文件程序

    1. Python基本语法在此不熬述. 2. 到管网下载Python 3.6.x 版本,与本机匹配的版本,如本机是 win7 64 python-3.6.5-amd64 3. 下载IDE:Python ...

  8. Conda安装及第一个py程序

    Conda安装及第一个py程序 安装Conda 下载安装 在Anaconda官网下载Anaconda 打开Conda安装程序 设置好安装目录(这个一定要记好,后边要用),比如我的目录就是 D:\Pro ...

  9. RobotFramework中加载自定义python包中的library(一个py文件中有多个类)

    结构如下: appsdk\ appsdk.py(这里面有多个类,包括appsdk,appsdksync等类) __init__.py ... ① 有个appsdk的文件夹(符合python包的定义) ...

随机推荐

  1. 手机网页H5 自适应不同分辨率的屏幕 必学标签meta之viewport

    viewport 语法介绍 <meta name="viewport"content=" height = [pixel_value | device-height ...

  2. CodeForces 906D (欧拉降幂)

    Power Tower •题意 求$w_{l}^{w_{l+1}^{w_{l+2}^{w_{l+3}^{w_{l+4}^{w_{l+5}^{...^{w_{r}}}}}}}}$ 对m取模的值 •思路 ...

  3. python3 实现删除数组中相同的元素

    # #把数组中相同的元素去除 # #第一种方式: def del_repeatnum(s=[1,1,1,2,2,3,3,4]): s1=[] for i in s: print(i) if i not ...

  4. NOIP2009 压轴---最优贸易

    链接:https://ac.nowcoder.com/acm/contest/959/H来源:牛客网 C国有n个大城市和m条道路,每条道路连接这n个城市中的某两个城市.任意两个城市之间最多只有一条道路 ...

  5. 010 Ceph RGW对象存储

    一.对象存储 1.1 介绍 通过对象存储,将数据存储为对象,每个对象除了包含数据,还包含数据自身的元数据 对象通过Object ID来检索,无法通过普通文件系统操作来直接访问对象,只能通过API来访问 ...

  6. JavaScript之DOM操作,事件操作,节点操作

    1,DOM操作 1.1  概念 所谓DOM,全称Document Object Model 文档对象模型,DOM是W3C(World Wide Web Consortuum )标准,同时也定义了访问诸 ...

  7. 【题解】毒蛇越狱(FWT+容斥)

    [题解]毒蛇越狱(FWT+容斥) 问了一下大家咋做也没听懂,按兵不动没去看题解,虽然已经晓得复杂度了....最后感觉也不难 用FWT_OR和FWT_AND做一半分别求出超集和和子集和,然后 枚举问号是 ...

  8. Python 打包的现状:包的三种类型

    英文 | The state of Python Packaging[1] 原作 | BERNAT GABOR 译者 | 豌豆花下猫 声明 :本文获得原作者授权翻译,转载请保留原文出处,请勿用于商业或 ...

  9. Linux下自动化部署ASP.NET CORE 3.1(Docker+Jenkins+Nginx)

    1.先配置好Docker阿里云加速,可以使用阿里云容器服务 (可自己在阿里云申请,要不然安装东西直接很慢)注意:https://XXXX.mirror.aliyuncs.com为阿里云加速服务分配地址 ...

  10. 基于Tesseract的OCR识别小程序

    一.背景 先说下开发背景,今年有次搬家找房子(2020了应该叫去年了),发现每天都要对着各种租房广告打很多电话.(当然网上也找了实地也找),每次基本都是对着墙面看电话号码然后拨打,次数一多就感觉非常麻 ...