MISC之常用编码总结

感谢丁神的总结博客链接

常见编码

下面以加密下方flag为例

flag{QLNU_yyds!}

base家族

工具:base全家桶http://wiki.qlnuctf.cn/course/13/task/684/show

base16(十六进制)
666C61677B514C4E555F79796473217D
base32
MZWGCZ33KFGE4VK7PF4WI4ZBPU======
base58
base62

http://decode-base62.nichabi.com/?input

base64
ZmxhZ3tRTE5VX3l5ZHMhfQ==
base85
Ao(mgHVmI3<F:#sA9/oB
base91
@iH<,{b*+6Gs1QejHEAL
base92
F#S<YR]=h7^%q3jIJN2g

base64x-转表base64

base64 的乱序版
参考链接

import base64
import string

str1 = "x2dtJEOmyjacxDemx2eczT5cVS9fVUGvWTuZWjuexjRqy24rV29q"

string1 = "ZYXABCDEFGHIJKLMNOPQRSTUVWzyxabcdefghijklmnopqrstuvw0123456789+/"
string2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"

print (base64.b64decode(str1.translate(str.maketrans(string1,string2))))

str1是要解密的代码
string1是改过之后的base64表
利用cyberchef 工具也是可以的

rot13

aes-des-3des-rc4-rabbit

需要密码,格式很像base,但是是以U2开头的

U2FsdGVkX1/SvkGkNmN/u52RqOQ=

EBCBIC

啌亣捆咇凁攨mpm檯剤仯蝠蝰?

使用010解密即可

flag{we1c0me_t0_redhat2021}

例题:2021红帽-签到

gzip

eJxLy0lMr05KSTEwM0pOTrFMNk9ONkhJNjYwNDI3SLVMSbJMMk5NrgUA9cQMNg==

eJx开头的等号结尾的

网站解密:https://codebeautify.org/gzip-decompress-online

jwt

因为 jwt 分为三部分,之间通过点号分隔,前两部分就是 base64 编码的所以直接可以 base64 解码

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

辨别方法:eyJ

解密网站:https://jwt.io/

希尔密码

码表

abcdefghijklmnopqrstuvwxyz ,.

常见密钥为一个网址,比如

在这里插入图片描述

解密网址:http://www.atoolbox.net/Tool.php?Id=914

云影密码

有1,2,4,8这四个数字,可以通过加法来用这四个数字表示0-9中的任何一个数字,列如0=28, 也就是0=2+8,同理7=124, 9=18。这样之后再用1-26来表示26个英文字母,就有了密文与明文之间的对应关系。引入0来作为间隔,以免出现混乱。所以云影密码又叫“01248密码”

#!/usr/bin/python
# -*- coding=utf8 -*-
"""
# @Author : pig
# @CreatedTime:2019-11-2423:54:02
# @Description : https://www.jianshu.com/p/b5aa5cf60f83
"""


def de_code(c):
    dic = [chr(i) for i in range(ord("A"), ord("Z") + 1)]
    flag = []
    c2 = [i for i in c.split("0")]
    for i in c2:
        c3 = 0
        for j in i:
            c3 += int(j)
        flag.append(dic[c3 - 1])
    return flag

def encode(plaintext):
    dic = [chr(i) for i in range(ord("A"), ord("Z") + 1)]
    m = [i for i in plaintext]
    tmp = [];flag = []
    for i in range(len(m)):
        for j in range(len(dic)):
            if m[i] == dic[j]:
                tmp.append(j + 1)
    for i in tmp:
        res = ""
        if i >= 8:
            res += int(i/8)*"8"
        if i%8 >=4:
            res += int(i%8/4)*"4"
        if i%4 >=2:
            res += int(i%4/2)*"2"
        if i%2 >= 1:
            res += int(i%2/1)*"1"
        flag.append(res + "0")
    print ("".join(flag)[:-1])

c = input("输入要解密的数字串:")
print (de_code(c))
m_code = input("请输入要加密的数字串:")
encode(m_code)

PGP词汇表

链接https://baike.baidu.com/item/PGP%E8%AF%8D%E6%B1%87%E8%A1%A8/22718129
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GQHdaRFc-1635086332410)(F:%5C_%E7%AC%94%E8%AE%B0%5Cmdpic%5C3.MISC%E6%80%BB%E7%BB%93_pic%5C1634728790155-d4c77211-966c-4707-b20b-8cf16fcc6845.jpeg)]

UUencode

Uuencode将输入资料以每三个字节为单位进行编码,如此重复进行。如果最后剩下的资料少于三个字节,不够的部份用零补齐,很像base64
特点:包含!”#¥%&‘()*+=’” 等等字符

Unicode

Unicode 在一个字符集中包含了世界上所有文字和符号,统一编码,来终结不同编码产生乱码的问题

字符编码 UTF-8

Unicode 统一了所有字符的编码,是一个 Character Set,也就是字符集,字符集只是给所有的字符一个唯一编号,但是却没有规定如何存储

  • 一个字符使用四个字节存储,也就是 32 位,这样就能涵盖现有 Unicode 包含的所有字符,这种编码方式叫做 UTF-32(UTF 是 UCS Transformation Format 的缩写)

  • 在存储和网络传输中,通常使用更为节省空间的变长编码方式 UTF-8,UTF-8 代表 8 位一组表示 Unicode 字符的格式,使用 1 - 4 个字节来表示字符

    U+ 0000 ~ U+ 007F: 0XXXXXXX
    U+ 0080 ~ U+ 07FF: 110XXXXX 10XXXXXX
    U+ 0800 ~ U+ FFFF: 1110XXXX 10XXXXXX 10XXXXXX
    U+10000 ~ U+1FFFF: 11110XXX 10XXXXXX 10XXXXXX 10XXXXXX
    

    可以看到,UTF-8 通过开头的标志位位数实现了变长。对于单字节字符,只占用一个字节,实现了向下兼容 ASCII,并且能和 UTF-32 一样,包含 Unicode 中的所有字符,又能有效减少存储传输过程中占用的空间

RTF格式下的unicode编码

明显特点:\u-65432?\u-65420

转换脚本

s=r"\u-65432?\u-65420?\u-65420?\u-65424?\u-65421?\u-65478?\u-65489?\u-65489?\u-65418?\u-65426?\u-65437?\u-65420?\u-65434?\u-65491"
l=list(s[3:-1].split(r"?\u-"))
flag=""
for i in l:
    flag+=chr(65536-int(i))
print(flag)

autokey

自动密钥密码(Autokey Cipher)也是多表替换密码,与维吉尼亚密码密码类似,但使用不同的方法生成密钥。通常来说它要比维吉尼亚密码更安全。自动密钥密码主要有两种,关键词自动密钥密码和原文自动密钥密码
解密网站:https://www.wishingstarmoye.com/ctf/autokey
http://www.practicalcryptography.com/ciphers/autokey-cipher/

# python2 解码
from pycipher import Autokey
 
print Autokey('CULTURE').encipher('helloworld')
print Autokey('CULTURE').decipher('jyweinsypo')

工具下载:https://github.com/hitcxy/break_autokey
工具使用

需要安装pycipher库 pip2 install pycipher
修改break_autokey.py中的'ctext' 变量
python2 break_autokey.py

其他稀奇古怪编码

https://www.dcode.fr/
可以用这个网站

特殊编程语言

JS变种

已下这些都是js,打开console运行一下就能得到flag

brainfuck

http://www.hiencode.com/brain.html

jsfuck

用六个不同的符号
- !+
构造出JS的所有类型
http://www.hiencode.com/jsfuck.html

aaencode

**也称颜文字 **゚ω゚ノ= /`m´)ノ ~┻━┻ //´∇`/ [’_’]; o=(゚ー゚)
将JS代码转换成常用的网络表情
http://utf-8.jp/public/aaencode.html

jjencode

demo地址
http://utf-8.jp/public/jjencode.html

xxencode
jother

jother是一种运用于javascript语言中利用少量字符构造精简的匿名函数方法对于字符串进行的编码方式。其中8个少量字符包括: ! + ( ) [ ] { } 。只用这些字符就能完成对任意字符串的编码。不同于jsfuck,它多了{}这两个大括号
解密工具 由于jother执行之后所得到的结果分为字符串和函数两种,所以解密的方法也不相同。
字符串:直接在Console界面中输入并回车即可
函数: 对于函数类型的jother加密结果,我们只需要将最后的()改成.toString()即可

ctf中js的总结

npiet

有关颜色的编程语言

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uf50t0H3-1635086332411)(F:%5C_%E7%AC%94%E8%AE%B0%5Cmdpic%5C3.MISC%E6%80%BB%E7%BB%93_pic%5C1634640451368-b0297fe9-fed0-4432-94ee-2eb2af4bed01.png)]

更多查看https://www.jianshu.com/p/ed929cf72312

ALPHUCK

字和符号,统一编码,来终结不同编码产生乱码的问题

  • 5
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Linux 中的 misc 是一种杂项设备类型,它可以用来创建一些没有特定驱动程序的设备文件,例如 /dev/null 和 /dev/random。 要创建一个 misc 设备,可以使用 misc_register() 函数,该函数需要一个 miscdevice 结构体作为参数,其中包含设备的名称、设备号等信息。然后,可以使用 misc_deregister() 函数来注销设备。 下面是一个简单的示例程序,用于创建一个名为 mymiscmisc 设备: ```c #include <linux/module.h> #include <linux/miscdevice.h> static int mymisc_open(struct inode *inode, struct file *file) { printk(KERN_INFO "mymisc: device opened\n"); return 0; } static int mymisc_release(struct inode *inode, struct file *file) { printk(KERN_INFO "mymisc: device closed\n"); return 0; } static const struct file_operations mymisc_fops = { .owner = THIS_MODULE, .open = mymisc_open, .release = mymisc_release, }; static struct miscdevice mymisc_device = { .minor = MISC_DYNAMIC_MINOR, .name = "mymisc", .fops = &mymisc_fops, }; static int __init mymisc_init(void) { int ret; ret = misc_register(&mymisc_device); if (ret) { printk(KERN_ERR "mymisc: unable to register device\n"); return ret; } printk(KERN_INFO "mymisc: device registered\n"); return 0; } static void __exit mymisc_exit(void) { misc_deregister(&mymisc_device); printk(KERN_INFO "mymisc: device unregistered\n"); } module_init(mymisc_init); module_exit(mymisc_exit); MODULE_LICENSE("GPL"); ``` 编译并安装模块后,可以使用以下命令来查看设备文件: ``` $ ls -l /dev/mymisc crw------- 1 root root 10, 58 May 22 15:08 /dev/mymisc ``` 可以使用 cat 命令来测试设备: ``` $ cat /dev/mymisc mymisc: device opened mymisc: device closed ``` 这里的输出是由 mymisc_open() 和 mymisc_release() 函数生成的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

OceanSec

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值