CTF-reverse逆向分析解题可能用上的脚本

注:本篇用于记录一些CTF-reverse中可能用上的脚本,脚本都来源于博主解出某道题后留下,如果遇上类似的题目,根据脚本中注释的提示更改对应的密文密钥或条件即可快速解题!

持续更新!!点个收藏关注不迷路~


一,AES解密

原文链接->AES加密解密算法_aes解密-CSDN博客

from Crypto.Cipher import AES
 
#注意解密过程中密钥的格式需要为byte类型,字符串转byte直接在开头加个b标志
key = b'1234567890123456' 
#注意解密过程中密文的格式需要为byte类型,本题获取到的是十六进制文本,处理成字符串后使用bytes.fromhex()函数转为对应的字节数组
en_text = bytes.fromhex('F3498AED82CE44E2357C23F5DCF897A43B6A7BFEE0467C591E301CBC38F99913')
 
aes = AES.new(key, AES.MODE_ECB) #创建一个AES解密对象,需要传入密钥和加密模式(这里是ECB模式)
print(aes.decrypt(en_text)) #调用decrypt方法实现解密


 二,z3求解器(求解约束方程未知数)

原文链接->z3求解器脚本(CTF-reverse必备)-CSDN博客

from z3 import *
 
#创建未知数变量
v = [Int(f'v{i}')    for i in range(0, 16)]
 
#创建解释器对象
solver = Solver()#创建一个求解器对象
 
#添加约束方程
solver.add(v[0] * 7 == 546)
solver.add(v[1] * 2 == 166)
solver.add(v[2] * 6 + v[3] * 1 + v[5] * 7 == 1055)
solver.add(v[1] * 4 + v[3] + v[4] * 4 + v[5] * 7 + v[7] * 6 + v[8] * 1 + v[13] * 2 + v[15] * 8 == 3107)
solver.add(v[4] * 4 == 336)
solver.add(v[1] * 2 + v[5] * 7 == 656)
solver.add(v[6] * 3 + v[7] * 6 + v[8] + v[9] * 5 + v[10] * 16 + v[11] * 3 + v[12] * 6 + v[13] * 2 + v[15] * 8 == 5749)
solver.add(v[7] * 6 == 606)
solver.add(v[8] + v[14] * 5 == 652)
solver.add(v[9] * 5 + v[10] * 16 + v[12] * 6 == 3213)
solver.add(v[6] * 3 + v[7] * 6 + v[8] + v[9] * 5 + v[10] * 24 + v[11] * 3 + v[12] * 6 + v[13] * 2 + v[15] * 8 == 6717)
solver.add(v[11] * 3 == 285)
solver.add(v[6] * 3 + v[7] * 6 + v[8] * 2 + v[10] * 8 + v[12] * 6 + v[13] * 2 + v[14] * 5 + v[15] * 8 == 4573)
solver.add(v[14] * 5 == 600)
solver.add(v[2] * 6 + v[3] * 1 + v[4] * 4 + v[5] * 7 + v[13] * 2 == 1615)
solver.add(v[1] * 2 + v[5] * 7 + v[7] * 6 + v[8] * 1 + v[15] * 8 == 2314)
 
#求解并转化为字符输出,得到flag
if solver.check() == sat: #check()方法用来判断是否有解,sat(即satisify)表示满足有解
    ans = solver.model() #model()方法得到解
    for i in v:
        print(chr(ans[i].as_long()), end='')
#一般不会无解,如果无解八成是未知数变量的类型不符合,或约束方程添加错误
else:
    print("no ans!")


三,base64换表解密

原文链接->CTF-reverse-simpleRE(base64变表逆向)-CSDN博客

import base64 #导入base64模块用于解密
s1 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' #标准表
s2 = 'qvEJAfHmUYjBac+u8Ph5n9Od17FrICL/X0gVtM4Qk6T2z3wNSsyoebilxWKGZpRD' #base64换表
en_text = '5Mc58bPHLiAx7J8ocJIlaVUxaJvMcoYMaoPMaOfg15c475tscHfM/8==' #密文
 
map = str.maketrans(s2, s1) #用str类中的maketrans建立映射,注意第一个参数是需要映射的字符串,第二个参数是映射的目标
map_text = en_text.translate(map) #映射实现替换密文,替换前是base64换表加密,替换后则是base64标准表加密
print(map_text) #可以先看看标准表加密的原base64密文
print(base64.b64decode(map_text)) #直接使用提供的base64解密函数解密


四,二维四向迷宫路径求解


 持续更新……

相关推荐

  1. CTF-reverse逆向分析解题可能脚本

    2024-05-12 10:00:08       33 阅读
  2. zstd字典压缩大数据生产实践 & ctf逆向出题启发

    2024-05-12 10:00:08       49 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-12 10:00:08       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-12 10:00:08       101 阅读
  3. 在Django里面运行非项目文件

    2024-05-12 10:00:08       82 阅读
  4. Python语言-面向对象

    2024-05-12 10:00:08       91 阅读

热门阅读

  1. android 预加载进程

    2024-05-12 10:00:08       29 阅读
  2. 技术骨干向管理人才转变的全面策略

    2024-05-12 10:00:08       31 阅读
  3. 等保测评技术方案(六)

    2024-05-12 10:00:08       25 阅读
  4. Spring 使用 Groovy 实现动态server

    2024-05-12 10:00:08       34 阅读
  5. C++面向对象学习笔记五

    2024-05-12 10:00:08       29 阅读
  6. leetcode1290-Convert Binary Number in a Linked List to Integer

    2024-05-12 10:00:08       33 阅读
  7. Go有无缓冲channel的区别

    2024-05-12 10:00:08       28 阅读
  8. gin:01-框架安装

    2024-05-12 10:00:08       32 阅读
  9. Python中的多线程与多进程编程:深入解析与应用

    2024-05-12 10:00:08       37 阅读
  10. c语言之打开一个文件

    2024-05-12 10:00:08       28 阅读
  11. 00 深度学习 PyTorch框架介绍

    2024-05-12 10:00:08       33 阅读
  12. Spring如何解决循环依赖

    2024-05-12 10:00:08       27 阅读