#2. jpg Carving Tool with Python 2.7.13
by Qerogram서론
진행과정
복구가 귀찮아서 만들어 봤는데 그렇게 어려운 로직도 아니었고 허접한 소스가 결과로 나왔다.
진행과정
헤더인 ffd8ffe0을 찾고, 푸터인 ffd9를 찾아 그 사이의 값을 모두 쓰는 방식으로 구현했다.
HxD를 이용해서, 파일을 두개 합쳐보고 실험을 해봤더니 성공적이었다.
해당 py파일 뒤에 parameter로 복구할 파일을 불러오면 되는 부분이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | import binascii, sys, os FileName = 0 EIP = 0 Cluster_Size = 32 Flag = 0 Recovery_File = 0 def main() : global NileName if not os.path.isdir("Recovery") : os.mkdir("Recovery") FileName = sys.argv[1] carving(FileName) def carving(FileName) : global EIP, Recovery_File File_Size = os.stat(sys.argv[1]).st_size f = open(FileName, "rb") Ret = 0 while EIP < File_Size : Ret = Buffer_Read(f) if Ret : Recovey_File.close() def Buffer_Read(f) : global Cluster_Size, EIP, Recovery_File, Flag Buffer = f.read(Cluster_Size) EIP += Cluster_Size Data = binascii.hexlify(Buffer) if Flag : Recovery_File.write(Buffer) if Data[:8] == "ffd8ffe0" or Data.find("00ffd8ffe0") != -1: Flag = 1 print "Header!" Recovery_File.close() Recovery_File = open("C:\\Carving\\Recovery\\"+str(EIP)+".jpg", "wb") Buffer = Buffer[Buffer.find(binascii.a2b_hex("00ffd8ffe0"))+1:] Recovery_File.write(Buffer) if Data[:-6] == "ffd900" or Data.find("00ffd9") != -1: Recovery_File.close() Flag = 0 return 1 if Data[:8] == "ffd8ffe0" : Flag = 1 print "Header!" Recovery_File = open("C:\\Carving\\Recovery\\"+str(EIP)+".jpg", "wb") Recovery_File.write(Buffer) if len(sys.argv) > 1 : main() | cs |
http://blog.naver.com/bitnang?Redirect=Log&logNo=220218322877
'코딩 > Python' 카테고리의 다른 글
#7. Django에 SSL 달아주기 (0) | 2018.02.13 |
---|---|
#6. Django와 Apache2 연동하기 in 라즈베리파이3 (0) | 2018.02.13 |
#5. 파일전용 hash 뷰어를 만들어보자 (0) | 2018.02.13 |
Django에서 robots.txt 처리하기 (0) | 2018.01.19 |
#4. 티스토리 이미지 크롤링 (0) | 2017.07.28 |
블로그의 정보
Data+
Qerogram