初始Cython(代码分析+Cython语言实现)

题目:

from encrypt import encrypt_message


def bytes_to_hex(byte_data):
    return "".join(format(byte, "02x") for byte in byte_data)


def main():
    message = "xxxxxxxxxxxxxxxxxxx"
    length = len(message)

    # 调用Cython加密函数
    encrypted_message = encrypt_message(message.encode("utf-8"), length)

    # 转换为十六进制字符串
    encrypted_hex = bytes_to_hex(encrypted_message)

    # 保存加密后的消息到文件
    with open("message.enc", "w") as f:
        f.write(encrypted_hex)


if __name__ == "__main__":
    main()

cdef extern from "math.h":
    double sin(double x)
    double cos(double x)

cdef extern from "stdlib.h":
    void* malloc(size_t size)
    void free(void* ptr)

def encrypt_message(char* message, int length):
    cdef int i
    cdef unsigned char* encrypted = <unsigned char*>malloc(length * sizeof(unsigned char))
    for i in range(length):
        encrypted[i] = (message[i] ^ int(sin(i) * 666) ^ int(cos(i) * 999)) & 0xFF
    return encrypted

## 解密挑战
我们使用了一种自定义的加密算法来加密消息。算法使用了Cython语言实现。你的任务是补全代码解密这条消息。

## 文件说明
- `encrypt.pyx`:Cython实现的加密算法源码。
- `encrypt_message.py`:加密消息的脚本。
- `decrypt_message.py`:你需要补充的解密脚本。
- `message.enc`:加密后的消息。
- `setup.py`:编译Cython代码的脚本。


## 目标
编写 `decrypt_message.py` 脚本,解密 `message.enc` 文件中的消息。

提示:解密得到的内容使用32位md5小写加密提交flag。

script:

import math
from math import *


def hex_to_bytes(hex_data):
    return bytes.fromhex(hex_data)


def decrypt_message(x):
    flag = ""
    # print("len>>>", len(x))
    for i in range(len(x)):
        # flag += chr((x[i] ^ int(sin(i) * 666) ^ int(cos(i) * 999)) & 0xFF)
        flag += chr((x[i] ^ int(cos(i) * 999) ^ int(sin(i) * 666)) & 0xFF)
        # print((x[i] ^ int(cos(i) * 999) ^ int(sin(i) * 666)))
        # print((x[i] ^ int(cos(i) * 999) ^ int(sin(i) * 666)) & 0xFF)
        # print(chr(x[i] & 0xFF))
        # print(chr(x[i]))
    return flag


# def encrypt_message(x):
#     flag = ""
#     test = ""
#     print("len>>>", len(x))
#     for i in range(len(x)):
#         # flag += chr((x[i] ^ int(sin(i) * 666) ^ int(cos(i) * 999)) & 0xFF)
#         flag += chr((x[i] ^ int(cos(i) * 999) ^ int(sin(i) * 666)) & 0xFF)
#         # print((x[i] ^ int(cos(i) * 999) ^ int(sin(i) * 666)))

#         test += hex((x[i] ^ int(cos(i) * 999) ^ int(sin(i) * 666)) & 0xFF)[2:].rjust(
#             2, "0"
#         )
#         print(test)

#     return flag


def main():
    with open(r"C:\Temp\202407MISC_难_PolarD&N_CTF_初识Cython\message.enc", "r") as f:
        encrypted_hex = f.read()
    print(encrypted_hex)
    byte = hex_to_bytes(encrypted_hex)
    print(byte)
    flag = decrypt_message(byte)
    print(flag)
    # str = "ilovepolar"
    # print(encrypt_message(str.encode()))
    # print("\xc2".decode())


if __name__ == "__main__":
    main()

posted @ 2025-05-04 12:02  lethe311  阅读(2)  评论(0)    收藏  举报