Bugku 加密 python writeup


一上来就给了两个文件,一个是加密的源代码,一个是加密过程文件,


challenge.py

                                                                N1ES.py

N1ES.py里一共有四个函数,一个类,类里含有两个函数,除了最后一个encrypt函数外其他函数都是在对key进行运算,然后通过key来对flag进行加密,所以我直接跑了一下程序,获得了key加密后的数据,然后只对encrypt函数进行逆向
解密脚本:

Kn=[[‘~‘, ‘w‘, ‘Y‘, ‘k‘, ‘k‘, ‘\x02‘, ‘\x05‘, ‘\x05‘],[‘w‘, ‘d‘, ‘}‘, ‘\x14‘, ‘?‘, ‘\x13‘, ‘\x04‘, ‘W‘],[‘l‘, ‘6‘, ‘\x08‘, ‘\x04‘, ‘\x13‘, ‘3‘, ‘\x19‘, ‘\x10‘],[‘\x08‘, ‘P‘, ‘2‘, ‘\x02‘, ‘/‘, ‘W‘, ‘/‘, ‘W‘],[‘\x08‘, ‘\x14‘, ‘?‘, ‘@‘, ‘W‘, ‘^‘, ‘ ‘, ‘k‘],[‘\x1b‘, ‘6‘, ‘^‘, ‘(‘, ‘M‘, ‘Y‘, ‘\x19‘, ‘\x02‘],[‘3‘, ‘f‘, ‘w‘, ‘(‘, ‘\x13‘, ‘}‘, ‘\x08‘, ‘u‘],[‘=‘, ‘_‘, ‘\x13‘, ‘M‘, ‘2‘, ‘=‘, ‘@‘, ‘\x04‘],[‘z‘, ‘_‘, ‘~‘, ‘\x08‘, ‘L‘, ‘f‘, ‘\x19‘, ‘z‘],[‘I‘, ‘Y‘, ‘\x01‘, ‘}‘, ‘/‘, ‘}‘, ‘L‘, ‘o‘],[‘\x19‘, ‘\x05‘, ‘3‘, ‘\x01‘, ‘z‘, ‘w‘, ‘~‘, ‘?‘],[‘L‘, ‘B‘, ‘~‘, ‘\x13‘, ‘@‘, ‘6‘, ‘@‘, ‘\x05‘],[‘\x08‘, ‘d‘, ‘\x13‘, ‘L‘, ‘^‘, ‘?‘, ‘L‘, ‘u‘],[‘\x05‘, ‘{‘, ‘M‘, ‘P‘, ‘M‘, ‘\n‘, ‘z‘, ‘P‘],[‘k‘, ‘~‘, ‘k‘, ‘/‘, ‘o‘, ‘u‘, ‘\x19‘, ‘\x04‘],[‘o‘, ‘k‘, ‘(‘, ‘\x13‘, ‘I‘, ‘f‘, ‘ ‘, ‘=‘],[‘~‘, ‘\x04‘, ‘\x08‘, ‘^‘, ‘\x02‘, ‘\n‘, ‘6‘, ‘3‘],[‘/‘, ‘\x05‘, ‘w‘, ‘2‘, ‘ ‘, ‘d‘, ‘\x13‘, ‘6‘],[‘ ‘, ‘/‘, ‘}‘, ‘?‘, ‘\x04‘, ‘}‘, ‘z‘, ‘\x19‘],[‘\x05‘, ‘\n‘, ‘\n‘, ‘l‘, ‘\x02‘, ‘l‘, ‘^‘, ‘l‘],[‘k‘, ‘3‘, ‘}‘, ‘\x19‘, ‘u‘, ‘I‘, ‘ ‘, ‘^‘],[‘~‘, ‘B‘, ‘\x02‘, ‘}‘, ‘k‘, ‘\x05‘, ‘\x02‘, ‘/‘],[‘\n‘, ‘\x05‘, ‘^‘, ‘^‘, ‘P‘, ‘}‘, ‘!‘, ‘{‘],[‘\x08‘, ‘W‘, ‘u‘, ‘o‘, ‘ ‘, ‘2‘, ‘d‘, ‘\x04‘],[‘/‘, ‘W‘, ‘w‘, ‘\x08‘, ‘z‘, ‘\x19‘, ‘@‘, ‘I‘],[‘\x14‘, ‘ ‘, ‘P‘, ‘!‘, ‘6‘, ‘6‘, ‘ ‘, ‘}‘],[‘(‘, ‘!‘, ‘\x01‘, ‘\x08‘, ‘d‘, ‘\x08‘, ‘w‘, ‘?‘],[‘u‘, ‘W‘, ‘@‘, ‘\x13‘, ‘}‘, ‘~‘, ‘6‘, ‘o‘],[‘3‘, ‘B‘, ‘d‘, ‘\x01‘, ‘W‘, ‘2‘, ‘\n‘, ‘6‘],[‘}‘, ‘\x08‘, ‘6‘, ‘\x19‘, ‘&‘, ‘\x04‘, ‘k‘, ‘u‘],[‘\x13‘, ‘2‘, ‘2‘, ‘(‘, ‘\x19‘, ‘{‘, ‘/‘, ‘w‘],[‘\x02‘, ‘Y‘, ‘ ‘, ‘W‘, ‘\x08‘, ‘u‘, ‘\x01‘, ‘I‘]]

import base64

s=base64.b64decode(‘HRlgC2ReHW1/WRk2DikfNBo1dl1XZBJrRR9qECMNOjNHDktBJSxcI1hZIz07YjVx‘)

flag=[]

for i in range(3):

    flag.append(s[i*16:(i+1)*16])

from z3 import *

def fun(a,b):

    x=[BitVec(‘x%d‘%i,32) for i in range(8)]

    solver=Solver()

    res=‘‘

    for i in range(len(a)):

        exec("solver.add(x[i]-2*(x[i]&ord(b[i]))==ord(a[i])-ord(b[i]))")

        solver.check()

        try:

            exec("res+=chr(solver.model()[x[i]].as_long())")

        except:

            print solver

    return res

res=‘‘

for i in flag:

    L=i[:8]

    R=i[8:]

    L,R=R,L

    for k in range(32):

        L,R=R,fun(L,Kn[k])

    res+=L+R

print res

原文地址:https://blog.51cto.com/13992485/2434946

时间: 2024-08-30 07:01:38

Bugku 加密 python writeup的相关文章

转 13种最为荒谬的编程语言(Bugku 加密)

今天在做关于Bugku的加密题目时,出现了一些不会的题目,上网搜索一下发现自己不知道的真的比较多(QAQ)我就把今天遇到的问题写下来,以便自己的查找,更希望能够帮助到那些需要帮助的人!! 1.Lolcode LOLCODE是一种建立在高度缩写的网络英语之上的编程语言,一般来说如果一个人能理解这种网络英语就能在未经训练的情况下读懂LOLCODE程序源代码. 2.Befunge Befunge这门语言由Chris Pressey在1993年创造,本意为设计一种尽量难编译的语言--结果马上出现了一批编

对python源码进行编译,加密python脚本

对python源码进行编译 1.生成.pyc文件 import py_compile py_compile.compile('hello.py') 2.优化源码文件 python -O -m py_compile 1.py 生成.pyo文件 例子: 1 [[email protected] tool]# python3 2 Python 3.5.6 (default, May 3 2019, 01:52:28) 3 [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]

【Bugku】计算器 WriteUp

话不多说,先打开题目 老套路,先看hint,发现并没有 然后打开题目链接  http://123.206.87.240:8002/yanzhengma/ 验证码? 首先试着把正确答案输进去 问题来了,输入框里最多只能输入个位数 然后又是习惯的看了一下源码(用F12开发人员工具打开的) 发现输入框的最大字符数量有限制 然后尝试把1修改到3 再去输入一下正确答案 Flag就出来了 解题思路:修改标签中的最大字符数 原文地址:https://www.cnblogs.com/FeatherStark/p

脚本加密python

from pathlib import Path import python_minifier import compileall import sys def get_save_path(from_dir, to_dir, p): ori_dir = str(from_dir.resolve()) _p = str(p.resolve()) return to_dir.joinpath(_p.split(ori_dir)[-1][1:]) def mix_pyminifier(from_dir

python实现网页登录时的rsa加密流程

对某些网站的登录包进行抓包时发现,客户端对用户名进行了加密,然后传给服务器进行校验. 使用chrome调试功能断点调试,发现网站用javascript对用户名做了rsa加密. 为了实现网站的自动登录,需要模拟这个加密过程. 网上搜了下关于rsa加密的最简明的解释: rsa加密是非对称加密算法,该算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥,即公钥,而两个大素数组合成私钥.公钥是可发布的供任何人使用,私钥则为自己

sip鉴权认证算法详解及python加密

1. 认证和加密    认证(Authorization)的作用在于表明自己是谁,即向别人证明自己是谁.而相关的概念是MD5,用于认证安全.注意MD5仅仅是个hash函数而已,并不是用于加密.因为hash函数处理后的数据没法进行反向恢复,这样子的话别人没法盗取你认证身份的口令.    加密(Encryption)的作用在于对想传输的数据进行处理,在网络中即使被窃取也难以破解.加密的信息可以被破解,这需要一把钥匙--"密钥".通过密钥,我们可以对数据进行加密和解密.最有名的专用密钥加密系

为你的Python程序加密

??在实际的工作中,有时候我们需要部署自己的Python应用,但这时候我们并不希望别人能够看到自己的Python源程序.因此,我们需要为自己的源代码进行加密,Python已经为我们提供了这样一套工作机制. ??第一种加密Python源代码的方式,是将.py文件转化为.pyc文件,但这种加密方式很容易被反编译,因此实用性并不高. ??第二种加密Python源代码的方式,是将.py文件转化为.so文件,这样加密的可靠性非常高,无法被被人破解,也就很好地保护了源代码. ??本文以Linux系统(Ubu

第一篇:Python基础入门

本篇主要分为六大类: Python简介 数据类型 print语句 注释 变量 字符串 一.Python简介:   python特点:优雅,明确,简洁 python适合开发:web python优点:代码少,开发速度快 python缺点:原代码不能加密 python是一种跨平台的编程语言,一种平台下的语言其它平台都能运行 python版本类型:2.7 3.6 区别:语法不相兼容,2.7版本在3.6版本上能直接运行: python安装(windows):2.7配置环境变量 python第一个程序:

python websocket学习使用

前言 今天看了一些资料,记录一下心得. websocket是html5引入的一个新特性,传统的web应用是通过http协议来提供支持,如果要实时同步传输数据,需要轮询,效率低下 websocket是类似socket通信,web端连接服务器后,握手成功,一直保持连接,可以理解为长连接,这时服务器就可以主动给客户端发送数据,实现数据的自动更新. 使用websocket需要注意浏览器和当前的版本,不同的浏览器提供的支持不一样,因此设计服务器的时候,需要考虑. 进一步简述 websocket是一个浏览器