'Project'에 해당되는 글 7건

  1. 2011.05.05 Sparouts World - Windows7 Mobile App (4)
  2. 2011.04.08 사용자 분석을 위한 포렌식 도구 Winproof [ 동영상 ] (1)
  3. 2011.03.07 사용자 분석을 위한 포렌식 도구 Winproof (17)
  4. 2010.09.02 [Bada Developer Challenge ] Contacts Ranking (1)
  5. 2010.06.08 The Contents for Studying English using American TV Dreamas (3)
  6. 2010.03.11 Google Distance + TTA + KNN
  7. 2009.12.08 FunnyPE (4)

Naver Perl Community & Study Cafe


2011.05.05 07:17

Sparouts World - Windows7 Mobile App





Team Name : Gimme Gimmes Team

Project Leader :
lscpjyoon 

Progammer : h0ney ,  golee07

Designer : rayruna


행복했던 프로젝트 :)




신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 2 Comment 4
2011.04.08 11:20

사용자 분석을 위한 포렌식 도구 Winproof [ 동영상 ]



프로그램은 작년에 완성이 되었는데 미루고 미루다가
이번에 새로 동영상을 찍었습니다.

프로그램 설명은 아래 링크에 있습니다 :)
http://honeyperl.tistory.com/121

facebook도 동영상이 깔끔하게 올라가네요~
고화질로 보시려면 HQ를 눌러주시길!
외부링크를 쓰니깐 HQ 고화질 모드가 지원이 안되는군요.. ㅠ_ㅠ
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 1
2011.03.07 05:38

사용자 분석을 위한 포렌식 도구 Winproof




사용자 분석을 위한 포렌식 도구 Winproof 

Team Name : Source Diet

Project Leader :
h0ney
Project Member : lscpjyoon,  golee07
Development-time : 2010.9.1 ~ 2010.11.31

개발 환경 : Windows XP
개발 도구 : MS Visual Studio 2008
개발 언어 : C/C++, C# , perl
버전 관리 : SVN

작년 한해동안 했던 여러 프로젝트 중에서
가장 심혈을 기울였던 작품입니다.

프로젝트를 시작하기 전 사전조사만  2달동안 밤새도록 했고,
국내와 국외의 포렌식 자료는 모조리 조사하고 긁어모으며,
포렌식이라는 학문을 이해하려고 노력하였습니다.

어떻게 하면 기존의 있는 도구보다 더 나은 툴을 만들 수 있을까
차별화된 기능은 무엇인가 많은 고민도 했지만,
기본 기능에도 충실했던 프로젝트입니다.

디지털 포렌식이 무엇인지 알고 싶으신 분은 제 블로그의 Forensic 이란? 을 읽어봐주세요 :)


- System Architecture




윈도우 XP 운영체제에서 닷넷프레임워크 3.5 C# 으로 제작을 하였으며

Assessment/Intergrity(평가 / 무결성 확보), Acquisition(수집), Analysis(분석), Restore(복구),
Document(문서화 및 보고)로 이루어 집니다.

이 과정에 따라 전체 적인 Architecture를 구성 하였으며,
데이터를 수집 시에 무결성, 저장 매체에 대한 디스크 이미징 기술,
정보 수집 기술을 바탕으로 데이터를 수집 합니다.

수집한 데이터를 바탕으로 복구기술을 거쳐,
필요한 정보들을 뽑아 내어, Registry Hive , Web Log, System Log 의 분류에 따라
데이터를 분류하여 분석하게 됩니다.

디지털 증거를 분석하고, 분석 완료 후 분류된 데이터를 타임프레임(timeframe)으로 표현이 가능하며, 
분석 결과 및 전반적인 절차와 정보를 기술한 보고서를 작성 할 수도 있습니다.



Winproof는 디지털 데이터 원본 저장소로부터 데이터를 획득하여
원본 저장소의 배드섹터를 제외한 모든 디지털 데이터 원본과
비트 단위로 동일하게 생성하여 복사 원본 생성 합니다.

이런 과정에서 무결성을 확보 하기 위하여 MD5를 사용 하였으며
비휘발성 데이터를 복제할 경우 활성 파일 시스템의 타임스탬프가 변경될 가능성이 있으므로
복사하기 전 실제 원본 데이터의 타임 스탬프를 저장 한 후,
복사 완료시 실제 원본데이터의 타임스탬프의 시간대로 적용 시켰습니다.

획득한 복사 원본들을 데이터 유형에 따라 데이터를 분류하여 상세 분석을 하였으며,
타임프레임(timeframe)에 따른 분류를 통해 효율적이고, 신속한 증거 분석을 가능 하게 해줍니다.


- System Main UI



Winproof 의 메인 화면입니다.

분석은 2가지 모드로 이루어지며  Nomal 모드와 Document 모드로 구성되어 있습니다.



Nomal 모드는 총 4가지 모드로 이루어져 있으며,
레지스트리 분석, 웹로그 분석, 시스템 로그 파일 분석, 파일 복구 기능을 수행 할 수 있습니다.



Document 모드에는 TimeLine 기능과 문서 생성 기능을 수행 합니다.

TimeLine은 Registry, Systemlog, Weblog에서 분석된 데이터를 
년, 월, 일 시에 따른 로그별 데이터 타임 라인을 제공합니다.

문서 생성 기능에서는 사용자 지정에 따른 각 모듈별 문서 작성 기능 및 문서 출력 기능을 할 수 있습니다.




Normal모드에는 디지털 증거 데이터를 상세 분석을 위한,
Registry Analysis, WebLog Analysis, Local Analysis, FileRecovery 기능이 있으며,
Documnet 모드는 Timeline Mode, 시나리오에 따른 문서화 기능으로 구성 되어 있습니다.

Setting 모드에는 디지털 저장 매체를
디스크 이미징, 조사관, 조사번호, 조사 내용을 설정을 위한 설정으로 되어 있습니다.



디지털 저장 매체로부터 디스크 이미지를 하기 위해,
디지털 저장의 볼륨명을 선택 하는 장면입니다.

간단히 저장 매체에 대한 이름, 볼륨 타임, 파일 시스템 종류,
사용 중인 공간, 사용 가능한 공간 디스크 용량을 알 수 있다.



디스크 이미지 완료 후에는 설정 창에서 Registry, Web, SystemLogFile 등
수집된 데이터들의 종류를 확인 할 수 있습니다.



디지털 저장 매체로부터 디스크 이미지 한 볼륨에 대한 정보를 확인 할 수 있으며
이미지 디스크 드라이브명, 볼륨 시리얼 번호, 이미징 파일 수, 삭제된 파일 수, 총 섹터 수, 시작 섹터,
섹터당 바이트수, 클러스터 바이트수 등에 대한 정보를 확인할 수 있습니다.


- Registry Analysis




레지스트리 하이브파일은 총 6개의 파일로서 사용자의 레지스트리에서 추출해온 데이터를 통해 분석을 합니다.

하이브 파일 분석으로 노드를 구성할 시 약 40만개 이상의 노드로 구성 되기 때문에
속도문제를 우선시로 하여 알고리즘을 처리 했으며, 분석이 완료된 시점에서 완료 버튼이 활성화 되게 됩니다.



레지스트리 Viewer 의 메뉴는 왼쪽과 같습니다.
큰 메뉴로는 레지스트리 Hive 정보, 원본 레지스트리 Tree , 기본정보, 파일 , 활동정보, 로그 등이 있습니다.

 하위메뉴로는 각각의 설정값에 따른 정보들이 있고,
이 설정값들은 원본 레지스트리 Tree의 값들을 참조해서 분석이 된니다.



분석된 Hive 파일을 통해 트리노드를 구성해주며,
윈도우와 동일한 인터페이스를 통해, 분석이 쉽도록 직접 구성을 하였습니다.
각 키 값에 따른 Value 리스트를 확인 할 수 있고, 키의 값들을 직접 확인도 가능합니다.


Registry 종류에 따라 각각의 데이터를 볼 수 있는 Viewer 를 구성하여 선택된 값을
자세하게 확인할 수 있도록 하였습니다.


 키 바로가기 기능은 해당 키를 바로 접근할 수 있습니다.
중요한 키를 바로 접근이 가능하며, 키가 없을 경우 접근하지 못합니다.

검색모드는 2가지로 나누어 집니다.
첫 번째로 내용을 대상으로 찾는 방법, 두 번째로는 날짜별 검색입니다.
날짜별 검색은 키, 값, 데이터를 기준으로 검색이 가능하며,
검색은 일반 레지스트리의 속도보다 훨신 빠르게 검색됩니다.





레지스트리 트리의 현재 키를 북마크에 저장 할 수 있고, 그 키들을 다시 찾아 갈 수 있습니다.





사용자 정보는 윈도우에 있는 사용자에 대한 계정별 정보를 나타냅니다.
사용자의 이름, 설명 홈 폴더경로 등과, 최종 로그인 시간 로그인 횟수 등 중요한 정보들을 가지고
있어 조사관이 분석을 할 때 필수적으로 필요한 항목 중 하나입니다.




윈도우의 설치정보는 윈도우 종류, 버전 , 시스템 루트 , 설치 시각 등을 알 수 있습니다.




네트워크 인터페이스 정보는 컴퓨터에 설치된 인터페이스 카드들의 정보를 알려 줍니다.
각 네트워트 인터페이스 카드별로 당시네트워크 환경을 그대로 재구성되기 때문에
매우 중요한 정보들을 담고 있습니다.


사용자가 접근했던 파일에 따른 정보들을 나열해주고  최근 접근한 파일, 최근 저장된 파일,
Explorer에서 열어본 파일의 정보를 알 수 있습니다.


 최근에 저장된 파일을 확장자에 따라 확인할 수 있습니다.
각 확장자를 클릭하면 해당 확장자에 따른 파일을 확인할 수 있습니다.
위와 마찬가지로 최근에 접근한 순서대로 정렬을 합니다.



 레지스트리 키의 바이너리 파일을 분석하면 Explorer에서 열었던 파일을 확장자 별로 확인할 수 있습니다.



활동했던 정보는 접근했던 Web Site, 실행창에서 입력된 프로그램, 실행된 최근 프로그램,    
설치되었던 소프트웨어 등을 알 수 있습니다.

Explorer에서 접근 했던 WebSite 를 알 수 있고, 바로 그 웹사이트를 확인이 가능합니다.


실행창에서 입력했던 정보까지 알수있죠 :)


레지스트리 키인 UserAssist 를 통해 실행된 최근 프로그램의 파일의 경로 및 실행 횟수,
마지막 접근시간 등을 알 수 있다. 해당 프로그램에 따라 프로그램의 설명도 확인할 수 있습니다.


설치된 소프트웨어 뿐만이 아닌 설치되었던 모든 소프트웨어를 확인 할 수 있으며,
설치된 시각, 프로그램의 이름까지 확인이 가능합니다.
자세한 정보를 확인하기 위한 키 경로를 제공하며 키에 접근도 가능합니다.



USB 사용로그는 USB의 설정을 알 수 있으며 USB를 연결한 시각을 시작해서
USB의 이름, 장치설명, 장치 종류 등을 확인할 수 있습니다.


- Web Log Analysis




Winproof에서는 웹 브라우저 시장 점유율의 90%이상을 차지하는
Internet Explorer, FireFox, Chrome의 생성 파일 분석을 통하여
사용자 웹 브라우저 사용 내역을 효율적으로 추척 할 수 있도록 구현 하였습니다.

Internet Explorer의  Index.dat view, Chrome의 Log File view, Firefox Log File view 기능을 통하여,
사용자의 인터넷 사용 내역을 자세히 볼 수 있는 기능을 구현 하였습니다.

또한 3개의 웹 브라우저의 공통 내역인
방문 사이트, 검색어, 즐겨 찾기, 다운로드 정보 등을 볼 수 있도록 구현 하였습니다.



Internet Explorer는 윈도우즈 시스템에 기본적으로 설치 되어 있으며,
Internet Explorer는 Temporary Internet File, Cookies, History 폴더에 인터넷 사용 자용 정보를 저장합니다.

Temporary Internet File 폴더는 웹 서버로부터 불러온 임시 파일을 저장하며,
Cookies 폴더는 쿠키 파일을, History폴더는 사용자가 접속한 웹 사이트의 목록을 저장합니다

3곳 모두 index.dat파일을 통하여 관련 정보를 관리하는데
각 폴더의 index.dat 파일은 크게 header, Hash table, Activity record 3부분으로 구성 되어 있으며,
각 레코드 부분에서 사용자 흔적을 찾을 수 있습니다.



FireFox 로그 파일 분석


Firefox는 Cache, places,sqlite, cookies.sqlite에 인터넷 사용 정보를 저장합니다.
places.sqlite, cookies.sqlite는 웹 히스트리를 저장하는 파일로서 이름에서도 알 수 있듯이
SQLite database파일입니다.

places.sqlite에서 사용자의 웹 사용 기록을 추적 하기 위해 참조해야 할 테이블은 크게 2개로 구성 되어 있고 cookies.sqlite는 쿠키를 저장하는 파일입니다.



Documents and Settings\<username>\Local Settings\Application Data\Google\Chrome\User Data\Default에는 Web Data, History, Cookies 웹 로그 파일이 존재 합니다.

웹 로그 파일을 분석 하면, url, 웹 사이트 제목, 방문 시간, 숨김 여부,방문 횟수, 검색어,
폐기 날짜 등 사용자 정보 및 패턴을 분석 할 수 있습니다.



계정 정보에 따른 Web Log에 저장 되어 있는 값들을 검색 할 수 있는 기능과
날짜 별로 검색 할 수 있는 기능을 제공 해줍니다.

웹 브라우저를 오래 동안 사용 했을 경우, 로그 값들이 많이 존재 하기 때문에,
단어별 검색, 날짜별 검색 기능을 구현 하였습니다.



- System Log Analysis



이 모드는 XP가 설치된 PC 로컬 상에 존재하는 모든 파일들의 분석을 위해 존재합니다.

첫 번째 보이는 화면은 무결성에 의해 복사된 분석대상 파일들의 용량과 개수를 보여 줍니다.
크게 의미있는 정보는 아니지만 분석자에게 분석 대상을 확실하게 하기 위함입니다.




파일시스템 상에 존재하는 모든 파일 중에서도 다음 아래의 항목이 분석 대상입니다.

1. 이벤트 로그 분석
2. 윈도우 복원지점 분석
3. ADS 검색 모드
4. 파일 포맷 검색 모드
5. 바로가기(LNK) 분석 모드
6. JPEG 분석 모드
7. Application Prefetch 분석 모드
8. 윈도우 기본 로그 정보
9. 휴지통 분석



이벤트 로그 분석

기본적으로 3가지 기본 이벤트 로그 파일을 분석하며 분석자가 원한다면
다른 이벤트 로그 파일도 분석이 가능합니다.

여기서 제공되는 이벤트로그 뷰어가 기본적으로 윈도우에 존재하는 이벤트로그 뷰어와 차이점이라면,
복사한 .evt 파일을 자신의 윈도우즈 데스크톱 시스템으로 복사했을 경우에
손상된 파일이라는 메시지가 나올 수 있습니다.

이는 API에서 문제점을 발견할 수 있었는데, 이벤트 로그가 지워졌을 경우에
이벤트 로그의 영역 바로 앞의 첫 번째 레코드를 버퍼 영역으로 남겨 놓기 때문이었습니다.

이 버퍼 영역은 API를 통해서는 읽혀지지 않게 처리되며,
새로운 이벤트 레코드가 파일에 쓰여지는 경우에 이 영역은 순환 버퍼에서 없어지게 되는 구조였습니다.

따라서 바이너리로 읽어들였을 경우에는 API로 읽어들일 때와는
다른 온전한 삭제된 이벤트 로그에 접근 할 수 있었습니다.



해당 이벤트 리스트에서 더 자세한 정보를 원하는 이벤트에 대해
왼쪽과 같은 정보 창을 만들어 보았습니다.

이는 기본적인 이벤트 ID의 소스, 설명 등을 보여주며, 분석자의 편의를 위해
해당하는 EventID정보를 제공하는 웹사이트인
EventID.net의 Comment 내용을 파싱하여 분석자에게 제공한다는 점입니다.



윈도우 복원 지점 분석이란 XP 시스템의 복원 지점에서 유지되는 로그 파일들을 분석한 것입니다.
이 로그들의 특징은 컴퓨터가 수행되는 동안 차례대로 로그가 저장되며,
포렌식 관점에서 볼 때 만약 로그파일들의 시간대 순서가 변경되었다면
그 컴퓨터의 사용자가 임의로 시간대를 변경했다는 증거가 됩니다.

아래 화면에서 보는 것과 같이 복원 지점의 로그인 Rp.log와 Change.log.x를 분석하여 보여주며
이 로그들을 이용하여 <복원 지점이 생성된 시점>, <복원 지점의 타입>, <복원 지점의 설명>, <
복원 지점의 사이즈>, <복원 지점의 디렉터리명>, <복원 지점의 파일 리스트>,
<복원 지점 생성 시간의 연속성 여부>등을 보여 줍니다.



NTFS의 ADS 영역을 시각적으로 보여주는 탐색기. 유저 인터페이스 구성은 위와 같으며
ADS영역은 붉은 색으로 보여지게 구성하였습니다.

또 ADS 영역에 존재하는 파일을 검색해주는 기 능을 갖추고 있는데, 총 3가지 입니다.
<윈도우 기반 디렉터리 검색>, <전체 검색>, <해당 디렉터리만  검색> 이 있는데
기본적으로 V3나 알약과 같은 ADS 영역에 대한 악성코드 분석은 이루어 지지 않고 있으며,
악의적인 목적으로 바이너리 파일을 숨길 가능성이 있기 때문에 이러한 모드를 추가하였습니다.




파일 포맷 검색 모드란 어떠한 사용자가 임의로 확장자를 바꿔버렸을 경우에 사용된니다.

JPG, PDF등의 문서파일의 확장자를 감추더라도 파일의 바이너리를 분석하여 매칭시켜 찾아내는 모드입니다.
속도의 향상을 위해 1개 ~ 3개의 멀티 쓰레드를 사용하여 분석을 수행합니다.
이는 듀얼코어의 IBM 노트북에서 테스트를 거쳐 설정하였습니다.



기본적으로 저장된 파일 포맷의 종류는 총 282가지이며,
조사자가 임의로 검색할 확장자를 선택할 수 있게 인터페이스를 구축하였습니다.



바로가기파일인 LNK를 분석하여 보여줍니다.

조사 대상 하드디스크의 바로가기들을 사용자 계정별로
쉽고 빠르게 찾아낼 수 있는 인터페이스를 구축하였습니다.

LNK는 어느 한 시점에 사용자가 접근했던 파일 및 시간은 물론이고,
사용자가 시스템에 장착했던 장치의 파일들 (또는 네트워크 공유)에 관한 정보를 제공할 수 있습니다.



JPEG 파일의 Exif를 분석하여 보여주게 된니다.
Exif에는 포렌식 관점에서 유용한 정보를 많이 얻을 수 있습니다.
포토샵 수정 여부 등이나 기타 여러 가지 속성 정보를 알기 쉽게 리스트로 보여주게 되며,
JPEG 파일을 빠르게 보여주기 위해 3가지의 미리보기 형식으로 탐색하게 됩니다.
마찬가지로 여러 가지 검색기능을 제공한다.


프리패치 파일은 시스템의 부팅 및 실행 속도를 향상시키기 위해 만들어진 파일입니다.

프리패치 파일은 윈도우 메모리 관리자의 구성요소 중 하나인 프리패처가 만들고 관리되는데,
조사자는 이 프리패치에서 과거 또는 현재에 어떠한 프로그램이 설치 되었는지를 확인 할 수있습니다.

윈도우 어플리케이션 프리패치 파일을 분석해서 보여주는 모드인데
여기서 생성된 파일의 시간과 수행횟수, 프로세스 경로, 마지막 실행 시간등을 분석자에게 제공하며
프리패칭 파일 내부의 등록된 경로와 파일들을 간편하게 보여주는 모드입니다.



윈도우 기본 로그를 묶어서 보여주는 모드입니다.

포렌식 관점에서 유용하다는 로드들을 가져와서 보여주게 된니다.
여기서 보여지는 로그들은 자체적으로 파일포맷의 형식이 아닌 텍스트문서이므로
크게 수정을 하지 않아도 로그를 읽는데에는 불편함이 없기에 따로 크게 가공하여 보여주지는 않습니다.

항목으로는 <Setupact.log>, <Setupapi.log>, <Netsetup.log>, <Schedlgu.txt>,
<Mrt.log>, <Dr.watson> 등이 있습니다.



휴지통의 정보를 가지는 INFO2 파일을 분석하여 보여줍니다.
이를 이용하여 <마지막으로 휴지통을 비운 시점>, <마지막으로 삭제 작업을 한 시점>,
<SID>, <삭제된 파일 총 개수>, <삭제된 파일의 총 사이즈>등을 보여 주게 됩니다.

- File System


디스크 이미지 한 볼륨에 대해 파일 및 폴더를  파일 시스템 트리로 구성 하였습니다.  
파일 및 폴더에 대한 이름, 크기, 종류, 수정한 날짜, 만든 날짜의 정보가 나타 납니다.



NTFS(New Technology File System)에 대한 검색 기능을 추가 하였습니다.
윈도우의 가상 파일 시스템에 대한 API 검색이 아닌,
NTFS의 MFT(Master File Table) 검색을 통해서 파일에 대한 정보를 가지고 왔습니다.
MFT에는 볼륨에 존재하는 모든 파일과 디렉토리의 정보를 담고 있는 테이블입니다.

그러므로 이 테이블을 분석 하면 볼륨에 있는 모든 파일과 디렉토리에 대한 정보를 전부 알아 낼 수 있습니다.
운영체제 API의 검색이 아닌 파일 시스템 그 자체의 검색이 가능 하기 때문에 검색 속도를 향상 시킬 수도 있습니다.


NTFS 파일 시스템에서 삭제된 파일에 대해 복구를 할 수 있는 기능입니다.
MFT 파일레코드를 순차적으로 읽어 들여 삭제된 파일을 목록화 합니다.
삭제된 파일에 대해 파일 이름, 만든 날짜 마지막 접근 날짜, 속성 값 등을 확인 할 수 있습니다. 



복구 할 파일에 대해 새 파일 이름을 지정, 저장 경로를 지정 하여 삭제된 파일을 복구 시킵니다.
복구가 가능한 파일은 복구 완료 메시지 함께, 복구가 됩니다.
복구 실패 시, 복구를 할 수 없다는 메시지와 함께, 창이 종료 됩니다.



- 보고서 작성


분석관이 보고서를 작성할 때 쉽고 편하게 보고서를 작성하기 위해,
분석된 자료에 따라 자동으로 보고서를 작성하는 기능을 구현하였습니다.


Microsoft Word 양식인 DOC 포맷으로 파일이 저장 되며,
다양한 형태로 문서를 작성 할 수 있는 기능을 가지고 있습니다.


- TimeLine Viewer






조사자에게 각 사건에 대한 시간대를 보는 것은 중요합니다.
우리는 이점을 고려하여 현재 존재하는 타임라인의 인터페이스를 더욱 개선시키고,
타임라인 항목을 더 보완하였습니다.




마지막은 팀원들 사진입니다 ㅋㅋ



참고문헌       

- The Windows NTRegistry File Format Version 0.4  Timothy D. Morgan tim- 
   registry(a)sentinelchicken.org , June 9, 2009

- The Secrets Of Registry Analysis Revealed - Harlan Carvey

- 인사이드 윈도우즈 포렌식 Windows Forensic Analysis 2/e, 정상민, 정명수, 비제이퍼블릭

- 해킹 사례로 풀어쓴 웹 보안, 심슨 가핀켈, 진파포드 저, 한및미디어

- 사이버범죄 소탕작전 : 컴퓨터 포렌식 핸드북 Ed Tittel/강 유 에이콘

- 해킹과 포렌식 입문, ALFRED C, 그린

- 윈도우 포렌식 실전 가이드, 고원봉 ,한빛미디어

- 인사이드 윈도우즈 포렌식  / 할렌 카비 / 디지털 해킹 분석 및 대응의 기술 퍼블릭


====================================================================================================

- 후기

프로젝트 기간이 3개월 정도인 단기간인데도 불구하고
소스코드가 라이브러리를 포함하여 약 14만줄 정도 나왔습니다.

또한 꾸준히 SVN을 사용하여서 3400여개가 넘는 네이버 오픈소스 프로젝트중에
네이버에서 활동랭킹 37위까지 올랐던 추억이 남아있네요 ^^;



다양한 언어 및 플랫폼을 격어본것도 나름 매력 있었습니다.
C# (UI 및 모듈 ) , C/C++ ( 파일 복구 ) , Perl ( 포렌식 도구 소스코드 분석 ) , WPF ( 타임라인 )

이건 올려도 될지 모르겠지만...
경찰청 포렌식 센터에서 도구에 대한 검증 세미나 까지 했었습니다 >_< /

이렇게 열정을 쏟아낸 프로그램이지만
아쉽게도 프로그램을 사용하는 사람은 한정적이고,
대중성이 없다보니 마땅히 공모전을 낼 곳이 없군요..

하지만 즐겁고, 재밌었고, 그리고 무지무지하게 빡셌던 프로젝트였습니다.

마지막으로 사랑한다 우리 Source Diet 팀~ㅋㅋ

신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 17
2010.09.02 20:30

[Bada Developer Challenge ] Contacts Ranking


지난 8월 31일날 마감했던 바다 공모전을  준비하면서

더도말고 덜도말고 정말 딱 일주일!! 여만에 만든  Contacts Ranking 입니다.


조금 더 여기에 시간을 할애할 수 있었다면 UI 적으로나 내부적으로나 더 괜찮은 프로그램을

만들 수 있었다는 생각에 세계적으로 300등 안에만 들면 bada 폰을 준다고 하니

그 폰으로 더 작업을 해보고 싶다는 생각이 들었습니다^^;






모티브는 내가 어떤 사람과 많이 연락을 하며,

그사람과 나와의 친밀도는 어느정도 인가.. 를 표현하고 싶었습니다.





그리고 이렇게 친밀한 사람들을 나열해서 순위별로 내열해주는 프로그램을 만들고자 하였습니다.


시스템이 돌아가는 전체적인 원리입니다.

모바일의 Life Log 를 이용하여 통화목록과 메세지 목록을 모두 가지고 와서

AddressBook 을 연동하여 총 랭킹을 구해줍니다.


프로그램의 실행 화면은 아래와 같습니다.


메인화면입니다. 터치하면 다음 화면으로 넘어가며,

라이프 로그들을 불러와 연동시키는 작업을 합니다.


프로그램의 기본화면입니다.

사용자의 이미지, 이름 그리고 랭킹을 보여주고 있으며,

1,2,3등에 따라 금 ,은, 동메달을 달았습니다.

Familiarity 는 친밀도를 뜻하며 나랑 몇번정도 메세지를 주고 받았는지에 대한 비율을 뜻하며,
Heartful 은 정성도이며, 얼마나 나랑 통화를 길게하거나 메세지를 많이 주고 받았는지에 대한 비율입니다.

예를들어 메세지를 많이 주고 받았더라도, 간단한 용무만 주고 받았을 수도 잇기 때문에
이렇게 친밀도와 정성도를 다르게 분포하였습니다.

다시 설명드리면, 친구와 연인 사이랄까요
친구는 자주 연락을 하지만, 막상 내용에는 별 다른 내용이 없습니다.

연인은 한번 통화할때 30분에서 한시간정도는 기본으로 하겠죠?

이로써 친밀도와 정성도를 나누는 기준을 정했습니다.


친밀도와 정성도 의 값에 따라 우선순위로 정렬도 할 수 있습니다.

이것을 옵션키로 지정해놓았습니다.

구현시에 ArrayListT 의 Sort 부분이 까다로워 시간을 많이 끌었다는 후담이 ㅡ_ㅠ




Extendbale List 버튼을 클릭하게 되면 그 사람의 정보에 대한 세부 정보가 나옵니다.

번호, E-mail, 생일 등등

여기서 통화버튼을 누르면 통화가 되고, 메세지 버튼을 누르면 메세지를 보낼 수 있습니다.


임의의 사용자를 롱~ 터치를 하게 되면 위와같은 팝업창이 뜨게됩니다.

이것은 이 사용자에 대한 세부정보들을 볼 수 있는 텝인데 Detail info 부터 먼저 보겠습니다.


Detail Info 같은 경우에는 나와 선택한 사람과의 세부적인 정보를 볼 수 있습니다.



세부정보를 볼수 잇는 탭이 택스트로만 되어 있어 약간 어려워 보이네요 ㅠㅠ

이 부분을 조금 더 이쁘게 표시해야 하는데... 시간이 ㅠㅠ

통화를 내가 더 많이 걸었는지, 상대방한테 더 전화가 많이 왔는지

퍼센테이지로 알 수 있습니다.

위의 통화량이 33% 는 전화를 받았던 비율보다는 걸었던 비율이 더 많았다는 뜻입니다.

그리고 이사람과 나와의 전체 통화량, 메세지 량을 확인 할 수 있으며,

전체 정보에 따른 퍼센테이지도 확인할 수 있습니다.

이 퍼센테이지라는것이 연인들끼리 연락을 하는 횟수를 확인할 때

유용할꺼라는 생각이 들더군요


내가 60%니깐 니가 조금 더 걸어야 되잖아!!

뭐 이런.. 싸움이 일어나지 않을까 고민이군요^^;


아래는 그 사람과 나와의 전화를 걸었던 로그, 메세지를 보냈던 로그입니다.




추후 보완하고 싶은 부분이 있다면 위젯으로 만들어 보고 싶고,

Bluetooth 통신을 통하여, 사용자 정보들을 전송하고 싶은 부분과 검색부분을 조금 더 신경써보고 싶네요.




총상금 $2,700,000 ( 한화로 약 30억원) 가 걸린 세계 규모의 bada Developer Challenge !!!



일주일동안 고생해준 팀에게 고맙고,

300등안에 들어서 폰을 꼭 받았으면 하는 바램입니다^^


아래는 UCC 링크입니다.

http://www.youtube.com/watch?v=uLR5aV4tbuY



신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 1
2010.06.08 18:44

The Contents for Studying English using American TV Dreamas






올해 3월 말 부터 5월 초까지 약 한달반 정도 소요된

팀 프로젝트입니다.

영어공부를 하는데 외국 영화나 드라마를 가지고 공부를 많이 하는데 

이를 프로그램으로 구현해 보았습니다.


프로그램의 프로토 타입 구현에 대한 알고리즘은 아래 링크되어 있습니다.


위의 글과 같은 방법으로 SAMI 파일을 각각 parsing 하였고, 

각 장면별로 나눠주는 알고리즘을 만들어, 

상황별 이미지와 스크립트를 나눠주는 모듈을 만들었습니다.





영상에서 스크립트를 추출하여, 영어공부를 할 수 있는 모드를 설정하며,

각 상황별 스크립트, 영상, MP3 등을 추출하여 스터디와 게임을 할 수 있으며,

복습하고 싶은 부분을 아이폰에 전송하여 동일하게 공부할 수 있는 방법입니다.




원하는 부분의 MP3 를 Direct Show를 사용하여 추출하였으며,

영상과 MP3 를 분리해 따로 저장시켰습니다.



각각 추출된 영상과 MP3 파일을 XML 파일로 넘겨 아이폰에서도 

영어 스터디를 할 수 있도록 설정하였습니다.




Main은 WPF 로 꾸몄으며, 정적인 이미지 파일이라 보이지는 않지만

구름이 날아다니고 풍차도 돌아갑니다.

스터디 모드와 게임 모드 1,2 가 있고, OPTION 에는 아이폰으로 추출한 영상이나 스크립트를

전송을 할 수 가 있습니다.


- Study MODE



때의 화면입니다.

각 영상들을 추출하기 위해 로딩화면들을 구현하였습니다.



모든 영상을 다 추출하면 3D 뷰어로 이미지를 확인할 수 있으며 해당 이미지를 더블클릭하면

그 영상으로 바로 이동하여 플레이가 가능합니다.




오른쪽에는 각 스크립트별로 한글과 영어자막을 확인할 수 있으며,

자신이 원하는 부분을 체크하면,

그 자막에 대한 문제가 나오며, 답이 맞췄는지 틀렸는지 알리며,

Open API 를 사용하여 그 답에 대한 단어를 검색해줍니다.


- Game1 MODE




오리를 이용하여 영어 단어 맞추는 게임을 하는 Flying 게임입니다.

이 게임은 WPF를 사용하였고 Faseer물리엔진을 적용시켜

컨텐츠의 몰입도를 높히는데
중점을 두었습니다.


위에는 각 파싱된 영화나 미국 드라마의 대사가 한 줄 나오게 되며

페이스를 누르게 하여 그 구간의 영상을 볼 수 있습니다.


이는 어학습 게임진행에 차질이
없게 하기 위한 것이며,

질리지 않는 구성을 위해 6개의 아이템을 두어 게임의 난이도
를 두었습니다.


그리고 스코어와 체력, 시간이라는 개념의 도입과 맞춘 단어는

OPENAPI
를 활용하여 뜻을 보여 주는 등 학습을 위한 기능과

재미라는 요소를 버무리기 위해 노
력을 가하였습니다. 



아래 보이는 오리 머리의 Slider bar는 스테이지의 진행도를 보여 주며,
 
게임이 종료
되면 웹에 스코어가 등록되어

게임을 하는 사람의 승부욕을 자극하도록 구성하였습니다.


- Game2 MODE



     

    Snake Game은 Study모드에서 학습 후 학습 한 문장 중 몇 문장만

    Game으로 복습할 수
    있도록 한 Game입니다.

    즉 Study 한 문장의 알파벳을

    일반적인 흔히 있는 Snake Game에
    접목시킨 것입니다.


    문장을 이루고 있는 알파벳들이 임의의 위치에 놓이게 되고

    Snake가
    움직이면서 그 문장의 알파벳순서대로 알파벳을 먹으면

    꼬리가 하나씩 늘어나게 되는
    방식으로 이루어집니다.




    게임을 시작하게 되면 좌측 상단에 왼쪽 그림과 같이 순서대로

    먹어야 하
    는 문장이 희미하게 표시 되며

    오른쪽 그림처럼 이 알파벳들이 임의의 위치에 놓이게
    됩니다.

    snake를 방향 키를 조절해서 움직여서 상단에 표시 된

    문장 알파벳 순서대로 먹기
    만 하면 됩니다.


    - IPhone





    프로그램을 시작하였을 때 뜨는 메인 화면입니다.

    English Study, Dictionary, Worm_Game,
    Flog_Game 기능을 지니고 있으며

    English Study를 실행시키면 주요 프로그램인 학습기
    능이 진행되고

    Dictionary에서는 사용자가 단어를 검색해서 볼 수 있는 사전기능이며,

    Worm Game 과 Sniper Game은 교육한 문장으로 게임을 하는 모드입니다.



    교육모드로 들어가게 되면 iPhone이 가지고 있는

    교육목록(XML파일의 목록)이 나오며
    사용자는 이 목록 중

    교육하고 싶은 것을 클릭하면 해당하는 교육으로 들어갑니다.

    좌측
    상단의 아이콘을 클릭 시 메인 화면으로 돌아가게 됩니다.



    교육을 선택하여 시작하기 전

    해당하는 MP3이 없을 때는 경고 창이 나타나면서

    다시 목
    록 선택하는 곳으로 돌아가게 됩니다.


    해당하는 MP3의 파일있을 때 위처럼 화면이 나오게 됩니다.

    아래에 자막이 나오고 우측
    상단에 PLAY 버튼을 누르게 되면

    해당하는 교육의 음성이 재생되게 됩니다.


    음성이 진행
    되는 정도에 따라 밑에 자막은 점점 올라가면서

    음성과 자막을 싱크가 맞게 자막이 올
    라갑니다.

    우측 화살표를 클릭하면 화면의 자막은 없어지면서 자막이 없이

    음성만으로 교
    육이 가능하고, 다시 우측화살표를 클릭하면

    사라진 자막이 다시 화면에 나오게 됩니다.


    좌측의 BACK 버튼을 누르게 되면 다시 교육 선택화면으로

    돌아가고 교육을 다시 교육을
    선택하여 교육을 진행합니다.



    사전은 사용자가 영어 학습에서 단어를 검색하여

    볼 수 있도록 하는 모드로 우측 흰색
    창에 단어를 입력하게 되면

    우측 화면에 해당 단어와 관련 단어들이 나타납니다.

    단어의
    정보는 발음 기호와 해설 두 가지의 정보를 보여 주며,

    우측 하단의 아이콘을 클릭하게
    되면 다시 메인 화면으로 돌아가게 됩니다.



    Worm 게임은 하나의 문장의 각 철자들이 화면에

    흩어진 단어를 먹는 게임입니다.

    게임은 가지고 있는 교육 자료 중 무작위로 추출한 뒤 

    하나의 문장을 화면에 임의로 나
    타냅니다.


    게임이 시작되면 문장은 좌측에 게재됩니다.

    각 알파벳들은 화면의 파란색 매트위에 임의
    에 위치에 나타나게 됩니다.

    사용자는 캐릭터를 이용하여 제한시간 60초안에 알파벳을 먹
    으면 되고,

    알파벳을 순서대로 먹게 되면 점수는 15점씩 증가하며,

    순서와 관계없이 먹
    을 때는 5점씩 증가합니다.

    먹은 알파벳은 캐릭터 뒤편에 꼬리로 달리면서 게임이 진행됩니다


    버튼을 클릭하여  속도 벡터
    의 방향을 4 방향으로 변경하여

    캐릭터의 움직임을 조종하는 방식입니다.


     




    게임을 시작하면 화면에 해당 문장은 하단에 게재되며

    알파벳들은 화면에 날아다니게
    됩니다.

    제한시간은 1분이 주어지고 1분이 넘으면 게임이 종료됩니다.

    각 알파벳들의 속도와
    방형은 임의로 지정되고,

    게임이 시작 되면 각 알파벳들은 화면에 날아다니게 됩니다.


    용자는 이 알파벳을 선택하여 드래그 하여 게재된 문장에 넣어서

    문장을 완성하는 게임
    으로 맞는 알파벳을 넣을 때는

    해당 알파벳이 화면에서 커지게 되고 점수가 30점씩 올
    라갑니다.

    아닐 경우에는 그 자리에 머물게 되며 점수가 10점 감소합니다.



    Sniper 게임도 Worm 게임과 같은 메뉴구성을 가집니다.

    왼쪽 상단에 메인 화면으로 돌아
    가는 버튼이 있고

    제한시간 점수 이렇게 구성 됩니다.

    중앙에 Start버튼을 클릭하면 게임
    은 시작됩니다.   




    - Web Server


    Web Server 를 구축하여, 본 프로그램을 소개 및 게임의 스코어를 공유하고,

    질문이나 프로
    그램 사용 만족도의 피드백을 받을 수 있는 공간을 마련하였습니다.

    Web Server 는 Apach 서
    버, 언어는 PHP로 이루어져 있으며 DB 는 Mysql 로 설정하였습니다.

    심플하면서 고급스러운
    Interface 환경을 위하여 Flex 를 이용하여 전체 Web Page를 제작하였습니다.





    로그인을 위한 사용자 이름과 Password 를 입력 할 수 있는 창이 있으며,


    이 창을 이용
    하여 로그인이 가능하도록 설정되어 있습니다.

    Description, Developer, Flying , Snake,
    Q&A , Guest Board 로 구성되어 있습니다.




    Description은 일반 사람들이 프로그램 사용 전에 이것이 어떤 프로그램이며,


    프로그램
    을 개발 한 목적을 알기 쉽도록 선정배경과

    개발 목적을 기술 하였습니다.




    Developer는 각자의 소개 , 그리고 맡은 파트

    그리고 전체적인 프로젝트 일정을 두어

    어떻게 제작되었는지 설명되어 있고,

    각 사용자에 따라 설문조사를 통하여 인기투표도
    진행됩니다.




    Game Score 는 Flying, Snake 2가지로 되어 있으며

    프로그램 안에 들어있는 게임의 점
    수들이

    Database 로 전송되어 그 결과 값에 따라서 순위가 매겨지는 시스템입니다.

    사용
    자 이름과 Score 그리고 간단히 할말을

    적은 Table 이 출력되는데 Score 에 따라

    랭킹
    이 매겨지며 1위에서 5위까지만 출력이 됩니다.





    사용자들이 프로그램을 사용하면서 버그에 대한 이야기나

    질문사항들을 받는 게시판으
    로 제로보드를 이용하여 제작하였습니다.



    사용자들이 의사소통을 할 수 있는 Guest Board 제공하였습니다.


      - 영상



    - 참고문헌

       
    - DirectShow 멀티 미디어 프로그래밍 - 한빛미디어, 신화선 저

       - Flex AIR BIBLE - 대림출판사, 윤훈남 저

       - Pro WPF in C# 2008 - WellBook, 메튜 맥도날드 저

       - C# Programming Bible - 영진닷컴, 최재규 저

       - 게임 물리 바이블 - 사이텍 미디어, 데이빗 H. 에벌리 저

       - Objective-C:맥과 아이폰 애플리케이션 프로그래밍 - 한빛미디어, 오기하라 타케시 저

       - 아이폰 프로그래밍 가이드 - 프리렉, 하기룡 외 1명 저

       - 시작하세요! 아이폰3 프로그래밍 - 위키북스, 데이브 마크 외 1명 저

신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 2 Comment 3
2010.03.11 13:40

Google Distance + TTA + KNN


최근에 간단간단하게 짜본 프로그램이 몇가지 있는데 그 중에 하나를 소개합니다.

유사도 측정에관한 논문을 분석 후 값을 한번 짜봤습니다.

관련 URL : http://www.cs.vu.nl/~frankh/postscript/WWW07.pdf

일단 Google Distance 입니다.




단어 두개를 가지고 Google에 검색된 결과값에 따른 Distance 를 구해주는 공식입니다.

저렇게 NGD를 뽑아내는 함수만 잘 만들어 주면 구현하는데 어렵지 않습니다.


Client 가 입력하는 50개정도의 단어를 Google 에 Search 를 한 뒤

50개에 대한 f(x) 값과 f(x,y) 값을 추출하여 파일에 저장합니다.




이렇게 50개의 단어를 Word 로 받아 온 뒤 f(x) 는 npc.txt 에 저장하였고 

f(x,y) 는 npc_both.txt에 차례대로 저장하였습니다.Perl 을 사용하여 구글에서 파싱을 하였으며, 50단어를 검색하여 

각각의 파일에 저장하는데 30분 가량 걸렸습니다.


문제는 TTA 입니다 일단 알고리즘 부터 먼저 보겠습니다.





 TTA 알고리즘을 사용하면 각 단어들의 유사도를 측정하여 클러스터링을 할 수 있으며,

이 값을 Tree로 뽑아 낼 수 있습니다. 

저 같은 경우에는 직접 Tree를 짜서 구현을 하였는데,

STL 같은 부분을 사용하기 보다 직접 자기가 이해하고 

구현해보는것이 중요하다는 느낌을 많이 받았습니다.



Tree 분류후 thresholds 값에 따라 유사도가 비슷한 단어끼리 그룹을 이루게 되며,

클러스터링이 마무리 됩니다.



왼쪽의 Tree가 각 그룹별로 묶여진 형태이며 마우스로 그룹을 선택하면 오른쪽 그림과 같이

리스트뷰에 각 그룹의 요소들과 검색된 값인 NPC 값을 확인 할 수 있습니다.



그룹의 나눠지는 단계를 볼 수 있도록 출력에 신경을 써서 만들었습니다.

위 그림은 다른 먹는(?) 부분에 관해서 뽑혀진 그룹입니다.




마지막으로 KNN 을 구현하는것이 남았는데,

이렇게 클러스터링 된 그룹에서 내가 어떤 단어를 넣었을 때

이 단어가 어느 그룹에 속해지는지를 판단해서 그 그룹을 찾는 기능입니다.


C++ / MFC 로 구현한 전체적으로 구현된 프로그램 입니다. ( 보다싶이 UI는 형편없습니다..)

Input Data 버튼을 눌렀을 시 mint 를 Google 에서 Search 를 하여

각 값들에 대한 유사도를 Check 한뒤 가장 유사도가 가까운 그룹을 알려줍니다.


mint 라는 값을 검색하니 

Peppermint Spearmint 가 있는 그룹에 속해져 있다고 결과가 잘 나오는군요 :)



위의 버튼중에 Server 를 켜게 되면 쓰레드로써 외부에서 접속을 할 수 있도록 설정이 됩니다.

그 후 소켓으로 단어를 입력 받으면 

구글에서 검색 을 하여 어느 그룹에 속해있는지 Check 를 한 뒤,

소켓을 보낸 사용자에게 다시 그 결과를 보내줍니다.


소켓으로 결과를 보내는 부분은 C로 간단하게 짰는데 아래와 같습니다.




결과만 확인하기 위해 콘솔로 짰지만.. 영 볼품이 없네요 ^^;

전체적인 System Architecture 입니다.



하는 일이 많아 구현하는데 보름 가까이 걸렸는데

상당히 재밌있는 프로그램 이었습니다.


간만에 Perl 도 만져보았고, 유익한 정보를 얻은 것 처럼 재밌었습니다.

그래도 하드코어한 C는 이제 그만 짜고 싶기도 하네요 ㅡ_ㅠ



어느 누군가 이것이 필요한 프로그램이 필요할 까 싶어 블로그에 올립니다.



P.S. 어제 김길태씨가 잡혀서 한시름 놓았습니다.  :)
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 0
2009.12.08 06:31

FunnyPE

 
작년 10월 말 부터 12월 초까지 약 한달 반정도 걸린

개인적인 프로젝트입니다.

즐겁게 PE 파일구조를 를 보자 라는 의미에서 만든 Funny PE 입니다 ^^;




¨ 운영체제 : Windows XP Professional

¨ 개발도구 : Microsoft Visual Studio 2008

¨ 개발언어 : Visual C# 2008

¨     : GDI+


일반적으로 EXE 파일을 분석할 때, DLL 의 정보를 분석할 때
 
혹은 바이러스를 분석 해야 할 때 PE 구조에 따라 파일을 분석해야 합니다
 
이런 실행할 수 있는 파일의 구조는 분석하기가 까다롭고, 보기에도 난해함으로 쉽고 단순하면서,

즐겁게 분석을 하기 위한 프로그램을 구현하기 위해서 이러한 프로그램을 작성하였으며,

한 눈에 PE의 모든 구조를 볼 수 있는 Simple Map GDI+로 구현하여

PE File 의 전체 구조를 파악 할 수 있도록 하였습니다.





 본 프로그램은 윈도우의 실행 파일 Format PE(Portable Excutable) File Format 을 분석해주는 도구입니다.

PE File
을 메모리에 올려놓은 뒤, 각각의 클래스를 생성하여 그 정보들을 TreeView를 통해 사용자가

보기 편하도록 구현해 놓았으며, TreeView의 각 세부적인 부분들을 16진수 및 아스키문자로

확인할 수 있도록 구현하였습니다.



 각 Header에 관한 핵심적인 정보출력 및 실행파일 내에 위치하는 Section 의 가상 주소 및 실제주소,

그리고 Section의 속성을 조사하여, 실행파일이 패킹이 되어있는지에 대한 여부를 판단하였습니다.


 PE
구조에서 dll 의 정보를 확인 가능하며 실제 메모리에 Load되는 위치를 확인 할 수 있으며,

dll
에서 사용되는 함수들의 이름까지 확인 가능합니다.

 재배치 섹션도 구현하여, Load되는 메모리가 겹쳐질 때, 어떤 방식으로 재배치가 이루어 지는지

확인 할 수 있으며, Resource 정보를 통해 아이콘, 메뉴, 다이얼로그 등등 Resource의 정보들이 확인 가능합니다.

 실행파일이 패킹이 되어 있는지에 대한 여부에 따라 기존의 OP Code Disassembly가 가능하도록 구현하여,

어셈블리로는 어떤 식으로 코드가 풀어졌는지 확인 할 수 있습니다.

마지막으로 프로그램의 핵심적인 부분으로써 한눈에 PE 구조를 확인할 수 있도록

분석한 파일에 맞춰 전체 구조를 그려주는 PE Viewer 도 구현하였습니다.





시스템적인 구조 적인 부분은 그냥 넘기도록 하고,

프로그램 실행부분을 설명드리겠습니다.



PE File format 파일을 분석하기 위해는 일단 파일을 불러와야 합니다.

파일을 불러오는 방식은 2가지입니다.

첫 번째 방법으로는 폴더이미지를 클릭을 하면 파일열기 대화상자를 이용하여 

PE
구조를 가진 파일들을 불러올 수 있으며,

두 번째로는 Drag & Drop 을 이용하여 파일을 프로그램으로 끌어오는 방법이 있습니다.

위 그림은 폴더 이미지를 눌렀을 때의 그림이며,

파일을 선택했을 시에 그 파일에 대하여 분석이 시작됩니다.

이 과정에서 PE 구조가 아닌 파일을 불러 들었을 시에는 PE 구조가 아니라는 경고 창이 뜨며,

PE
구조를 분석하지 않으며, PE 구조일 시에는 각각의 구조체에 따라 분석이 되며,

File Info Tab
ListView 창에는 C#에서 제공하는 파일 클래스를 사용하여,

파일의 속성, 이름, 사이즈, 생성 시간, 마지막 접근시간 등을 출력했습니다.




PE 구조를 가진 파일의 로드가 끝났을 때,

두 번째 Tab PE Analysis 에는 PE의 전체구조를 Treeview로 출력해서 보여주며,

각각의 Header 값들을 클릭했을 시에는 아래에 ListView에는 주소값과,

16
진수 값 그리고 ASCII 코드로 출력이 되게 됩니다.


Tab
에 오른쪽에 있는 값들은 분석에 있어서 중요한 정보들을 저장시켜 놓았으며,

주로 디버깅을 대신하여 변수의 값들을 Check 할 때 효과적으로 사용하였습니다.


아래쪽에 있는 메모리 출력 Viewer 에서 Offset 의 범위를 지정하여
 
탐색 아이콘을 누르면 지정한 주소의 범위까지 메모리의 값들을 확인할 수 있습니다.




Tab
2,3번째인 Headers Section PE 구조를 토대로 중요정보들을 출력해주는 부분입니다.

코드의 처음 실행부분인 Entrypoint 나 메모리에 처음 올라오는 값인 ImageBase

그리고 Image Size , PE 구조에서 중요한 정보들을 확인하기 쉽도록

하나의 Tab으로 만들어 놓았습니다.

그리고 DATA DIRECTORY에서도 중요한 6가지 정도의 값들의 주소와 Size를 보여줍니다.



Sections Tab 에서는 Section이 있는지 나열해 주며, Section 들의 이름,

가상주소 및 실제주소, 그리고 Size와 속성들까지 출력해줍니다.

Section
을 클릭했을 경우 Flag 값을 체크하여 아래에

Check Box
에서 해당되는 값들의 결과값을 알려줍니다.



Section
들의 주소가 같은지 다른지 보여주는 distinction 부분도 함께 구현했으며,

다를 경우에는 어느 정도의 주소의 차이가 나는지도 나타나게 됩니다.






5
번째 Tab Import & Export 에서는 해당 파일이 어떠한 DLL Import 하고 있으며

어떠한 함수들을 사용하고 있는지 나열 해주는 부분으로써

TreeView
를 사용하여 각 DLL 에 따른 함수

그리고 그 함수가 가지고 있는 주소까지 확인이 가능합니다.

Export
도 마찬가지로 구조에 따라 Export 하는 값들을 확인 할 수 있습니다.


6
번째 TabRelocation 은 주로 DLL 파일이 재배치가 이루어져야 함으로

주로 DLL 파일에서 확인을 할 수 있습니다.

system Architecture
에서 설명된 Relocation에 구조체에 따라

재배치를 수행하는 값에 대해서 TreeView로 확인할 수 있습니다.


이 두 Tab에 관련된 값들을 구하는 방법은 파일을 분석할 당시

각각의 클래스를 모두 작성했기 때문에 쉽게 UI 부분을 완성할 수 있었습니다.







7
번째 Tab Resource 를 표현하는 방법에는 많은 고민을 하였는데

IMAGE_RESOURCE_DIRECT
ORY 에서 DIRECTORY ENTRY 를 접근할 수 있으므로,

3
개의 TreeView 를 사용하여, Resource 를 표현하였고, 첫 번째 TreeView 에서

IMAGE_RESOURCE_DIRECTORY
값을 클릭했을 경우에는

두 번째 TreeView 에서
리소스 타입 디렉터리 정보들을 확인 할 수 있도록 하였습니다.


링크를 따라가듯이 다음 값으로 접근할 때 마다 새로운 TreeView 가 그려지며,

마지막 값까지 접근했을 시에는 해당 리소스의 이름과 데이터 엔트리 값을 확인 할 수 있으며,

이 값에 따라 실제 리소스 데이터 값으로도 접근이 가능합니다.


Disassem Tab
은 코드의 Entry Point 값과 그 값에 해당되는 Section 을 파악하여

OP
코드를 코드의 Size 만큼 Disassembly 하여 ListView 에 출력하는 부분입니다.

EntryPoint
Section 의 속성을 파악하여 그 속성의 값에 따라

파일이 Packing 되었는지 되지 않았는지도 Check 할 수 있습니다.



Packing 이 되지 않았을 때만 Disassembly 를 수행하며, Disassembly 를 하게 되면 주소값과,

OP
코드 그리고 Assembly 를 나열하여 ListView에 뿌려줍니다. 

Disassembly Code
가 길어질 경우를 대비하여 progressbar 를 연동하여 진행상황을 알 수 있습니다.






Data Abstraction Tab
에서는 이제껏 분석한 정보들을 통해 전체적인 PE File의 구조를 그려줍니다.

GDI+
를 사용하여 전체 값들을 출력하였으며,

각각의 구조체에 맞춰서 Header를 그려줬으며, Header의 좌표가 저장되어 있어

그 좌표에 따라 화살표를 그려주는 모듈도 만들어 사용자가 보기 좋도록 출력하는데 노력을 들였습니다.

키보드의 화살표에 따라 투명도 조절이 가능하며,

마우스 휠을 사용하여 이미지의 ZOOM 을 조절하는 기능도 있습니다.

그리고 마우스 클릭을 이용하여 좌표이동이 가능합니다.


왼쪽에 툴바를 삽입하여 Pen 으로 그릴 수 있는 모드와

Move
하는 모드 2가지를 선택할 수 있도록 하였으며,

이미지 파일로 저장도 가능합니다.

모든 기능 중에 가장 신경을 많이 쓴 부분이며,

효율적으로 각각의 PE 구조를 볼 수 있도록 많은 부분을 생각하여 작성하였습니다.




위 그림은 프로그램의 순서도이며, 어떤 방식으로 프로그램의 PE 구조를 분석하는지 보여줍니다.

파일을 불러온 뒤 PE 구조와 관련된 Header 파일들을 분석한 뒤,

그 결과값에 따라 PE 파일인지 Check 한 뒤 계속적으로 분석을 할 것인지의 여부를 판단합니다.

PE
파일일 경우에만 순차적으로 분석을 하며 아닐 경우에는 분석하지 않습니다.

Disassembly
같은 경우에는 Packing의 유무에 따라 Disassembly 코드를 변환을 결정 짓습니다.



=======================================================================================

어디까지나 개인적으로 만든 프로젝트라

코드를 공개하기가 꺼려집니다.

가독성 문제도 있고 너무나 제식대로만 코드를 짜서 ^^;;


프로그램은 원하는 분들에게만 배포할 생각이며,

PE에 관심있으신 분들은 저에게 문의 주시기 바랍니다.




감사합니다 :)

=======================================================================================

프로그램 실행파일


잔버그가 많네요 ㅠ_ㅠ

추후에 기회가 된다면 유지보수하겠습니다 :)

신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 3 Comment 4


티스토리 툴바