no image
hex viewer의 일대기
개요최근에 들어 포렌식 공부를 하고 있는데 나중에 취업을 생각하면 내가 공부한 것을 증명할 수 있어야 할 것 같다. 비전공자인 나로써는 아무런 정보도 없이 독학하는 편인데 흔히 컴공을 졸업하면 그 동안에 만들었던 프로그램들을 하나의 포트폴리오로 제출할 수가 있겠구나라는 생각이 들면서 이젠 나도 그러한 준비를 해야겠다는 생각이 들어서 무엇이든 간에 직접 만들어보자라는 마음으로 헥사뷰어를 만들고자 다짐했다. 리버싱으로 보안 공부를 시작한 내 입장에선 가장 먼저 접한 툴이 바로 OllyDBG와 HxD인데 디버거를 구현하기엔 프로그래밍 실력이 너무나 허접할 것 같기에 HxD의 기능을 가진 프로그램을 만들어보게 되었다. 그래서 그 과정에서 어떠한 생각을 하고 어떻게 프로그래밍을 했는지 담아보고자 이렇게 문서로 작..
2015.11.04
Upgrade - Hex_Viewer.py
2015.11.03
Simple - Hex_View.py
2015.11.02
no image
Python API
http://overapi.com/python/
2015.10.06
no image
File System Tunneling
File System Tunneling파일시스템 터널링이란 짧은 시간동안 해당 폴더에 삭제된 파일의 이름과 같은 파일을 생성할 경우 생성시간이 유지된다는 개념이다. 기본적으로 시간은 15초이며 이는 FAT와 NTFS에서 기본적으로 지원하는 기능이다.이는 사실상 두번째로 생성된 파일이 삭제된 파일의 메타데이터(타임스탬프)를 재사용 하는 것이다. 이는 파일이 제거될 때 제거된 파일의 메타데이터는 임시적으로 저장되는데, 이 임시로 저장된 메타데이터는 같은 파일의 이름이 생성될 경우 해당 파일을 가리키며 결국 타임스탬프가 유지된다. Practice - 1간단한 실습을 해보자면 아래의 그림과 같이 dir /tc 옵션을 통하여 파일의 생성시간을 확인할 수가 있다. 처음의 file1의 생성시간은 PM 06:33으로 ..
2015.09.23
XPRESS Decompress by Python
2015.09.11
Python : Anti-Virus 키콤
파이썬을 통하여 만든 안티바이러스(백신) 오픈소스이다. 파이썬과 백신에 대하여 공통적으로 관심이 있는 분이라면 한번쯤 사이트에 들어가서 소스를 보는 것도 괜찮을 것 같아서 올립니다. http://www.kicomav.com/ 키콤 사이트http://www.hanul93.com/ 키콤을 만드신 최원혁씨의 블로그 About KicomAVKicomAV is an open source (GPL v2) antivirus engine designed for detecting malware and disinfecting it. In fact, Since 1995, it has been written in C/C++ and it was integrated into the ViRobot engine of HAURI, 1..
2015.09.07
Python Error : IndentationError
IndentationError: unindent does not match any outer indentation level들여쓰기에 문제가 있는 것이다. 가령 복붙을 했을 경우 '탭'으로 인식하지 않고 '스페이스바로' 인식될 경우에도 이러한 에러가 발생한다. 그러므로 이 에러가 있는 지점은 들여쓰기를 다 지운 다음에 다시 다른곳과 맞추는 것이 좋다.
2015.08.26

개요


최근에 들어 포렌식 공부를 하고 있는데 나중에 취업을 생각하면 내가 공부한 것을 증명할 수 있어야 할 것 같다. 비전공자인 나로써는 아무런 정보도 없이 독학하는 편인데 흔히 컴공을 졸업하면 그 동안에 만들었던 프로그램들을 하나의 포트폴리오로 제출할 수가 있겠구나라는 생각이 들면서 이젠 나도 그러한 준비를 해야겠다는 생각이 들어서 무엇이든 간에 직접 만들어보자라는 마음으로 헥사뷰어를 만들고자 다짐했다.

리버싱으로 보안 공부를 시작한 내 입장에선 가장 먼저 접한 툴이 바로 OllyDBG와 HxD인데 디버거를 구현하기엔 프로그래밍 실력이 너무나 허접할 것 같기에 HxD의 기능을 가진 프로그램을 만들어보게 되었다. 그래서 그 과정에서 어떠한 생각을 하고 어떻게 프로그래밍을 했는지 담아보고자 이렇게 문서로 작성하여 본다.


고뇌의 시작


우선 그나마 친한 프로그래밍 언어가 파이썬이기에 파이썬으로 프로그래밍을 하고자 하였다. 먼저 헥사뷰어의 기능을 생각해보았을 때 어떻게 코드가 구성이 될지를 생각해보았다.  f=open(file,'rb'), f.read()...음....답이 없었다. 큰 흐름이 보이지 않았다. 결국 구글링을 통해 다른 사람이 만들어놓은 코드를 한번 직접 보고 실행해보자라는 결정에 이르게 되었다. 그렇게 해서 찾게 된것이 아래의 코드였다.

출처 : http://mwultong.blogspot.com/2007/04/python-hex-viewer-file-dumper.html


우선 소스코드를 한번 읽어본 다음에 바로 실행하였다. 그 결과 아래와 같은데 이를 보자마자 들었던 생각은 "오....!!이거다 이거"라는 생각이였다. 따라서 이를 토대로 한번 직접 코드를 수정해서 '백문이불여일타'라는 어느 프로그래밍 책에서 보았던 말을 실천해보기로 하였다.


고뇌의 연속


우선 전체적인 코드를 읽어봤을 때 내용은 쉬웠다. 하지만 딱 한 곳 이해가 잘 안되는 곳이 있었는데 바로, 위의 코드에서 30번째 라인이다. 한 줄에 비트씩 기록이 되는데 그 길이가 16이 아닐 경우 공백으로 채우는 것이다. 하지만 for i in range( ((16 - bufLen) *3 ) + 1): 에서 곱하기 3이 쫌 불편해보였다. 단순한걸 좋아하는데 곱셈이라니.. 그래서 결국 해당 공백을 채우는 목적만 같으면 되므로 저 부분만 수정을 하고 거의 대체적으로 비슷하게 코드가 완성되었다. (거의 빼껴씀..)

위에서 말했던 부분을 그냥 for i in range(16-len_data) : result+='   '과 같이 그냥 공백을 세칸으로 주었다. 그 외에는 너무 유사(모방은 창조의 어머니)하다. 하지만 직접 코드를 따라 쓰고 실행을 했을 때 결과는 똑같았다. 하지만 문제가 있었다. 헥사뷰어를 통해서 보통 exe파일을 보던 사람임으로 실제 exe파일을 넣고 해보았더니 아래와 같이 되었다.

해당 exe파일의 시그니처를 보고자 했는데 CMD로는 용량이 어느정도 이상으로 넘어가면 더 이상 윗부분을 볼 수가 없는 것이였다..!!!이는 치명적이였다. 물론 리다이렉션을 통해서 메모장으로 넘긴다음에 볼 수도 있지만 기분이 정말 나빳다. 내가 저딴 CMD에게 굴복하는 듯한 치욕감이 들었다.  그래서 다시 고뇌에 잠기게 되었다.


고뇌의 완화


저걸 어찌해야하나 고민하다가 문득 생각 난것이 그렇다면 특정 오프셋을 지정해주면 그에 해당하는 오프셋으로부터 일정부분만 출력하도록 하는 것은 어떨까라는 생각이였다. 정말 기특했다. 자 이제 이를 어떻게 구현할까 생각해보았다. 고려해야할 사항은 다음과 같았다.

- 원래의 기능이 손상되면 안되었다. 원래의 기능은 유지한채 추가적인 기능을 넣을 것

- 사용자가 해당 오프셋을 지정하기 위해서는 인자를 통해 주는 것이 아무래도 편리

이렇게 초점을 맞추고 구상을 해보았다. 하지만 이렇게 하기에는 앞에 코드가 너무 난잡하였다. 그래서 한번 다시 깔끔하게 정리를 해보기로 하였다. 정말 웬만한건 다 제외시켜 버렸다. 그 결과는 아래와 같다.

오...이렇게 다시 작성을 해보니 뭔가 내 자신이 대단해보였다. 원래 참고했던 코드보다도 간결해보여서 뿌듯했다. 이제 이를 토대로 추가적인 기능을 구현해보고자 했다. 

- 인자가 주어지지 않을 경우에는 원래의 기능으로 동작

- 인자가 주어질 경우 새로 추가할 기능으로 동작

이렇게 정리가 되는데, 떠오른 것이 if와 try였다. 근데 왠지 if는 뭔가 느낌이 좋지 않았다. 따라서 try를 통해서 sys.argv[2]가 존재할 경우를 기술하고 만약 sys.argv[2]가 존재하지 않아 프로그램이 except로 진행이 될 때는 원래의 기능이 실행되도록 하였다. 이를 머리로 생각해보았을 때 대체로 아래와 같은 큰 그림이 그려진다.

위의 그림을 가지고 대체적인 코드를 짜보았다. 그 과정에서 많은 에러가 있었지만 결국 완성하긴 했다. 하지만 뭔가 코드가 쓸 때 없이 반복되고 너무 길었다. 매우 비효율적인 것만 같았다. 

결국 이 또한 수정을 하기로 마음 먹었다. 하지만 여기까지하고 학교 강의로 인하여 중단을 해야만했다. 그래서 수업중에 노트에 한번 구상을 해보기로 했다. 일단 기존 코드에 중첩되는 부분을 def를 통하여 함수로 만들어 뺀 후에 필요한 부분만 좀 수정해주면 될 것 같다는 결론에 이르었다.


완성




이렇게 하여 뭔가 깔끔하게 완성이 되었다. 사실 별로 보잘 것 없는 프로그래밍이지만 비전공자인 나에겐 프로그램 하나를 만들 때마다 매우 흥미롭다. 그렇기에 한번 쯤은 이러한 과정을 담아보고 싶었고, 이 후 다시 어떠한 프로그램을 만들어볼까라는 생각이 들기 전까지는 다시 포렌식 공부를 열심히 할 것 같다.


'Programming > Python' 카테고리의 다른 글

Prefetch Parser 제작기  (4) 2015.12.26
Windows Timestamp Convert 64bit  (0) 2015.12.12
Upgrade - Hex_Viewer.py  (0) 2015.11.03
Simple - Hex_View.py  (0) 2015.11.02
Python API  (0) 2015.10.06



'Programming > Python' 카테고리의 다른 글

Windows Timestamp Convert 64bit  (0) 2015.12.12
hex viewer의 일대기  (1) 2015.11.04
Simple - Hex_View.py  (0) 2015.11.02
Python API  (0) 2015.10.06
XPRESS Decompress by Python  (0) 2015.09.11




'Programming > Python' 카테고리의 다른 글

hex viewer의 일대기  (1) 2015.11.04
Upgrade - Hex_Viewer.py  (0) 2015.11.03
Python API  (0) 2015.10.06
XPRESS Decompress by Python  (0) 2015.09.11
Python : Anti-Virus 키콤  (0) 2015.09.07

Python API

Kail-KM
|2015. 10. 6. 18:08

'Programming > Python' 카테고리의 다른 글

Upgrade - Hex_Viewer.py  (0) 2015.11.03
Simple - Hex_View.py  (0) 2015.11.02
XPRESS Decompress by Python  (0) 2015.09.11
Python : Anti-Virus 키콤  (0) 2015.09.07
Python Error : IndentationError  (0) 2015.08.26

File System Tunneling

Kail-KM
|2015. 9. 23. 19:51

File System Tunneling


파일시스템 터널링이란 짧은 시간동안 해당 폴더에 삭제된 파일의 이름과 같은 파일을 생성할 경우 생성시간이 유지된다는 개념이다. 기본적으로 시간은 15초이며 이는 FAT와 NTFS에서 기본적으로 지원하는 기능이다.

이는 사실상 두번째로 생성된 파일이 삭제된 파일의 메타데이터(타임스탬프)를 재사용 하는 것이다. 이는 파일이 제거될 때 제거된 파일의 메타데이터는 임시적으로 저장되는데, 이 임시로 저장된 메타데이터는 같은 파일의 이름이 생성될 경우 해당 파일을 가리키며 결국 타임스탬프가 유지된다.


Practice - 1


간단한 실습을 해보자면 아래의 그림과 같이 dir /tc 옵션을 통하여 파일의 생성시간을 확인할 수가 있다. 처음의 file1의 생성시간은 PM 06:33으로 되어있다. 이제 ren 명령어를 통하여 해당 파일의 이름을 file2로 변경하여준다.

그 후 echo > file1을 통하여 새로운 file1을 생성한다. 여기서 파일의 생성시간을 확인하기 위하여 다시 dir /tc 옵션을 줄 경우 기존의 file1의 생성시간과 같다는 것을 확인할 수가 있다. 저 시점에서의 현재시간은 19:23:09.47로 현재 시간이 아닌 기존 파일의 생성시간을 갖는 것을 확인할 수가 있다.


이처럼 새로 생성된 파일이 그 내용 또한 갖고 오는지 확인하기 위하여 확인을 해본 결과, 타임스탬프는 가지고 오지만 해당 파일의 내용까지 가지고 오는 것은 아님을 확인할 수가 있었다.


Practice - 2


이번엔 직접 악성코드가 어떻게 동작할지 예상을 해보기 위하여 파일 시스템 터널링이 어떻게 동작할지 직접 Python을 통하여 코드를 작성해보고 실행해보았다. 가상의 시나리오는 악성코드가 kernel32.dll을 삭제하고 해당 폴더에 다시 같은 이름으로 악의적인 DLL을 설치하는 과정을 가정해보았다.

기존의 kernel32.dll의 data는 "ECHO가 설정되어 있습니다." 이지만 해당 악성코드를 실행후에는 "This is File System Tunneling."으로 변화한 것을 볼 수가 있다. 여기서 생성 시간은 유지되므로 대체적으로 운영체제가 설치될 때의 시간과 같은 생성시간(다른 정상적인 주요 DLL과 같이)을 띄고 있다.


이에 해당하는 코드는 아래와 같다. (...허접하다 참)


Reference


http://forensic-proof.com/archives/4829

'Forensic > Theory' 카테고리의 다른 글

LNK File ( Windows ShortCut)  (0) 2015.09.27
Jump List  (0) 2015.09.27
Web Forensic  (0) 2015.09.19
Covert TimeStamp  (0) 2015.09.18
ADS (Alternate Data Stream)  (0) 2015.09.17



'Programming > Python' 카테고리의 다른 글

Simple - Hex_View.py  (0) 2015.11.02
Python API  (0) 2015.10.06
Python : Anti-Virus 키콤  (0) 2015.09.07
Python Error : IndentationError  (0) 2015.08.26
Hotel_Sniff.py  (0) 2015.07.08

파이썬을 통하여 만든 안티바이러스(백신) 오픈소스이다. 파이썬과 백신에 대하여 공통적으로 관심이 있는 분이라면 한번쯤 사이트에 들어가서 소스를 보는 것도 괜찮을 것 같아서 올립니다.

http://www.kicomav.com/            키콤 사이트

http://www.hanul93.com/            키콤을 만드신 최원혁씨의 블로그


About KicomAV


KicomAV is an open source (GPL v2) antivirus engine designed for detecting malware and disinfecting it. In fact, Since 1995, it has been written in C/C++ and it was integrated into the ViRobot engine of HAURI, 1998. I decided to re-create a new KicomAV. So, this is developed in Python. Anyone can participate in the development easily.

How to use


Requirements

- Python 2.7

Quick start

        - Three quick start options are available:

  - Download the latest release and unzip it

  - Clone the repo: git clone git://github.com/hanul93/kicomav.git

  - Build KicomAV Engine & Plugins modules : build.sh or build.bat

  - You can see Release Directory. Change the Release directory and run k2.py


'Programming > Python' 카테고리의 다른 글

Python API  (0) 2015.10.06
XPRESS Decompress by Python  (0) 2015.09.11
Python Error : IndentationError  (0) 2015.08.26
Hotel_Sniff.py  (0) 2015.07.08
Analysis_pcap.py  (0) 2015.07.07

IndentationError: unindent does not match any outer indentation level

들여쓰기에 문제가 있는 것이다. 가령 복붙을 했을 경우 '탭'으로 인식하지 않고 '스페이스바로' 인식될 경우에도 이러한 에러가 발생한다. 그러므로 이 에러가 있는 지점은 들여쓰기를 다 지운 다음에 다시 다른곳과 맞추는 것이 좋다.

'Programming > Python' 카테고리의 다른 글

XPRESS Decompress by Python  (0) 2015.09.11
Python : Anti-Virus 키콤  (0) 2015.09.07
Hotel_Sniff.py  (0) 2015.07.08
Analysis_pcap.py  (0) 2015.07.07
Skype_GetiDB.py  (0) 2015.07.07