吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 89|回复: 7
收起左侧

[求助] CTF字符串解密,不知道是使用了什么加密方式,求指导

[复制链接]
RicardoZym 发表于 2024-9-20 22:34
加密后的字符串如下:
flag+AHs-+UWg-+X8M-+UWg-+YQ8-+Tjo-+Tro-+bBE-+Zw0-+UqE-+AH0-

请知道这是什么加密方式的大佬回答一下。十分感谢

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

ukelili 发表于 2024-9-20 22:45
就一串密文的话我猜是Base64,明文是?
 楼主| RicardoZym 发表于 2024-9-20 22:56
ukelili 发表于 2024-9-20 22:45
就一串密文的话我猜是Base64,明文是?

我要是知道明文,至于在这儿问?还有这很明显不是Base64的呀,Base64的哪有加减符号
ukelili 发表于 2024-9-20 23:31
RicardoZym 发表于 2024-9-20 22:56
我要是知道明文,至于在这儿问?还有这很明显不是Base64的呀,Base64的哪有加减符号

Base64怎么没有+号,有+有/还有=,你就给出一串密文,我帮你猜你还jue人。再说加密不作混淆你加密干嘛你直接非对称就完了呗。

[roothome.php?mod=space&uid=2291276 decode]# python3 encrypt.py "flag{This_is_a_sample_flag_by_ukelili}"
Encrypted flag: Zmx-hZ3-tU+-Glz-X2l-zX2-Ffc-2Ft-cGx-lX2-ZsY-Wdf-Ynl-fdW-tlb-Gls-+X0-=
[root@ukelili decode]# python3 decrypt.py "Zmx-hZ3-tU+-Glz-X2l-zX2-Ffc-2Ft-cGx-lX2-ZsY-Wdf-Ynl-fdW-tlb-Gls-+X0-="
Decrypted flag: flag{This_is_a_sample_flag_by_ukelili}
[root@ukelili decode]#
# encrypt.py

import base64
import random
import sys

def encrypt_flag(flag):
    # 对明文进行 Base64 编码
    encoded_bytes = base64.b64encode(flag.encode('utf-8'))
    encoded_str = encoded_bytes.decode('utf-8')

    # 手动替换特定字符为 '+'
    encoded_str = encoded_str.replace('a', '+')

    # 添加分隔符,每 3 个字符用 '-' 分隔
    encoded_parts = [encoded_str[i:i+3] for i in range(0, len(encoded_str), 3)]
    encrypted_flag = '-'.join(encoded_parts)

    return encrypted_flag

if __name__ == "__main__":
    if len(sys.argv) != 2:
        print("Usage: python3 encrypt.py <plaintext>")
        sys.exit(1)

    # 从命令行获取明文输入
    flag = sys.argv[1]
    encrypted_flag = encrypt_flag(flag)
    print("Encrypted flag:", encrypted_flag)
# decrypt.py
import base64
import sys

def decrypt_flag(encrypted_flag):
    # 去除分隔符并重组字符串
    encoded_str = ''.join(encrypted_flag.split('-'))

    # 恢复特定字符 '+' 为 'a'
    encoded_str = encoded_str.replace('+', 'a')

    # 对编码后的字符串进行 Base64 解码
    decoded_bytes = base64.b64decode(encoded_str)
    decoded_str = decoded_bytes.decode('utf-8')

    return decoded_str

if __name__ == "__main__":
    if len(sys.argv) != 2:
        print("Usage: python3 decrypt.py <encrypted_flag>")
        sys.exit(1)

    # 从命令行获取密文输入
    encrypted_flag = sys.argv[1]
    decrypted_flag = decrypt_flag(encrypted_flag)
    print("Decrypted flag:", decrypted_flag)
涛之雨 发表于 2024-9-20 23:39
本帖最后由 涛之雨 于 2024-9-21 00:02 编辑

(AI有时候不可靠,但是方向有时候是对的。。。)
简而言之,UTF-7。

import base64
print("flag+AHs-+UWg-+X8M-+UWg-+YQ8-+Tjo-+Tro-+bBE-+Zw0-+UqE-+AH0-".encode('ascii').decode('UTF-7'))

(下面是AI的部分回复,虽然最后的答案是错的,但是utf-7的思路是正确的)
识别编码方式确实需要一些经验和知识。让我解释一下为什么这种模式特别指向UTF-7编码:

  • UTF-7的特征:UTF-7(7-bit Unicode Transformation Format)是一种可以使用ASCII字符表示Unicode字符的编码方式。它的设计目的是在只支持ASCII的系统中传输Unicode文本。

  • UTF-7的独特模式:

    • UTF-7使用"+"号开始一个编码序列。
    • 编码序列通常以"-"号结束。
    • 在"+"和"-"之间的是Base64编码的字符。
  • 识别过程:当我们看到像 "+AHs-", "+UWg-", "+X8M-" 这样的模式重复出现时,它强烈暗示了UTF-7编码的使用。这种 "+XXX-" 的模式是UTF-7的典型特征。

  • CTF中的应用:在CTF挑战中,UTF-7编码并不像Base64或Hex那样常见,但正因为它相对不常见,有时会被用来增加难度。

在CTF挑战中,识别编码类型是解题的关键第一步。通过观察这些特征,我们可以快速判断使用了哪种编码方式。对于您最初提到的字符串,"+AHs-+UWg-+X8M-" 这样的模式明显符合UTF-7的特征。这种识别能力通常来自于经验和对各种编码方式的熟悉。在CTF比赛中,参与者往往需要快速识别各种编码和加密方式,这就要求对这些模式有敏锐的洞察力。如果您想进一步提高识别各种编码的能力,我建议您多接触不同类型的编码,并尝试手动编码和解码一些文本。这样的练习可以帮助您更快地识别各种编码模式。

HackerWrong 发表于 2024-9-20 23:46
涛之雨 发表于 2024-9-20 23:39
[md]**虽然论坛禁止使用AI回复,但是有时候使用AI是真的很方便。。。**

这个字符串看起来使用了一种特 ...

一股gpt味
ukelili 发表于 2024-9-21 00:06
本帖最后由 ukelili 于 2024-9-21 00:15 编辑

原来是这种编码,多谢学习到了。

自己好可笑啊,我以为 - 是补位替换成 = 。+是每段的连接符。

点评

[md]不要妄自菲薄,我看到第一反应也是base64, 然后最前面和最后面刚好是一对{}(AHs=>007B=>`{`,AH0=>007D=>`}`) 再然后就不知道了,就在找可能的编码(然后就问了AI。。。) 找到了这么个UTF-7编码。  详情 回复 发表于 2024-9-21 00:27
涛之雨 发表于 2024-9-21 00:27
ukelili 发表于 2024-9-21 00:06
原来是这种编码,多谢学习到了。

自己好可笑啊,我以为 - 是补位替换成 = 。+是每段的连接符。

不要妄自菲薄,我看到第一反应也是base64,

然后最前面和最后面刚好是一对{}(AHs=>007B=>{,AH0=>007D=>}

再然后就不知道了,就在找可能的编码(然后就问了AI。。。)

找到了这么个UTF-7编码。。。

(PS附上AI给的纯js utf7解码代码)

function decodeUTF7(input) {
    let output = '';
    let i = 0;

    while (i < input.length) {
        let ch = input[i];

        if (ch === '+') {
            i++;
            let base64Str = '';
            while (i < input.length && input[i] !== '-') {
                base64Str += input[i];
                i++;
            }
            if (base64Str.length > 0) {
                // Base64 解码,输出为二进制数据
                let base64Decoded = atob(base64Str);
                let unicodeOutput = '';
                // 遍历解码后的二进制数据,并将其转换为 Unicode 字符
                for (let j = 0; j < base64Decoded.length; j += 2) {
                    let charCode = base64Decoded.charCodeAt(j) << 8 | base64Decoded.charCodeAt(j + 1);
                    unicodeOutput += String.fromCharCode(charCode);
                }

                output += unicodeOutput;
            }
        } else {
            output += ch;
        }

        i++;
    }

    return output;
}

const encodedStr = "flag+AHs-+UWg-+X8M-+UWg-+YQ8-+Tjo-+Tro-+bBE-+Zw0-+UqE-+AH0-";
const decodedStr = decodeUTF7(encodedStr);
console.log(decodedStr);
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-9-21 03:36

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表