Pythonいろいろ

python便利!

Python を使用した 画像 などの カービング 削除ファイル 復元

 

この記事では、ディスクイメージ等から特定のファイルを抽出することを目的としています。

具体的には、画像ファイルなどの削除されたファイルを抽出したりすることができます。

 

 

 

使用方法

 

1、Pythonが実行できる環境に下のコードをコピペしてください。

 

 

2、探したいファイルのヘッダーとフッターが何かを確認してください。

 探し方は、ネットで拡張子を検索するか、Stirlingなどのバイナリエディタでファイルの最初と末尾を確認してください。

 

PNGであればヘッダーが「0x89504e470d0a1a0a」、フッターが「0xae426082」

JPGであればヘッダーが「0xFFD8FF」、フッターが「0xFFD9」

 

 

3、その後、コピペしたコードの「###User Setting Parameter」の箇所を自分の環境よって変更してください。

  • FileName : 抽出元のディスクイメージファイルのパス
  • MaxFileSize : 抽出するファイルの最大ファイルサイズ
  • Header : 2で確認したファイルヘッダ
  • Footer : 2で確認したファイルフッター
  • Extension  : 抽出するファイルの拡張子

 

 補足するとファイルヘッダを見つけてからMaxFileSizeを超えてもFooterが見つからない場合は、中断して保存し、新たにHeaderを探し始めます。また、Extensionは保存するファイル名に使用するので、「.」を含めてください。

 

4、実行してください。

  実行するとデスクトップに「CurvingResult」というフォルダができそこに抽出したファイルが保存されます。

 

 

 

import os
import shutil

#png header 0x89504e470d0a1a0a
#png footer 0xae426082
#jpg header 0xFFD8FF
#jpg footer 0xFFD9

###User Setting Parameter
FileName=r""
MaxFileSize =1000000
Header=0x89504e470d0a1a0a
Footer=0xae426082
Extension = ".png"
###

###Create Destination Directory
try:
    sDestDir = os.path.expanduser("~\\Desktop\\CurvingResult\\")
    os.mkdir(sDestDir)
except :
    shutil.rmtree(sDestDir)
    os.mkdir(sDestDir)
###

#Read Source File
with open(FileName,"rb") as ioSrcFile:
    iHeaderLen=int((len(hex(Header))-2)/2)
    iFooterLen=int((len(hex(Footer)) - 2) / 2)

    ###initialize variables
    bHeader=(Header).to_bytes(iHeaderLen,"big")
    bFooter = (Footer).to_bytes(iFooterLen, "big")
    sFile=ioSrcFile.read()
    iDstLen=0
    bDst=bytes()
    ###


    ###Search header and footer
    for n in range(0,len(sFile)):


        if sFile[n:n+iHeaderLen]==bHeader:
            print("discover header")
            bDst=bytes()
            iDstLen=1
            bDst += sFile[n].to_bytes(1, "big")
            continue
        if iDstLen:
            iDstLen+=1;
            bDst+=sFile[n].to_bytes(1,"big")
        if (sFile[n:n+iFooterLen]==bFooter and iDstLen>iHeaderLen)or len(bDst)>=MaxFileSize:
            print("discover footer")
            iDstLen=0
            bDst+=sFile[n+1:n+iFooterLen]

            #Save Curving File
            with open(sDestDir+"file-"+str(n)+Extension,"wb") as ioDstFile:
                ioDstFile.write(bDst)
                bDst = bytes()
                print("Save File\n")
    ###
print("Finish Curving")

 

にほんブログ村 IT技術ブログへ
にほんブログ村