首页 > 其他分享 >misc-零宽字符隐写自写脚本

misc-零宽字符隐写自写脚本

时间:2024-06-02 16:10:33浏览次数:21  
标签:自写 text chars 隐写 misc decode re str self

PS: 从零宽字符隐写的javascript代码提取出来的解密方式, 由于零宽字符隐写的题目存在需要先判定存在哪些零宽字符, 勾选对应隐写字符后再进行解密. 而据我调研, 各解密网站都不具备自动识别判断解密的功能, 所以自写了一个

# encoding=utf-8

import re
import math
from typing import Set, Union, Any


def get_use_chars(encode_str: str):
    special_chars = ['\u200a', '\u200b', '\u200c', '\u200d', '\u200e', '\u200f', '\u202a', '\u202b', '\u202c',
                     '\u202d', '\u2062', '\u2063', '\ufeff']
    pattern = "[" + "".join(re.escape(char) for char in special_chars) + "]"
    found_chars = set(re.findall(pattern, encode_str))
    return sorted(list(found_chars))


class UnicodeSteganographer:
    def __init__(self):
        self.chars = []
        self.radix = 0
        self.codelength_text = 0

    def set_use_chars(self, new_chars: str):
        if len(new_chars) >= 2:
            self.chars = list(new_chars)
            self.radix = len(self.chars)
            self.codelength_text = math.ceil(math.log(65536, self.radix))

    def decode_text(self, text: str) -> dict:
        splitted = self.split_zerowidth_characters(text)
        return {
            'originalText': splitted['originalText'],
            # splitted['hiddenText'],
            'hiddenText': self.decode_from_zero_width_characters_text(splitted['hiddenText'])
        }

    def split_zerowidth_characters(self, str1: str) -> dict:
        split_result = {
            'originalText': re.sub('[' + ''.join(re.escape(char) for char in self.chars) + ']', '', str1),
            'hiddenText': re.sub('[^' + ''.join(re.escape(char) for char in self.chars) + ']', '', str1)
        }
        return split_result

    def decode_from_zero_width_characters_text(self, zero_width_str: str) -> str:
        # 初始化
        r = zero_width_str
        decode_result = []

        # 字符替换
        for i in range(len(self.chars)):  # 修改这里为遍历chars的长度
            r = re.sub(self.chars[i], str(i), r)

        # 解码文本字符
        for i in range(0, len(r), self.codelength_text):
            char_code = int(r[i:i + self.codelength_text], self.radix)
            decode_result.append(chr(char_code))

        # 合并结果为字符串并返回
        return ''.join(decode_result)


if __name__ == '__main__':
    # 只需要把零宽隐写的文本粘贴过来
    zerotext = """
    ​​​​‍‬‬flag​​​​‍‬‍‍ ​​​​‍‬‍is ​​​​​‬‬​​​​‍‍​not​​​​‍‬‬ ​​​​‍‬here!​​​​‍‍​​​​​‬​​​​​​‍‍‍​​​​‍‬‬​​​​​‍‬‬‍​​​​‍‍​​​​​‍‬‍‍
    """

    # 自动化计算方式
    stegano = UnicodeSteganographer()
    stegano.set_use_chars("".join(get_use_chars(zerotext)))
    result = stegano.decode_text(zerotext)
    print("try1:" + result['hiddenText'])

    print("---------------------------------------------------------------------------")

    # 默认计算方式
    stegano2 = UnicodeSteganographer()
    stegano2.set_use_chars('\u200c\u200d\u202c\ufeff')
    result2 = stegano2.decode_text(zerotext)
    print("try2:" + result2['hiddenText'])
	

原js解密脚本参考

https://330k.github.io/misc_tools/unicode_steganography.js

标签:自写,text,chars,隐写,misc,decode,re,str,self
From: https://www.cnblogs.com/Fxe00/p/18227227

相关文章

  • 【MISC】一道假的二维码题目学习zxing库[python解读二维码]
    引言这道题目的考点是文件格式、双图差值、Ook!编码、PRC等,我做这题的重点是复习巩固python读取二维码zxing库的使用。例题┌───────────────────────────────────────────────────┐│马老师的秘籍......
  • BUUCTF-Misc(81-90)
    从娃娃抓起第一句话是中文电码中文电码查询-中文电码转换-中文电码对照表(bmcx.com)第二句话是五笔编码汉字五笔编码批量查询:86版五笔编码、98版五笔编码、18030版五笔编码;五笔编码反查汉字-千千秀字(qqxiuzi.cn)人工智能也要从娃娃抓起flag{3b4b5dccd2c008fe7e......
  • 如何使用Stegseek解密并提取隐写工具Steghide隐藏的内容
    关于StegseekStegseek是一款针对Steghide的隐藏数据提取工具,该工具可以对经过Steghide工具处理过的内容进行分析,并从目标文件中提取出隐藏数据。 该工具一开始作为Steghide项目的分支进行开发,因此该工具的运行速度非常快,要比其他破解工具快好几千倍,并且能够在不到两秒的......
  • BUUCTF-Misc(61-70)
    [ACTF新生赛2020]swp参考:[BUUCTFmisc专题(76)ACTF新生赛2020]swp-CSDN博客解开压缩包,密密麻麻,不懂咋办了然后这边进行协议分析大部分是tcp,所以我们导出对象->选择http然后我就找到这个加密的压缩包然后010editor打开发现伪加密,改成00,有两处我只圈了一处在flag.swp里面......
  • Tron_CTF2024新生赛 MISC
    猿神?岂洞!!题目:腿短的好奇怪,难道有东西?密码在这,好像有电!.txt0362014324221316063736154275还有一个压缩包。我的解答:0362014324221316063736154275???这一串不知道是啥?一开始没解出来,如果没解出来的话,我认为是它本意应该是提示你压缩包密码为纯数字的意思。毕竟根据文本文件名......
  • BUUCTF-Misc(51-60)
    [ACTF新生赛2020]outguess是一堆文件无从下手,在图片这里找到了社会主义核心价值观密码解密一下得到之后又在这个压缩包提取了一个压缩包,用刚才解密的密码竟然不对然后后来搜了wp,说outguess是一种加密,然后下载,解密就得到flag了谁赢了比赛?打开题目没啥思路直接是binwalk......
  • ISCC2024个人挑战赛WP-MISC
    (非官方解,以下内容均互联网收集的信息和个人思路,仅供学习参考) whereisflag下载附件,解压出pyc,然后到下面网址反编译python反编译-在线工具记住c,是密文,Key是k5fgb2eur5styn0lve3t6r1sAESecb解密解密网址:https://www.lddgo.net/encrypt/aes成语学习压缩包密码:5......
  • BUUCTF:Misc 解析(十)
    前言BuuctfWeb是一个在线安全挑战平台,旨在提高参与者对网络安全的理解和实践能力。本文将详细介绍BuuctfWeb的特点、挑战和机遇,帮助读者更好地了解这一领域。一、BuuctfWeb的特点多样化的挑战场景:BuuctfWeb提供了多种挑战场景,包括Web漏洞利用、密码破解、CTF夺......
  • HNCTF-MISC-secret
    看到是图片,我一般会去010看看发现数据异常?kali启动发现藏了一个压缩包分离喽压缩包里面存放着flag文件打开发现没有当时就没有什么办法了然后我放在了物理机上发现有129个字符,与文本上的字符不匹配用vim打开哦呦,有隐写呦这就会联想到是零宽度字符的......
  • BUUCTF-Misc(41-50)
    秘密文件对ftp的数据进行追踪流找到里面被偷走了一个压缩包,然后我们暴力破解解压得到flag[BJDCTF2020]鸡你太美参考:[BUUCTF:BJDCTF2020]鸡你太美_buuctf鸡你太美-CSDN博客篮球的gif篮球副本.gif发现少了47494638我们给文件头补全flag{zhi_yin_you_are_beautif......