aiQG's Blog

Happy hacking. Happy developing.

aiQG's GitHub ⛓Links P
Other CTF Swift Developing & Reversing

各种奇怪的工具

27 March 2019

by aiQG_

抓包: tshark//mac可用(自带?) wireshark的分析功能 tshark.exe -r usb2.pcap -T fields -e usb.capdata > usbdata.txt 提取数据 从CTF中学USB流量捕获与解析 文件(信息): binwalk(binwalk -e 分离文件) file exiftool
pdf爆破: pdfcrack pdfcrack -f flag.pdf --wordlist=rockyou.txt//rockyou.txt是一个字典 提取图片信息: identify

identify -format “%s %T \n” ‘/home/ctf/Desktop/100_KHf05OI.gif’

Linux下的strings命令搜索文件夹中文本里包含的字符串strings * | grep [password]


convert 可以转换图片格式,修改大小…… 拆分gif

convert flag.gif output.png

(最好在一个文件夹里分解)


montage

Linux版的小型ps 将多图片紧密平铺

montage -mode Concatenate -tile x1 output-*.png ok.png


grep 文本搜索工具 可以找到哪些文件包含字符串 也可以查找整个目录


python pycryptodome 密码库官方文档

python: 字符串.index(‘字符串’) 返回下标

import string

intab = "aeiou"
outtab = "12345"
trantab = maketrans(intab, outtab)

str = "this is string example....wow!!!";
print str.translate(trantab);
#将"aeiou"换成"12345"

号称最强的hash破解工具:hashcat

-a 攻击模式
0 Straight
1 Combination
3 Brute-force
6 Hybrid Wordlist + Mask
7 Hybrid Mask + Wordlist

| -m | 密文类型 | | — | ——– | | 0 | MD5 | | 100 | SHA1 | //关于密文类型有很多,其中甚至有zip,pdf等文件,不过是通过破解相关文件等哈希来得到密钥的

//掩码爆破(-a 3)md5(-m 0)
//-1,-2,-3,-4 可以自定义字符集
./hashcat -a 3 -1 "?l?u?d" -m 0 "31f40dc5308fa2a311d2e2ba8955df6c" "tjctf{?1?1?1_?1}"
//用show打印内存中找到的值
//用show指令程序不会进行运算
./hashcat -a 3 -1 "?l?u?d" -m 0 "31f40dc5308fa2a311d2e2ba8955df6c" "tjctf{?1?1?1_?1}" --show
31f40dc5308fa2a311d2e2ba8955df6c:tjctf{w0w_E}

//这里有两个坑:1. hashcat用到了显卡,所以虚拟机是跑不了的了;2. zsh会把 ? 等一些特殊字符当成指令,所以要加上引号

开启十六进制输入

–hex-charset

爆破格式

hashcatwiki

pdf哈希提取

==hashcat很强大== //但是如果要爆破的明文很长(或者是掩码太长 可能爆不出来)


遇到一个爆破140个zip的题

import zipfile

def aZipBaoPo(zipFileName, passwordDic):
    notGetPassword = True
	    fDic = open(passwordDic)
    	fzip = zipfile.ZipFile(zipFileName, 'r')
    	while notGetPassword:
		        pwdTemp = fDic.readline()[:-1]
		        if pwdTemp == '':
            			break
        		for i in fzip.namelist():
			            try:
                				s = fzip.read(i, pwd=pwdTemp)
                				print zipFileName+':'
				                print pwdTemp+':'+s
				                notgetPassword = False
			            except:
                				break

for i in range(140):
	    filename = 'zip'+str(i)+'.zip'
    	dicname = 'words.txt'
	    aZipBaoPo(filename, dicname)

没有用多线程爆 key全是单词 所以爆出挺快的//关键是字典优秀


Pin 文档

“在程序执行的汇编之间执行代码” 自带多种示例工具。//需要自行编译

检测程序执行了多少条指令:

带参运行:./pin -t source/tools/ManualExamples/obj-ia32/inscount1.so – ./helloworld 666 运行后输入(通过文件):./pin -t source/tools/ManualExamples/obj-ia32/inscount1.so – ./helloworld <filename

返回结果保存在inscount.out


```python
#!/usr/bin/env python
#-*- coding:utf-8 -*-
import popen2,string

INFILE = "test"
creakfile = "./ELF-NoSoftwareBreakpoints"
pintool = "source/tools/ManualExamples/obj-ia32/inscount1.so"
CMD = "./pin -t " + pintool + " -- " + creakfile + " <" + INFILE

maxLength = 50

def execlCommand(command):
    global f
    fin,fout = popen2.popen2(command)
    result1 = fin.readline()#获取程序自带打印信息,wrong或者correct
    #print result1
#可以根据程序输出
#    if(result1 != 'Input : Wrong\n'):#输出Correct时终止循环
#        f = 0
    result2 = fin.readline()#等待子进程结束,结果输出完成
    fin.close()


#写出结果
def writefile(data):
    fi = open(INFILE,'w')
    fi.write(data)
    fi.close()

l = 0#初始化计数器
for i in range(maxLength):
    key = i * 'A'#测试字符串
    print str(i),">",key
    writefile(key)
    execlCommand(CMD)
    fi = open('inscount.out')
    while(1):
        try:
            n = int(fi.read().split(' ')[1], 10)
            break
        except IndexError:
            continue
    fi.close()
    print str(n)+'---->'+str(n-l)
    if n-l>100 :
        print '++++++++++++++++++'
    l = n
    print '----------------------------------------------'
        

```python
#!/usr/bin/env python
#-*- coding:utf-8 -*-
import popen2,string

INFILE = "test"
creakfile = "./crypt4"
pintool = "source/tools/ManualExamples/obj-ia32/inscount1.so"
CMD = "./pin -t " + pintool + " -- " + creakfile + " <" + INFILE#运行后输入参数
choices = "ababcdefghijklmnopqrstuvwxyz0123456789_ABCDEFGHIJKLMNOPQRSTUVWXYZ!#$%&'()*+,-./:;<=>?@[\]^`{|}~"#自定义爆破字典顺序
input_length = 24#可能不会检查长度
flag = ''
threshold = 50#阀值设置很关键

def execlCommand(command):
    global f
    fin,fout = popen2.popen2(command)
    result1 = fin.readline()#获取程序打印信息
    #print result1
#可以根据程序输出
#    if(result1 != 'Input : Wrong\n'):#输出Correct时终止循环
#        f = 0
    result2 = fin.readline()#等待子进程结束,结果输出完成
    fin.close()


#写出结果
def writefile(data):
    fi = open(INFILE,'w')
    fi.write(data)
    fi.close()


f = 1
while(f):
    l = 0#初始化计数器
    for i in choices:
        key = flag + i + '-'*(input_length-len(flag))#测试字符串
        print ">",key
        writefile(key)
        #CMD = "./pin -t " + pintool + " -- " + creakfile +' '+ key + " <" + INFILE #带参数运行
        execlCommand(CMD)

        fi = open('inscount.out')
        while(1):
            try:
                n = int(fi.read().split(' ')[1], 10)
                break
            except IndexError:
                continue
        fi.close()
    
        print str(n)+'---->'+str(n-l)
        if(n-l > threshold and l):#阀值设置很关键, l!=0
            print '+++++++'+'\n'
            flag += i
            break
        else:
            l = n
        print '---------------------------------------------'
    if len(flag) == input_length:
        break
print flag

//工具还有检测函数输入参数与返回值的,执行代码的地址的

有时候程序执行的语句变少 也可能意味着字符输入正确,常见于mov混淆。 mov混淆可以说程序执行语句数是很稳定的,不会因为一个小的输入变化,让执行语句变多或少很多。 ——三遇mov混淆


xortool

一个用来猜xor密钥的工具 -c :最可能出现的字符(十六进制或某字符)(一般二进制文件为00,一般文本文件为20) -l :长度 -m :最长长度

xortool file.bin -c 20

会生成一个文件夹保存xor出来的文件和猜出来的key


base64

-d 解码

base64 -d code.txt > plan.txt base64 plan.txt > code.txt


xxd (类比于winhex)

xxd file.bin head

featherduster

An automated, modular cryptanalysis tool; i.e., a Weapon of Math Destruction

进入环境后

  1. 导入样本 import singlefile #导入一个文件,这个文件中只有一个样本 import multifile #导入一个文件,这个文件中有多个样本,用换行符分割 import clear #清除所有样本 samples #查看导入的样本
  2. 分析 analyze #程序猜测可能用了什么加密
  3. 根据分析结果载入模块 use 模块
  4. 运行 run
  5. 查看结果 result export #导出结果到文件

//如果没有什么思路,可以用暴力破解的方式。这个命令会自动分析样本,并用所有的攻击方式暴力破解。 //autopwn

//支持tab补全 //好像和hashcat一样厉害


大数分解

yafu


---

[Ghidra](https://github.com/NationalSecurityAgency/ghidra)

美国国安局的开源软件
(可以反编译出mips//当然ida加了插件也可以)
需要jdk11+

---

[outguess](https://github.com/crorvick/outguess)

隐藏信息
> outguess -k "my secret key" -d hidden.txt demo.jpg encoded.jpg

分离信息
> outguess -k "my secret key" -r encoded.jpg hidden.txt

必须输出一个txt

---
在线 OCR
识别图片/pdf内的文字

---
[素数](http://smallprimenumber.blogspot.com/2008/12/prime-number-from-26000000-to-26500000.html)

---
[uncompyle](https://github.com/gstarnberger/uncompyle)
反编译pyc
对于部分不完整的代码可以反编译出机器码
> uncompyle6 flag.pyc
//注意有个6

---

[rsatool](https://github.com/ius/rsatool)
主要功能:
1. 给出p,q计算出n,d
2. 给出n,d计算出p,q
-o导出文件可以用openssl asn1parse读取

---

[sage在线](https://sagecell.sagemath.org/)

---

[z3](http://z3prover.github.io/api/html/z3.html)

---
[Intel® Intrinsics Guide](https://software.intel.com/sites/landingpage/IntrinsicsGuide/)
函数

---
打印pdf信息
pdfinfo name.pdf
pdf转文字
pdftotext name.pdf

---

Aircrack-ng

```shell
airmon-ng start wlan0
airodump-ng wlan0
#aireplay-ng -0 666 -a /*apmacaddr*/ [-c /*usermacaddr*/] wlan0
airodump-ng -c 11 --bssid 28:6C:07:60:CE:29 -w ~/Desktop/tryFUCK/wifiDump wlan0

aircrack-ng -w dictionary wifiDump-01.cap


Macchanger

macchanger -r wlan0


…持续更新

CTF

return

email:nrxxmzlrovqw4z3fgeztcncaozuxaltroexgg33n