#!/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. LeekCode解题记录

    昨天晚上有个LeekCode的比赛,两个半小时解五题,轻松解决前两题后,卡在第三题,还剩半小时时放弃,开始解第五题,解完但未验证通过,第四题只看了下题目. 排名第一的大佬只用了36分钟全部写完. 差距 ...

  2. 运用NodeJs环境并依赖第三方库,框架等实现网站前后端分离报错问题及处理方法

    运用NodeJs环境并依赖第三方库,框架等实现网站前后端分离报错问题及处理方法 问题一: SyntaxError: missing ) after argument list in .....\vie ...

  3. 裁剪nutch 8步骤

    裁剪nutch 8步骤

  4. UE4 C++ 代码编译方式

    Unreal 有一个非常酷的特性 —> 不必关闭编辑器就可以编译 C++ 更改! 有两种方法可以达到这个目的: 1.直接点击编辑器主工具栏中的 编译(Compile) 按钮. 2.在编辑器继续运 ...

  5. Java方法参数:

    一个方法不能修改一个基本数据类型的参数 一个方法可以改变一个对象参数的状态 一个方法不能实现让对象参数引用一个新的对象 案例1: 一个方法不能修改一个基本数据类型的参数 String a = &quo ...

  6. 谈谈IC、ASIC、SoC、MPU、MCU、CPU、GPU、DSP、FPGA、CPLD

    IC (integrated circuit) 集成电路:微电路.微芯片.芯片:集成电路又分成:模拟集成电路(线性电路).数字集成电路.数/模混合集成电路: 模拟集成电路:产生.放大.处理各种模拟信号 ...

  7. LeetCode111_求二叉树最小深度(二叉树问题)

    题目: Given a binary tree, find its minimum depth.The minimum depth is the number of nodes along the s ...

  8. java 嵌入式数据库H2

    H2作为一个嵌入型的数据库,它最大的好处就是可以嵌入到我们的Web应用中,和我们的Web应用绑定在一起,成为我们Web应用的一部分.下面来演示一下如何将H2数据库嵌入到我们的Web应用中. 一.搭建测 ...

  9. 使用idea构建Hibernate5项目

    使用工具:IntelliJ IDEA 2017.2.5 x64 MySql-8.0.1 hibernate-release-5.3.1.Final 导入的jar包: 以及连接MySql的jdbc包.和 ...

  10. pyinstaller打包py脚本Warning:lib not found等相关问题

    小爬从使用Pyinstaller打包py为exe文件以来,一直都会碰到Warning:lib not found等相关问题,诸如: 虽然大多数时候,您像我一样忽略这些warning,打包后的exe也能 ...