main函数确实没有什么内容
但是看函数名的时候可以发现有encrypt和rot13两种加密
还有tcf
在_GLOBAL__sub_I_flag
中,可以看到程序的执行逻辑,但是顺序是不对的,大概也猜得出来是什么样的顺序
首先输入并且判断长度
rot13加密
一维DCT加密
DCT加密的特点就是嵌套循环里面的内容
将加密结果存在in数组里面
in数组和check数组比较,check数组已知,可以直接cv2的IDCT(逆离散余弦变换)函数求解
import cv2
import numpy as npenc=np.array([513.355, -37.7986, 8.7316, -10.7832, -1.3097, -20.5779,6.98641, -29.2989, 15.9422, 21.4138, 29.4754, -2.77161,
-6.58794, -4.22332, -7.20771, 8.83506, -4.38138, -19.3898,
18.3453, 6.88259, -14.7652, 14.6102, 24.7414, -11.6222,-9.754759999999999, 12.2424, 13.4343, -34.9307, -35.735,-20.0848, 39.689, 21.879, 26.8296],dtype=np.float32)s=cv2.idct(enc).round().astype(int).flatten().tolist()
#离散余弦逆变换.四舍五入.转换为整型.将二维数组展平成一维数组.把 NumPy 数组转换为 Python 列表for i in s:if (i > 64 and i <= 90) or (i > 96 and i <= 122):if 64<i<=90:i=(i -65 -13)%26+65elif 96<i<=122:i=(i -97-13)%26+97print(chr(i),end='')
在写脚本的过程中有一些小的问题,记录一下
1.enc是一个数组,这是一维的dct,但是idct()一般是处理二维,我直接用一维数组来使用idct是没有问题的,但是如果有报错的话可以将这个一维数组转换为二维
2.在我电脑上,OpenCV库只能借助cinda安装
dct参考:https://blog.csdn.net/Icathia7/article/details/132687445
wp参考:https://lentinel.icu/archives/yangchengbei2024-reverse-writeup
https://www.nssctf.cn/note/set/10362