我的Misc经验总结

一年前做的,没怎么注意细节,还请见谅

如果在做题过程中解密没有直接解出来,可以多试试其他的解码,一般-栅栏解码-凯撒解码-Base64-ASCII 解码-rot13,base85解码等,

Dig可查看一个主机信息的软件,用于查询DNS服务器

Stegstove的图片处理

下图为xor两张图片(其实就是图片异常),点这个选项之后会有你选择的两张照片

然后就可以异或

DNS也有追踪流

7z的字节流数据

Linux反编译界面化工具jadx-gui

处理apk文件用

遇到图片是这样的需要联想到通道,要试一试stegsolve分析

自动检测Base16、32、64、85系列编码,多层解码:

import base64

import re

import base91

def baseDec(text,type):

    if type == 1:

        return base64.b16decode(text)

    elif type == 2:

        return base64.b32decode(text)

    elif type == 3:

        return base64.b64decode(text)

    elif type == 4:

        return base64.b85decode(text)

    elif type == 5:

        return base91.decode(text.decode())

    else:

        pass



def detect(text):

    try:

        if re.match("^[0-9A-F=]+$",text.decode()) is not None:

            return 1

    except:

        pass

    

    try:

        if re.match("^[A-Z2-7=]+$",text.decode()) is not None:

            return 2

    except:

        pass



    try:

        if re.match("^[A-Za-z0-9+/=]+$",text.decode()) is not None:

            return 3

    except:

        pass



    try:

        if re.match("^[A-Za-z0-9$%()*+,-./:;?@[\]^_`{|}~]+$",text.decode()) is not None:

            return 4

    except:

        pass



    try:

        if re.match("^[^-\']+$",text.decode()) is not None:

            return 5

    except:

        pass

    

    return 5



def autoDec(text):

    floor = 0

    while True:

        try:

            code = detect(text)

            text = baseDec(text,code)

            floor += 1

            print("第{0}层:\n".format(floor),text)

            if not text:break

        except:

            break



if __name__ == "__main__":

    # with open("Autopy/crypto/doc/form",'rb') as f:

    #     content = f.read()

    content = "@iH<,{*;oUp/im\"QPl`yR*ie}NK;.D!Xu)b:J[Rj+6KKM7P@iH<,{*;oUp/im\"QPl`yR".encode()

    autoDec(content)

类似于这样,一般要提取出来,之后保存为pyc后缀

然后用stegosaurus工具提取出隐写

PT2242信号:

前面4bit表示同步码,中间的20bit表示地址码,后面的4bit表示功能码,最后一位是停止码01 代表 F,00 代表 0,11 代表 1,最后的0是结束符

Ogg一种音频压缩格式

可以用Au打开

lsb隐写,Nihilist 密码

import string

enc='PVSF{vVckHejqBOVX9C1c13GFfkHJrjIQeMwf}'这个是密码

grid='LOVEKFC'+'ABDGHIJMNPQRSTUWXY'这个是隐写内容

flag=''

for i in enc:

    if i in string.ascii_lowercase:

        index=grid.lower().index(i)

        flag+=string.ascii_lowercase[index]

        continue

    if i in string.ascii_uppercase:

        index=grid.upper().index(i)

        flag+=string.ascii_uppercase[index]

        continue

    flag+=iprint flag

504b0304    16进制编码转压缩包脚本:

import binascii

s = '以504b开头的16进制数据编码'

with open('flag.zip', 'wb') as f:

    f.write(binascii.unhexlify(s))

套娃解压缩脚本:

while [ "`find . -type f -name '*.tar.xz' | wc -l`" -gt 0 ]; do find -type f -name "*.tar.xz" -exec tar xf '{}' \; -exec rm -- '{}' \;; done;

linux中dd分离命令的使用

Qsstv命令

音频解码

看和这个类似的题

解决方式,脚本

这个是C++语言哦

#include<iostream>

using namespace std;

int main(){

    int i=1;

    int flag=0;

    for(int i=0;i<19260817;i++){

       flag=(int)(((long long)flag*10+2)%1000000007);

        //cout<<i<<endl;

}  

    cout<<flag;

    return 0;

}

G语言

Ciphey - 自动解密工具

命令:

ciphey -t "aGVsbG8gbXkgbmFtZSBpcyBiZWU=想要解密的内容"

用法:

Volatility镜像分析

若题目中给了.img文件,一般需要查看镜像分析

在线字频统计

盲水印

PS D:\Tools\Misc\BlindWaterMark> python2 .\bwm.py decode .\1.png .\2.png res.png

image<.\1.png> + image(encoded)<.\2.png> -> watermark<res.png>

md5加密

apng文件可以用火狐浏览器打开

但一般这样类型的图片文件需要用apng在线分割工具

删除每一行首/尾匹配条件的字符脚本
path = r"C:\Users\20455\Desktop\data2.txt"
f = open(path, 'r')
a = f.readlines()
f = open(path, 'w')
for line_b in a:
    line_a = line_b.lstrip('$$START$$')
    f.write(line_a)
f.close()

16进制转字符脚本:

import binascii

with open('data.txt','r') as file:

    with open('out.txt','wb') as data:

        for i in file.readlines():

            data.write(binascii.unhexlify(i[:-1]))

有的题目上作者会故意搞非常多的相同的数字、字母或其它类型的编码,并且一般这是没用的,所以需要进行去重

去重脚本

Ps:要把该文件放到该目录下

with open('文档路径', 'r') as file:

    res_list = []

    lines = file.readlines()

    print('[+]去重之前一共{0}行'.format(len(lines)))

    print('[+]开始去重,请稍等.....')

    for i in lines:

        if i not in res_list:

            res_list.append(i)

    print('[+]去重后一共{0}行'.format(len(res_list)))

    print(res_list)

with open('out.txt', 'w') as new_file:

    for j in res_list:

        new_file.write(j)

Unicode解码

类似于以下这样

音频隐写或图片隐写steghide
用法

​

​steghide extract -sf /root/桌面/out.wav

拼图

120张,每张都是200 x 100,应该长:10张图片,宽:12张图片,那么拼起来的总图就应该是长:2000 x 宽:1200

使用montage和gaps

Kali命令:

montage *jpg -tile 10x12 -geometry 200x100+0+0 flag.jpg

gaps --image=flag.jpg --generations=40 --population=120 --size=100

汉信码

一种类似于二维码但并非二维码的符号编码

SilentEye 沉默之眼

功能和Audacity差不多,用于解决音频隐写解码,如果Audacity没有解开,可以用这个试试

AES加密

类似以下这样的是AES加密

urldecode编码

Tar文件可以进行解压

把题目拖入010中还会遇到类似如下图中的解码,可以看到每一行的长短对应一个二进制位,011010类似于这样,有一个简单的脚本:之后在转为字符就行

for line in open("文档路径"):

    if (len(line) == 7):

        print("0",end="")

    else:

        print("1",end="")

零宽隐写

像这样字母间有小方块,可以直接搜索零宽隐写解码

若碰见这样的base64解码,需要考虑到逐行解码

逐行解码脚本:

import base64

with open('1.txt','r') as file:

   for i in file.readlines():

      line=str(base64.b64decode(i),'utf8')

      print(line)

再把1换成空格

import base64

with open('1.txt','r') as file:

    for i in file.readlines():

        line = str(base64.b64decode(i),'utf8')

        print(line.replace('1',' '))

转为二进制后发现只有前两位不同,拼接以后发现就前两位不一样,取前两位重组转为十进制,再转为字符的脚本

with open('文件路径') as a_file:

    content = [x.strip() for x in a_file.readlines()]

bins = []

for i in content:

    bins.append(bin(int(i))[2:].zfill(8)[:2])

stringBins = ''.join(bins)

num = 0

flag = ''

for i in range(int(len(stringBins) / 8)):

    flag += chr(int(stringBins[num:num + 8], 2))

    num += 8

print(flag)

Base64反复解码脚本:

import base64file = open("flag.txt",'r')

base = file.read()for i in range(29):

    base = base64.b64decode(base)print(base)

TTL隐写

类似于这样的一大串数字

直接用脚本跑

import binascii

with open('文档路径.txt','r') as fp:

    a=fp.readlines()

    p=[]

    for x in range(len(a)):

       p.append(int(a[x]))

    s=''

    for i in p:

        if(i==63):

            b='00'

        elif(i==127):

            b='01'

        elif(i==191):

            b='10'

        else:

            b='11'

        s +=b

# print(s)

flag = ''

for i in range(0,len(s),8):

    flag += chr(int(s[i:i+8],2))

flag = binascii.unhexlify(flag)

wp = open('ans.zip','wb')

wp.write(flag)

wp.close()

logo编程语言

类似于以下这样

cs pu lt 90 fd 500 rt 90 pd fd 100 rt 90 repeat 18[fd 5 rt 10] lt 135 fd 50 lt 135 pu bk 100 pd setcolor pick [ red orange yellow green blue violet ]

在在线网站上搜索解决Logo Interpreter

异或5加密,脚本如下:

original = open("文档路径",'r').read()

flag = open("flag",'w')

for i in original:

    tmp = int(i,16)^5

    flag.write(hex(tmp)[2:])

 rsa算法RSA算法加密,py脚本如下:

import gmpy2"""

gmpy2.mpz(n)#初始化一个大整数

gmpy2.mpfr(x)# 初始化一个高精度浮点数x

d = gmpy2.invert(e,n) # 求逆元,de = 1 mod n

C = gmpy2.powmod(M,e,n)# 幂取模,结果是 C = (M^e) mod n

gmpy2.is_prime(n) #素性检测

gmpy2.gcd(a,b)  #欧几里得算法,最大公约数

gmpy2.gcdext(a,b)  #扩展欧几里得算法

gmpy2.iroot(x,n) #x开n次根"""

p = gmpy2.mpz(3)

q = gmpy2.mpz(11)

e = gmpy2.mpz(3)

l = (p-1) * (q-1)

d = gmpy2.invert(e,l)

c = gmpy2.mpz(26)

n = p * q

ans = pow(c,d,n)print(ans)

解密或维吉尼亚密码 

3Des解密

需要密文和密钥才可以解出来

Zsteg隐写

文件路径-a

还可以对LSB进行隐写

可以检测PNG和BMP图片里的隐写数据。

RGB数据写成图片

类似于这样的坐标

脚本:

import itertools
from PIL import Image
max = 200
file = open("qr.txt", "r")
img = Image.new("RGB", (max, max))
for y, x in itertools.product(range(max), range(max)):
    pixel = eval(file.readline())
    img.putpixel([x, y], pixel)
img.show()

套娃脚本

压缩包解密套娃

import zipfile

name = '0573'

while True:

    fz = zipfile.ZipFile(name + '.zip', 'r')

    fz.extractall(pwd=bytes(name, 'utf-8'))

    name = fz.filelist[0].filename[0:4]

    fz.close()

移位密码

key='d4e8e1f4a0f7e1f3a0e6e1f3f4a1a0d4e8e5a0e6ece1e7a0e9f3baa0c4c4c3d4c6fbb9b2b2e1e2b9b9b7b4e1b4b7e3e4b3b2b2e3e6b4b3e2b5b0b6b1b0e6e1e5e1b5fd'

hex=[]

flag=''

for i in range(0,len(key)-1,2):

    zdh=key[i:i+2]

    hex.append(zdh)

for i in range(len(hex)):

    zdh1=hex[i]

    flag+=chr(int(int(zdh1,16))-128)

print(flag)

若发现题目中的编码是由一个字母和数字组成,可以用以下方法试试

DTMF拨号音频解码

栅栏解码

凯撒解码

Base64,32,16,85解码,64解码也常常遇到

社会主义核心价值观解码

颜文字解码

oOK,Brainfuck解码

ASCII 解码

rot13解码

⡇⡓⡄盲文解码

摩斯密码

音乐符号解码

解密每一个编码在每一个解密上都不一样

网上有很多解密网站,有时候可能同一种类型解密网站可能解密出不同的内容,所以当一个站解不出来的时候,建议多测试几个,别在一棵树上吊死

python中import os是指导入os模块到当前程序。

85->64->85->13->16->32

出现这几个数字可以想一下base64编码,注意这里13是rot13

USB流量分析

udp
这个过滤条件可以筛选出UDP端口开放的数据包,该过滤条件会匹配所有的UDP数据包,因为UDP没有像TCP那样的连接建立过程,所以UDP数据包的到达通常表示端口是开放的。

icmp and icmp.type == 3 and icmp.code == 3

这个过滤条件用于查找被目标主机标记为"端口不可达"的数据包,通常表示端口关闭;该过滤条件匹配了ICMP "端口不可达"类型的数据包,其中的 "code" 值为3表示端口关闭。

tcp.flags.syn == 1 and tcp.flags.ack == 1

过滤条件可以筛选出TCP端口开放的数据包

wireshark打开但是不确定是鼠标流量还是键盘流量

然后打开Leftover Capture Data查看是键盘还是鼠标流量

使用tshark导出一下数据

下面这个是导出数据的步骤

tshark -r usbtraffic.pcapng -T fields -e usb.capdata | sed '/^\s*$/d' > usbdata.txt

USB数据包可以直接用直接使用UsbKeyboardDataHacker脚本提取内容可以提取一些用用的东西,可能是密钥,也可能是其他一些

Ps是在python中用的,在虚拟机中用命令

用法如下:

poetry run python UsbKeyboardDataHacker.py ./example.pcap

Usage :

        python UsbKeyboardHacker.py data.pcap

Tips :

        To use this python script , you must install the tshark first.

        You can use `sudo apt-get install tshark` to install it

Author :

        WangYihang <wangyihanger@gmail.com>

        If you have any questions , please contact me by email.

        Thank you for using.

要看以下这个流量分析

oOk解码

在vscode中运行该ook解码的php文件于浏览器上

凯撒加密caesar

gmbhjtdbftbs类似于这样

把偏移量改为1,就可以直接得到最后的多次解码结果

Ntfs数据流隐藏

在终端上用notepad打开   :  .txt:   .txt

010Editor

010中有时候会遇到文件损坏,有许多类似A1这样的,如下图,这样很可能是对全文进行了异或,binary xor 2进制异或

在题目中有时候会遇到图片中带着txt的压缩包,但用binwalk分离却出不来,要想到txt文件的开头或结尾是否损坏压缩包的文件头504B如下图:

CRC报错,报错信息,RAR结构有4个块:标记块、归档头部块、文件块、结束块。

把文档转为16进制文件

ctrl +shift +c直接变成以16进制的格式复制下来

ctrl +shift +v   -粘贴

在yU后可能有16进制需要转换

在一些图片拖进010中在底部有时候会报出错误信息

图片能正常打开,但是出现CRC匹配错误一般是修改了宽高

第二行首先是宽

其次是高 字母在前越往后越大

能对图片进行分析,以十六进制打开图片,也可以又来打开zip等文件

可以查看文件是否加密

未加密:

文件头中的全局方式位标记为00 00

目录中源文件的全局方式位标记为00 00

伪加密:如果题目中存在多个加密文件可能只有一个是真加密,其他都是伪加密

Ps:伪加密可能会加密好几处

注意PK

在010后面会有好多的解译编码,在右边会有pk字样需要留意以下,有可能是在后面的压缩文件进行伪加密

Ps:要出现00 00,或者09 00类似的格式

文件头中的全局方式位标记为00 00

目录中源文件的全局方式位标记为09 00

ps:也不一定要09 00或00 00,只要是奇数都视为加密,而偶数则视为未加密

zip伪加密是在文件头的加密标记位做修改,进而再打开文件时识被别为加密压缩包

真加密:

文件头中的全局方式位标记为09 00

目录中源文件的全局方式位标记为09 00

伪加密就是把全局标记数值修改,改回未加密的全局标记就行了

Binwalk

binwalk中如果提取后内又document文件可以留意一下

在linux中用命令输入然后输入图片或其他文件夹或压缩包路径,可以对该文件隐藏信息进行提取,一般需加-e进行使用

ARCHPR

暴力破解软件,用于一些密码破译,对4~5位密码破解速度快

密码破解中可以对一些编译过的密码进行明文攻击,如果题目中需要进行明文攻击,可以直接在该软件上选择该选项

fcrackzip

Linux中的破解工具

  • -b 暴力破解方式
  • -D  字典破解方式
  • -c 暴力破解的字符类型,1=1~9,a=a~z,A=A~Z,!=字符,:=所有字符
  • -v 显示实时爆破信息
  • -l 指定破解的密码为几位数
  • -u 指定爆破文件
  • -p 破解的起始位置

CQR Research

扫描二维码的工具

Wireshark

抓取网络流量包,抓包工具,可以用来追踪流量包

一些题目中会显示icmp包,要注意留意,可能在末尾藏东西

ICMP包的尾部发现html代码,其中有打印base64信息

Tshark

Linux中的流量分析命令

提取数据用法如下:

tshark -r out.pcap -T fields -e data > data.txt

出题人一般会把答案藏在TCP和http追踪流中

有些藏在http中的,要看以下这个,然后右键点击显示分组字节

会显示一串16进制,把该进制改为ASCII编码再改为base64解码

Ps:在解出来的base64编码中==等号应该在最后,如果不是可以选择文本每行倒叙,倒叙完后再次进行base64解码语法:

​
http.request.method==POST



​

unzip -P supercomplexpassword

如果在追踪流中发现类似这样的,一般代表是压缩包密码

有时候需要导出http包

如果出现很多的http包,可以直接搜索ctf或者flag在linux中用以下命令

grep -r 'CTF' ./文件名字/

http协议中存在lsass.dmp

所以在流量题中还可以用搜索dmp,查询一下有没有关于该文件的流量信息windows中的

*dmp文件是windows系统中的错误转储文件,当Windows发生错误蓝屏的时候,系统将当前内存【含虚拟内存】中的数据直接写到文件中去,方便定位故障原因。)

*里面包含主机用户密码信息)

Stegsolve

在java环境下打开文件或照片在数字取证领域,可以通过Stegsolve检测和分析可疑图像文件,提取其中的隐藏信息,为案件侦破提供有力证据。 此外,在信息安全领域,Stegsolve也可以用于检测和防范信息泄露风险,提高信息系统的安全性。

ASCII 码

对照表是基于罗马字母表的一套电脑编码系统,是为了让使用者快速了解二进制数字化组合对应的八进制、十进制、十六进制编码代表的指令。八字节一组以下是ASCII表

Brainfuck

在线解码大多包括++++和>>>,相当于一种加密编码

每个图片文件在010等文件下都有固定的文件头例如:

JPEG (jpg),文件头:FFD8FF
PNG (png),文件头:89504E47
GIF (gif),文件头:47494638
TIFF (tif),文件头:49492A00
Windows Bitmap (bmp),文件头:424D
CAD (dwg),文件头:41433130
Adobe Photoshop (psd),文件头:38425053
Rich Text Format (rtf),文件头:7B5C727466
XML (xml),文件头:3C3F786D6C
HTML (html),文件头:68746D6C3E
Email [thorough only] (eml),文件头:44656C69766572792D646174653A
Outlook Express (dbx),文件头:CFAD12FEC5FD746F
Outlook (pst),文件头:2142444E
MS Word/Excel (xls.or.doc),文件头:D0CF11E0
MS Access (mdb),文件头:5374616E64617264204A
WordPerfect (wpd),文件头:FF575043
Postscript (eps.or.ps),文件头:252150532D41646F6265
Adobe Acrobat (pdf),文件头:255044462D312E
Quicken (qdf),文件头:AC9EBD8F
Windows Password (pwl),文件头:E3828596
ZIP Archive (zip),文件头:504B0304
RAR Archive (rar),文件头:52617221
Wave (wav),文件头:57415645
AVI (avi),文件头:41564920
Real Audio (ram),文件头:2E7261FD
Real Media (rm),文件头:2E524D46
MPEG (mpg),文件头:000001BA
MPEG (mpg),文件头:000001B3
Quicktime (mov),文件头:6D6F6F76
Windows Media (asf),文件头:3026B2758E66CF11
MIDI (mid),文件头:4D546864

Foremost -i   -O out

Foremost +图片               

分离图片中的压缩包

Foremost -i 也可以提取流量包

Base64解码脚本 python

import base64



def decode(f):

n = 0;

while True:

try:

f = base64.b64decode(f)

n += 1

except:

print('[+]Base64共decode了{0}次,最终解码结果如下:'.format(n))

print(str(f,'utf-8'))

break



if __name__ == '__main__':

f = open('./base64.txt','r').read()

decode(f)

Audacity

用于音频解码,比如摩斯密码
粗线条是-
细线条是.

Outguess -k          -r      命令

outguess -k 'abc' -r mmm.jpg flag.txt

abc是隐写密码

flag.txt 加上这个是为了把解出来的隐写内容添加到这个txt文件中

用于图片的隐写-k 表示密码,-r应该是表示解密的意思

⡇⡓⡄盲文解码

Brainfuck/Ook!编码加密

Ook的格式,先编码然后直接转文本

Base64 隐写

先加密后隐写,一般要用到python写脚本

import base64

b64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'

with open('ComeOn!.txt', 'rb') as f:

    flag = ''

    bin_str = ''

    for line in f.readlines():

        stegb64 = str(line, "utf-8").strip("\n")

        rowb64 = str(base64.b64encode(base64.b64decode(stegb64)), "utf-8").strip("\n")

        offset = abs(b64chars.index(stegb64.replace('=', '')[-1]) - b64chars.index(rowb64.replace('=', '')[-1]))

        equalnum = stegb64.count('=')  # no equalnum no offset

        if equalnum:

            bin_str += bin(offset)[2:].zfill(equalnum * 2)

            # flag += chr(int(bin(offset)[2:].zfill(equalnum * 2), 2))

            # print(flag) 这样写得不出正确结果

        print([chr(int(bin_str[i:i + 8], 2)) for i in range(0, len(bin_str), 8)])

字频统计

也是需要用到python脚本

abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()_+- =\\{\\}[]

就是像这样乱码无序状态的

alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()_+- =\\{\\}[]"

strings = open('文档路径'.’rb’).read()

result = {}

for i in alphabet:

counts = strings.count(i)

i = '{0}'.format(i)

result[i] = counts

res = sorted(result.items(),key=lambda item:item[1],reverse=True)

for data in res:

print(data)

for i in res:

flag = str(i[0])

print(flag[0],end="")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值