LOADING

加载过慢请开启缓存 浏览器默认开启

python脚本

enumerate()

enumerate(obj)  # 迭代器,输入可迭代对象,返回索引和迭代元素
for i, char in enumerate(chars):

fromhex()

bytes.fromhex(hex_char) # 输入十六进制,按两位转换为byte数据

join()

separator.join(iterable) 
# 将可迭代对象中的元素连接成一个新的字符串。
# separator:连接符,通常是一个字符串,表示元素之间的分隔符。
# iterable:一个可迭代对象(如列表、元组、字符串等)要求元素是字符串。
chars = "".join(chr(i) for i in range(32,127))

get()

dict.get(key, default=None)
# 获取字典中指定键对应的值。
# key:要查找的键。
# default:当指定的 key 不在字典中时返回的默认值。如果未指定,默认返回 None。
plaintext += mp.get(bytes([b]), '?')  # 用get获取键的值,如果没有匹配,使用占位符

localtime()

time_local = time.localtime(timestamp) # 把时间戳转化为时间
dt = time.strftime("%Y-%m-%d %H:%M:%S", time_local) # 把时间按格式输出

base64

import base64
base64.decodebytes(bflag) # 输入byte数据,解码base64

unhexlify()

import binascii
binascii.unhexlify(string) 
# string:一个包含十六进制字符的字符串。这个字符串的长度应该是偶数
# 返回一个字节对象(bytes),表示解码后的原始二进制数据。
# !!!unhexlify() 不接受带有空格的十六进制字符串,所以需要先将空格去掉。
hex_string = "68 65 6c 6c 6f"
result = binascii.unhexlify(hex_string.replace(" ", ""))
print(result)  # 输出: b'hello'

list(binascii.unhexlify("13141516"))   #直接按2个十六进制字符生成列表,值为十进制

to_bytes()

int.to_bytes(length, byteorder, *, signed=False)
# length:指定返回的字节串的长度(即字节数)。如果整数需要更多的字节才能表示,它会抛出 OverflowError。
# byteorder:字节顺序,决定了多字节数值的字节排列顺序。可以是:
# 'big':大端字节顺序(高位字节在前)。
# 'little':小端字节顺序(低位字节在前)。
# signed:是否考虑符号位,默认为 False,表示无符号整数。如果设置为 True,则允许转换负数。

.hex()

.hex(bytes)   #可以把byte数据直接转为hex

unsigned()

unsigned(int) #可以把有符号整数转为无符号,以便转为bytes数据

flag=b""  # 打印集体的十六进制
for i in result:
    result = unsigned(i).to_bytes(4, 'little')  #小端序输出,前面的参数为字节大小
    flag += result
print(flag.hex())

ord()

ord(str)  #可以把字符转为ASCII值

int.from_bytes()

int.from_bytes(bytes) #把bytes转为int

map()

map(func,arr) #把arr中的每一个元素为参数调用func函数 ->以func函数返回值组成的可迭代对象

bytearry()

bytearry(bytes) #把bytes数据按1字节转为byte数组 ->byte数组

z3求解器

pip install z3-solver

v5,v6, v7, v8, v9, v10= Ints('v5 v6 v7 v8 v9 v10') #定义多个整数变量
x = z3.Real('x')  #创建实数变量
x = z3.BitVec('x', 32) #创建向量变量,用于计算机位运算,第二个参数是大小,32位,即4字节
p = z3.Bool(name = 'p') #创建布尔变量

s = z3.Solver() #获取求解器实例
s.add() #添加约束条件
And() #与
Or() #或
Not() #否
Implies() #依赖
s.check() #检查解,有解为sat,无解为unsat
s.model() #获取结果
s.model()[x] #获取特定的解
s.model()[x].as_long() #把值转为python整数,以便进行数据处理

一些脚本

from z3 import *

v5,v6, v7, v8, v9, v10= Ints('v5 v6 v7 v8 v9 v10')  #定义未知数

a = Solver()
a.add()   #方程组

che = a.check()
res = a.model()
print(f"求解结果{res}")

variable_names = [v5, v6, v7, v8, v9, v10]  #输出的变量,按顺序排
result_list = [res[var].as_long() for var in variable_names]
print(f"结果字符串{result_list}")

flag = ""

for i in result_list:
    result = i.to_bytes(4, 'little')  #小端序输出,前面的参数为字节大小
    flag += result.decode('utf-8')

print(f"flag: {flag}")
from z3 import*

flag =""
for i in range(0, 8, 2):
    data = []

    v12 = BitVec("input", 32)
    s = Solver()
    dt = ((v12 << 4) & 4198170623) + (v12 >> 28)

    s.add(And(data[i] - 0x10 <= dt, dt <= data[i] + 0x10))

    while s.check() == sat:
        module = s.model()
        result = module[v12].as_long()
        result_hex = hex(result)[2:]       
        print(f"{result_hex}")
        flag += result_hex
print(f"flag{{{flag}}}")