(i春秋 Misc)ReCreators - CryMisc


⭐【i春秋 Misc】


【題目鏈接】 i春秋 Misc ReCreators CryMisc


⭐ReCreators


下載得到一個文件。老規矩,放入010文本編輯器中查看:


文件頭是: KDMV 不清楚。 往下查看:



發現了 misc.vmdk 可通過 file 命令直接查看,得到如下:


root@DESKTOP-VUB6KKI:/mnt/c/Users/11145/Desktop# file ReCREATORS
ReCREATORS: VMware4 disk image

文件格式:.vmdk


文件類型:Virtual Machine Disk File


即 與虛擬機中虛擬磁盤文件有關。


可知: ReCREATORS 是虛擬機映像文件。 修改后綴名為 : ReCREATORS.vmdk


磁盤文件,立刻想到 一個叫 DiskGenius 的軟件。


通過 打開磁盤文件 將 ReCREATORS.vmdk 加載進來。然后依次進入,發現一個MP4



將該mp4導出,打開一聽是一首動漫主題曲。 用 010打開查看,在最后一段發現異常數據。



全是一串數據。導出 ,懷疑是 ASCII轉換,保存為 1.hex


參考大佬腳本題解


(ps:該腳本可適用 得到一堆ASCII文本,通過base16(十六進制轉換)/32/64層層解密得出flag 的情況)


import binascii
import base64

def get_continuous_asciis(ranges: list):
    """
    取連續的ASCII文本
    :param ranges: 范圍數組, 例[['A', 'B']]
    :return:
    """
    return ''.join([''.join(map(chr, range(ord(r[0]), ord(r[1]) + 1))) for r in ranges])

with open('E:\\1.hex') as f:
    enc = f.read()

while True:
    b16 = b32 = b64 = False
    if all([i.upper() in '0123456789ABCDEF' for i in enc]):
        b16 = True
    elif all([i.upper() in 'ABCDEFGHIJKLMNOPQRSTUVWXYZ2345678=' for i in enc]):
        b32 = True
    elif all([i.upper() in get_continuous_asciis([['a', 'z'], ['A', 'Z'], ['0', '9']]) + '+/=' for i in enc]):
        b64 = True
    else:
        # print('End')
        break
    if b16:
        # print('Base16')
        enc = binascii.a2b_hex(enc).decode('utf-8')
    elif b32:
        # print('Base32')
        enc = base64.b32decode(enc).decode('utf-8')
    elif b64:
        # print('Base64')
        enc = base64.b64decode(enc).decode('utf-8')
    # print('-' * 30)
    print(enc)
    print('-' * 30)

得到flag:


------------------------------
flag{wh4t_a_w0nderfu1_d4y}
------------------------------


⭐CryMisc


下載得到一個壓縮包,解壓得到一個 jiami.py 加密腳本 和一個 被加密的壓縮包 gogogo.zip


jiami.py 如下:


# -*- coding:utf8 -*-

import pyminizip
from hashlib import md5
import os
          
def create(files, zfile):
    password = os.urandom(15)
    password = md5(password).hexdigest()
    pyminizip.compress_multiple(files, zfile, password, 0)
    pass
      
if __name__ == '__main__':
    files = ['jiami.py','gogogo.zip']
    zfile = 'crypto.zip'
    create(files, zfile)

通過這個加密腳本 ,很清楚的看到, 是將 jiami.pygogogo.zip 一起加密成 crypto.zip


並且注意到 這是通過 15位md5加密而成,爆破難度頂天。


由於已知一個和被加密壓縮包一樣加密算法的文件,便可馬上想到 明文攻擊


1、將 jiami.py 用winrar 壓縮成一個壓縮包 -> jiami,zip 當作 明文


(可能是壓縮算法原因,對於明文攻擊,目前來看,必須采用winrar方可成功)


2、打開ARCHPR 爆破壓縮包神器。將加密zip gogogo.zip 導入,選擇 明文攻擊類型


3、進行明文攻擊。



注:對於ARCHPR4.0版本,它會自動跳出,只需等待就可。


而ARCHPR4.54版本,攻擊一段時間,直接按下停止即可,如下圖:



它會自動跳出 另存為解密壓縮包



解壓解密成功的壓縮包,得到三個文件: AES.encrytAESencrypt.pyRSA.encrypt


打開 AESencrypt.py


# -*- coding:utf8 -*-
from Crypto.Cipher import AES

s=open('next.zip','rb').read()
BS=16
pad_len=BS-len(s)%BS
padding=chr(pad_len)*pad_len
s+=padding

key='我后來忘了'
n=0x48D6B5DAB6617F21B39AB2F7B14969A7337247CABB417B900AE1D986DB47D971
e=0x10001
m=long(key.encode('hex'),16)
c=pow(m,e,n)
c='0{:x}'.format(c).decode('hex')
with open('RSA.encrypt','wb') as f:
    f.write(c)

obj=AES.new(key,AES.MODE_ECB)
with open('AES.encryt','wb') as f:
    f.write(obj.encrypt(s))

這里給了我們很多信息:


1、有一個 next.zip 的存在


2、key 是經過 RSA加密


3、一開始是AES加密。


解密RSA得到key


已知 n,利用 yafu 分解 n得到p q 或者 在線網站分解


n = 32945885482421841602167475970472000545315534895409154025267147105384142461297


得到:



p = 177334994338425644535647498913444186659
q = 185783328357334813222812664416930395483


編寫腳本:


#coding:utf-8
import gmpy2
import binascii
from Crypto.Util.number import long_to_bytes
p = 177334994338425644535647498913444186659
q = 185783328357334813222812664416930395483
n = 32945885482421841602167475970472000545315534895409154025267147105384142461297
e = 0x10001
d = int(gmpy2.invert(e,(p-1)*(q-1)))
mingwen = open("E:\\RSA.encrypt","rb").read()
hexstr = binascii.b2a_hex(mingwen).decode("utf-8")
c = int(hexstr,16)
m = pow(c, d, n)  # m 的十進制形式
string = long_to_bytes(m)  # m明文
print(string)  # 結果為 b‘ m ’ 的形式


跑出結果如下:



得到 key: copy__white__key


得到key解密生成next.zip


利用已知 AESencrypt.py 編寫解密腳本 獲得 next.zip python2腳本如下


from Crypto.Cipher import AES

s=open('AES.encryt','rb').read()
BS=16
pad_len=BS-len(s)%BS
padding=chr(pad_len)*pad_len
s+=padding

key='copy__white__key'

obj=AES.new(key,AES.MODE_ECB)
with open('next.zip','wb') as f:
f.write(obj.decrypt(s))

運行得到 next.zip 查看encrypt.py :


# -*- coding:utf8 -*-
from base64 import *

s=open('flag.jpg','rb').read()
s='-'.join(map(b16encode,list(s)))
s=map(''.join,zip(*(s.split('-'))))
with open('first','wb') as f:
f.write(b16decode(s[0]))
with open('second','wb') as f:
f.write(b16decode(s[1]))


加密腳本傳遞的信息為:


將 一張flag.jpg 分成一半。first和second,並且對其兩部分均使用base16 decode一次。


編寫腳本得flag.jpg


於是 可以編寫解密腳本(python2):


# -*- coding:utf8 -*-
from base64 import *
s = [0,1]
with open('first','rb') as f:
s[0] = b16encode(f.read())
with open('second','rb') as f:
s[1] = b16encode(f.read())
s=map(''.join,zip(*s))
s=b16decode(''.join(s))
with open('flag.jpg','wb') as f:
	f.write(s)


得到flag.jpg



用010打開查看,利用插件,注意到最后有大段數據段異常填充,


點擊查看發現 8BPS psd文件頭! 於是截下另存為 psd。



用ps打開 。疑似flag的假的flag出現。於是 將背景圖層導出png查看。


為什么要導出背景圖層?


1、該圖就三個圖層:


一個是文字圖層(迷惑行為),還有一個是圖片表情包。背景圖層(鎖定)flag藏在這里最有可能。


2、 之前得到的key: copy__white__key 暗示導出png格式



用 stegsolve查看:



掃描二維碼得flag



flag為:


flag{409d7b1e-3932-11e7-b58c-6807154a58cf}

【侵權刪】


【轉載請放鏈接】 https://www.cnblogs.com/Jlay/p/CryMisc.html



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM