- 파이썬으로 파일시스템 깊이 있게 분석하기 -1-(http://maj3sty.tistory.com/1115)


이전 글에서는 이미지(Raw 포맷)에 접근하여 볼륨 정보 등을 얻어내는 작업을 해보았다. 이번에는 실제 파이썬 스크립트가 실행되는 로컬 환경 볼륨에 접근하는 방법을 살펴보자.


이미지 파일은 파일이기 때문에 파일 오픈 핸들을 pytsk3 모듈에 입력해 주면 됐지만 로컬 환경은 장치 핸들을 pytsk3 모듈에 입력을 해주어야 한다. 장치와 파일의 차이는 크지만, 코드는 이전 코드와 많이 다르지 않다. 아래 코드는 글쓴이의 가상환경에서 작성한 파이썬 스크립트와 실행 결과이다.




이번에는 NTFS 파일시스템 2개 존재하는 것을 확인할 수 있다. 로컬 환경과 이미지 파일은 접근하는 대상만 다를 뿐 다루는 방법은 동일하다는 것을 알 수 있다. 위 소스코드는 아래 첨부해 두었으니 한번 확인해 보기 바란다.


Day2.zip


디지털 포렌식에서는 기본으로 다뤄야 할 부분이 파일시스템이다. 휘발성 데이터 뿐만 아니라 비휘발성 데이터까지 모두 파일시스템에 저장되기 때문에 실제 업무에서나 챌린지 문제 풀이에서나 파일시스템 분석은 중요하다고 볼 수 있다.


그래서, 시간이 되는대로 파이썬으로 파일시스템을 다뤄보는 글을 쓸 예정이다. 언어는 사람들이 쉽게 가장 많이 쓰는 파이썬(파이썬 언어 자체의 설명은 생략한다.)으로 하여 파일시스템 이미지 포맷인 E01과 Raw 포맷을 대상으로 여러가지 분석을 할 수 있는 코드를 작성해보고 해당 소스코드는 제공할 생각이다.


일단 먼저, 파이썬 모듈이 필요하다. 우리가 주로 사용할 모듈은 파일시스템을 분석해 주는 'pytsk' 모듈이다. 각 모듈에 대한 설명은 다음과 같다.


 - pytsk : pytsk 모듈은 SluethKit과 Autopsy의 파이썬 버전이라고 생각하면 된다. 여러 운영체제의 파일시스템 분석을 지원하는 아주 유용한 툴이다. 분석 기능이 많아 사용법은 조금 까다롭다. 해당 모듈의 사용법 또한 소스코드를 작성하며 알아보도록 하자.


pytsk3-4.1.3-20140506.win32-py2.7.msi


각 모듈의 설치는 쉬우므로 설명을 생략하도록 하겠다.



소스코드 작성 환경은 다음과 같다.

 - 운영체제 : Windows 7 / 8 32/64bit

 - 파이썬 버전 : Python 2.7 32bit

 - 에디터 : PyCharm 4.x


[이미지 파일 접근 해보기]

이미지 파일은 이미지 대상 크기와 이미지 파일 포맷에 따라 처리하는 방법이 다르다. 일단 처음이니 만큼 용량이 작은 Raw 포맷을 대상으로 처리 방법을 알아보자. 모듈이 설치 되었다면 아래와 같이 'pytsk3' 모듈을 import 하여 사용하면 된다.



볼륨 파싱이 완료되면 볼륨 정보를 가지고 있는 클래스 개체 하나를 반환하며, 각 클래스 개체는 Property 함수로 필요한 데이터를 반환하도록 되어 있다. 소스코드에 나온 정보 말고도 다양한 정보가 있으니 각자 확인해보도록 하자. 스크립트를 실행하면 결과는 다음과 같다.




출력을 보면 4개의 결과가 나왔지만, "Primary Table"과 "Unallocated" 항목을 제외하면 "NTFS" 파일시스템 하나만 있는 것을 확인할 수 있다. 그러므로 해당 파일시스템을 타겟팅하여 분석을 진행해 나가면 된다.


해당 소스코드와 프로젝트는 아래에 첨부하여 두었다.


Day 1.zip


문제 URL : http://www.pythonchallenge.com/pc/def/linkedlist.php

위 주소로 접속하면 아래와 같은 문제가 나온다.


이미지 위에 마우스를 올리면 링크접속을 나타내는 마우스 아이콘으로 바뀐다.

링크에 접속하면 아래와 같이 나온다.


인자값으로 nothing=12345 이렇게 넘어가는데 44827값을 인자값으로 넘겨주면 또 다른 숫자가 출력이 된다.

계속 나오는 숫자를 넘겨주다보면 무언가 나오겠거니 하고 코딩을 하여 보내보았다.

해당 문제풀이코드 알고리즘은 간단하다. 새롭게 나오는 숫자를 얻어와서 다시 보내주면 되는 것이다.

여기서는 통신 프로그래밍을 해야 하므로 urllib(설명 주소 : http://docs.python.org/library/urllib.html) 모듈과 숫자를 파싱해서 다시 보내줘야 하므로 re모듈을 사용하였다.

코드 설명은 주석으로 처리 해 놨다.



출력 결과는 아래와 같다.


맨 마지막 문장을 보니 2로 나누어 다시 보내라고 한다.

소스코드를 수정하여 다시 보내면 아래와 같이 나온다.

소스코드



출력 결과


다음문제는 peak.html이 되겠다.

'[+] Information > [-] Python' 카테고리의 다른 글

Short URL -> Long URL Convert Script  (0) 2013.01.14
Python과 Eclipse 연동하기  (0) 2012.08.07
level 4  (0) 2011.10.23
level 3  (0) 2011.10.23
level 2  (0) 2011.10.23

문제 URL : http://www.pythonchallenge.com/pc/def/equality.html

위 주소로 접속하면 아래와 같은 문제가 나온다.


대충 의역하면 3개의 보디가드가 둘러쌓고 있는 편지?! 뭐 이런식인데..

소스를 보니 아까와 다르게 엄청난 알파벳들이 있다.

자세히 보면 문제의 의미를 알 수 있다.

aGFTlBSFs 이런식으로 되어있는 부분이 있는데 이 구조를 정규식으로 표현하여 이 부분들만을 추출하면 문제는 풀린다.

표현할 구조가 소문자1 대문자3 소문자1 대문자3 소문자1 이런식인데 python 정규식을 보면 {숫자}라는 메타가 있다.

[a-z]{2} 라는 정규식을 만들어 함수에 적용하면 a-z를 두번 찾는다.

이걸 이용하여 정규식을 만들면

1. [a-z] --> 소문자 1
2. [a-z][A-Z] --> 소문자1 대문자1
3. [a-z][A-Z]{3} --> 소문자1 대문자3
4. [a-z][A-Z]{3}[a-z] --> 소문자1 대문자3 소문자1
5. [a-z][A-Z]{3}[a-z][A-Z] --> 소문자1 대문자3 소문자1 대문자1
6. [a-z][A-Z]{3}[a-z][A-Z]{3} --> 소문자1 대문자3 소문자1 대문자3
7. [a-z][A-Z]{3}[a-z][A-Z]{3}[a-z] --> 소문자1 대문자3 소문자1 대문자3 소문자1

이런식으로 해서 결과적으로 [a-z][A-Z]{3}[a-z][A-Z]{3}[a-z] 이런 정규식이 만들어진다.

여기서 search나 match되는 개체를 리턴 받으려면 ()를 해줘야 하므로 가운데에 있는 소문자 정규식을 ()처리 해주면 함수에 적용할수 있는 정규식이 완성된다.

아래는 소스와 결과물이다.


'[+] Information > [-] Python' 카테고리의 다른 글

Python과 Eclipse 연동하기  (0) 2012.08.07
level 4  (0) 2011.10.23
level 3  (0) 2011.10.23
level 2  (0) 2011.10.23
level 1  (0) 2011.10.23
문제 URL : http://www.pythonchallenge.com/pc/def/map.html

위 문제로 접속하면 아래와 같은 이미지가 출력된다.




이미지에 있는 노트를 보면 어떠한 문자가 어떠한 문자로 치환되는지 알 수 있다. 메모장으로 치환문자들을 써놓고 보면 일정한 규칙이 보이는데 해당 규칙에 따라 치환된 문자들을 만들어보면 아래와 같다.


해당 규칙을 토대로 코딩을 할 수 있긴 하겠지만 코드가 길어져 파이썬에는 문자 치환 함수가 없을까 하고 검색해봤지만 나오지 않아 고민하던 중 문제에 qrpgle.kyicrpylq() 이런 문구가 보여 규칙을 토대로 치환해 보기로 하였다.

치환한 결과는 아래와 같다.




파이썬 shell에서도 있는걸로 보아 이 문제에 핵심인거 같아 구글링 하여 찾아보니 이 함수가 문자열 치환 함수였다.

이 함수를 이용하여 아래와 같은 코드를 작성하여 치환문자를 다시 복호화 했다.



복호화하고 보니 문제에서는 string.maketrans()(함수 Ref : http://maj3sty.tistory.com/749)를 이용하여 url을 바꿔보라고 하였다.

URL전체를 바꾸면 접속자체가 안될 것이니 문제서버에서 바꿔도 될만한 html 파일 이름을 바꾸기로 하여 map글자를 다시 한번 바꿔보기로 하였다.

아래는 최종 소스코드와 결과물이다.




map -> ocr로 변경되어 다음 문제 url이 된다.

'[+] Information > [-] Python' 카테고리의 다른 글

level 3  (0) 2011.10.23
level 2  (0) 2011.10.23
level 1  (0) 2011.10.23
level 0  (0) 2011.10.23
열혈강의 파이썬 잘못된 소스부분.  (2) 2009.08.23

+ Recent posts