#아이다에서 프로세스 덤프 분석하기
##준비물
##방법 위 3개의 프로그램을 준비한후, PATH에 windbg경로를 추가해준다.
그다음 분석하고자 하는 프로긂을 Process Explorer를 사용해서 Full Dump를 떠준다.
그다음 IDA로 열어보면 windbg가 백그라운드로 돌아가고있다는 경고를 보내는데 무시하고, ctrl+1 을 눌른후 segment를 클릭해서 segment창을 열어준다.
그럼 여러 세그먼트가 나올텐데 그중 필요한(덤프뜬 프로그램을 포함한)영역을 제외하고 전부 세그먼트를 날려준다.
쉽게 날리는법은 필터설정에 덤프뜬 프로그램명을 넣고 exclude조건으로 필터링을 걸어준후 ctrl+a 후 오른쪽클릭 delete segment해주면 깔끔하게 덤프뜬 프로그램을 제외하고 전부 날라간다.
그후 IDA를 끄게되면 세그먼트를 저장하겠냐는 메세지창이 뜨는데 전부 저장하기를 선택한다.
그럼 idb파일이 남아있을텐데 이걸 열어주고서 메뉴의 option - General - Analysis - Reanalyze Program 을 눌러준다
그리고 열심히 분석하면 끝
##왜 이런짓을 하는가
IDA는 타입이 결정되지 않은 연속된 4바이트(or 8바이트) 데이터가 있을때 일단 해당 항목을 포인터로 생각하고 그 위치에 무슨 데이터가 있는지를 체크해본다.
그런데 문제는 프로세스 덤프를 떠보면 알겠지만 0x00000000부터 0x7fffffff까지 대부분의 주소공간이 IDA에 올라와있어서 문자열이든 정수형데이터는 무조건 DWORD로 판단해버린다는 점이다.
게다가 ascii중 printable한 문자열들은 전부 0x80보다 작은값들이여서 모든 문자열(유니코드포함)들의 타입이 DWORD로 해석하는 일이 일어나게 된다.
그래서 타입을 결정하기 전에 미리 필요없는 세그먼트를 전부 제거한후, 저장하고 다시 로드해서 분석시키는것이다.