악성코드 분석에 있어 제일 걸림돌은 무엇일까? 복잡한 알고리즘? 안티 디버깅? 개인적으로 바이너리 패킹(Binary Packing)이라고 생각이 든다. 악성코드 제작자 입장에서 악성코드 분석을 가장 쉽게 저지하는 방법은 악성코드 프로그램을 분석하지 못하도록 패킹하여 분석을 어렵게 하는 것인데, 이를 해결하기 위해 분석가들은 여러가지 노력을 하게 된다.

보통 언패킹을 하게 되면 알려지지 않은 악성코드 제작자의 독자적인 패킹을 풀기 위해 매뉴얼 언패킹을 시도하거나 알려진 패킹의 경우 패킹 제작자가 만든 언패킹 프로그램(언패커)를 사용하여 패킹을 풀게 된다. 언패킹을 할 때 매뉴얼 언패킹과 언패커를 이용한 언패킹이 정석이고 가장 좋은 방법이긴 하다. 하지만 과연 이 방법 밖에는 언패킹 하는 방법이 없는 것일까? 디지털 포렌식을 공부한 사람이라면 'No' 라고 대답 할 것이다. 이번 글에서 소개 할 메모리 덤프를 이용한 언패킹 방법이다. 메모리 덤프를 이용한 언패킹 방법은 다음과 같이 두 가지로 나뉘게 된다.


1. 메모리 캡쳐 파일을 이용한 프로세스 또는 DLL 파일 덤프를 이용한 방법


2. 프로세스의 크래시 덤프를 이용한 방법


1번의 경우 외국에서 이미 Volatility를 이용 해 소개 된 방법이다. 물론 소개 되기 전에도 여러 포렌식 전문가들은 이 방법을 알고 있었을 것이다. 이 글에서 소개 할 방법은 2번 방법이다. 2번 방법 또한 여러 포렌식 전문가들은 개인적으로 알고 있을지도 모른다.

하지만 이 글을 쓰는 이유는 조금 더 이 방법을 알리고, 이런 방법도 있다라는 것을 알리기 위함이다.(개인적으로는 블로그 포스팅 목적도 있다.... ^^;;)


그럼 이제부터 2번 방법에 대해 한번 살펴보자. 샘플로는 PEiD에서 스캔하지 못하는 패커로 패킹되어 있는 악성코드 샘플을 대상으로 하도록 하겠다. 먼저 대상 샘플 프로그램을 패커 스캐너로 스캔하여 보면 다음과 같이 결과가 출력되는 것을 볼 수 있다.


[그림 1 - PEiD 스캔 결과]


[그림 1]을 보면 Noting found라는 문자열과 함께 패커 스캔을 실패한다. 문자열을 보아도 별다른 내용을 찾을 수 없고 디버거 툴로 열어 보아도 크게 악성코드라고 할만한 부분은 보이지 않는다.


[그림 2 - 문자열]


이제 이 글의 주요 목적은 크래시 덤프를 이용 해 언패킹을 시도 해 보자. 크래시 덤프는 Windows에서 기본적으로 지원하는 작업관리자 프로세스를 이용해서 Full Dump를 수행 할 수도 있고 Process Explorer 또는 Process Hacker등으로 Mini Dump 또는 Full Dump를 수행 할 수 있다. 또 Windbg를 이용해서 프로세스 메모리를 덤프 할 수도 있다. Windbg를 이용할 경우 프로세스 메모리 덤프 후 바로 분석 가능하다는 장점이 존재한다. 이 글에서는 작업관리자와 Process Explorer를 이용하도록 하겠다.


먼저 작업관리자를 이용해 보자. 프로그램을 실행하게 되면 다음과 같이 프로세스 목록에 샘플 프로그램의 프로세스 생성된 것을 볼 수 있다.


[그림 3 - 작업관리자 프로세스 탭]


여기서 마우스 오른쪽을 클릭하게 되면 "덤프 파일 만들기"가 보이게 되는데, 이 기능을 수행하게 되면 작업 관리자는 Full Dump를 수행 하고 파일 저장 위치를 알려준다.


[그림 4 - 작업관리자의 프로세스 메모리 덤프]


분석 방법은 이 글 마지막에 언급하도록 하겠다.


이번에는 Process Explorer 프로그램을 이용 해 덤프해보자. 방법은 거의 동일하다.


[그림 5 - Process Explorer를 이용한 프로세스 메모리 덤프]


위와 같은 방법으로 메모리 덤프를 수행하고 덤프 파일의 문자열을 출력 해보면 다음과 같이 문자열들이 많이 바뀐 것을 볼 수 있다.


[그림 6 - 악성 행위로 보이는 문자열들]


해당 덤프 파일을 크래시 덤프 파일이므로 일반 크래시 덤프 파일을 분석하듯 Windbg 등을 이용 해 분석을 수행 하면 된다.

그런데, 여기서 한가지 의문점이 생길 수 있다. DLL 인젝션을 이용 해 정상 프로세스에 악성코드가 인젝션되어 실행 된거나 숨겨진 프로세스라면 어떻게 할까?

이런 경우에는 지금 소개 했던 방법보다 1번 방법인 전체 메모리 덤프 파일을 이용 해 악성 DLL 파일을 찾아내 해당 DLL 파일을 덤프 해 분석하는 방법을 추천한다. 악성 DLL 파일을 찾는 방법으로는 대표적으로 Volatility의 malfind 플러그인을 이용하면 된다. 오탐이 없는 것은 아니지만 탐색율은 굉장히 좋은 편이다.


사실 이 방법들은 꼼수(?)이기 때문에 완벽한 결과물을 바라면 안된다. 가장 완벽하게 모든 분석을 끝마치려면 매뉴얼 언패킹이나 언패커를 이용해야 한다. 지금 소개한 메모리 덤프를 이용한 방법들은 분석이 시간을 다투거나 어떤 기능을 가지고 있는지 볼때에 사용하면 좋은 방법이니 참고하기 바란다. "모로 가도 서울만 가면 된다" 라는 속담도 있지 않은가.

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

소소한 Unpacking TIP  (8) 2013.01.09
ARE(Android Reverse Engineering) 환경 소개  (5) 2012.05.05
Oter : Android Revese Engineering Tool  (8) 2012.01.30
PE 구조 (8)  (0) 2012.01.01
PE 구조 (7)  (0) 2012.01.01
  1. Ezbeat 2013.01.09 22:40

    덤프떠서 windbg로 분석할수있는 방법은 괜찮네요 ㅎㅎ 급하게 할땐 이방법이 더 나은것 같습니다
    하지만.. 리버싱하면서 언패킹을 하지못하면 왠지 지는 느낌을 받는건 뭘까요...ㅠㅠ

    • Favicon of https://maj3sty.tistory.com BlogIcon MaJ3stY 2013.01.10 09:32 신고

      리버싱을 배웠다면 언패킹은 기본적으로 할줄알아야 한다는 이 업계에 불편한 사고방식에서 비롯된 자괴감인듯 ㅠㅠ
      그래서 저도 가끔 이런 방법을 사용하고 공부할 겸 언팩할때는 무조건 매뉴얼 언패킹 한답니다 ㅋㅋ 실무에서는 언패커나 이런 방법이 더 시간적인 면에서 효율적이겠지만요 ㅎ

  2. Favicon of https://sun2day.tistory.com BlogIcon Sun2Day 2013.01.10 00:13 신고

    제목상.. 소소한 unpacking 이라고해서 들어왔는데.. 그 내용은 아닌듯!!
    그 외, 작업관리자에서도 덤프를 뜬다는건 몰랐으니 thanks
    성빈이 좀 갈궈봐요 선배라고 너무 방치하지말고.. ㅎㅎ

    • Favicon of https://maj3sty.tistory.com BlogIcon MaJ3stY 2013.01.10 09:34 신고

      ㅎㅎ 작업관리자로 덤프뜨는건 Windows Vista던가?? 아마 이때부터 될꺼에요 ㅎㅎ

      성빈이형은 연락도, 만나지도 못하고 있답니다... 그리고 갈굴만한 실력이 못되서요 ㅠㅠ

  3. 2013.10.12 20:37

    비밀댓글입니다

    • Favicon of https://maj3sty.tistory.com BlogIcon MaJ3stY 2013.10.15 14:37 신고

      더미다는 기본적으로 안티메모리덤핑 옵션이 체크되어 있습니다. 그래서 메모리 덤프가 안되는거구요. 이때는 정적분석이나 안티디버깅을 우회하여 동적분석을 하는 방법 밖에는 없습니다.

    • 2013.10.17 01:00

      비밀댓글입니다

    • Favicon of https://maj3sty.tistory.com BlogIcon MaJ3stY 2013.10.19 16:21 신고

      그럼 그건 메모리 덤프를 잘못 하신 것 같네요 ^^;

제가 군입대로 인한 지식 초기화로 인해 다시 지식을 쌓기 위하여 리버싱 지식은 Lena's Tutorial로 쌓을 거에요 ^^

상세 분석 과정을 잊지 않기 위해 이 카테고리에 남기니 많은 분들도 이 글을 보고 지식을 얻어 가셨으면 좋겠습니다^^

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

어셈블리어 정리.  (2) 2011.10.06
Lena's Tutorial 1 상세분석  (0) 2011.10.06
Lena's Tutorial 분석 글을 쓸 예정  (0) 2011.10.06
아주 쉬운 크랙미  (9) 2009.11.24
출처모르는 크랙미 풀이..  (4) 2009.11.15

이번 문제는 리버싱입니다.

이번 문제는 리버싱 문제 입니다.

reversing.zip이라는 파일이 문제로 제공되는데 zip 패스워드가 걸려있어서 아래와 같이 전 툴로 풀었습니다.


패스워드는 길지 않아 불과 몇초만에 풀려버렸습니다.

해당 패스워드로 압축을 풀면 엑셀 파일이 아래와 같이 나옵니다.


해당 파일은 오픈해보면 아무런 내용이 없네요 ㅎㅎ hex에딧으로 열어볼까요 ㅋ


위에 이미지에 빨간 박스를 보시면 PK라는 글자로 PK 압축을 알 수 있고 밑에 박스는 doc/ 폴더 밑에 exe 파일이 있는 것을 볼 수 있습니다. 본 문제는 exe 파일 같군요.

이제 왜 파일이 비정상적으로 되어있는지 알았으니 .zip으로 확장자를 바꾸고 압축을 풀어볼께요.


다 풀고 나니 이렇게 교묘하게 숨김파일로 되어있네요. 처음에 이 파일이 백신에 감지되서 지워진줄 알았다는... ㅎㅎ;;

위 파일을 실행하면 아래와 같습니다.


아주 간단해 보이는 프로그램 같네요 ㅎㅎㅎㅎ 바로 분석해서 풀어도록 하죠.

올리로 열어서 EP로 간담에 모든 텍스트를 검색해주면 아래와 같이 Password : 가 보입니다.


와!! 축하한다는 메시지도 보이는 것 보니까 딱 저기겠네요 ㅎㅎ

저 부분으로 한번 가볼까요 ㅎ


입력을 받고 바로 밑에 비교구문이 있습니다. 점프구문인 JNZ에 브포를 걸고 실행을 해서 123을 입력해 보겠습니다.

00401555    817D FC 8C5EDE77 CMP DWORD PTR SS:[EBP-4],77DE5E8C


브포가 걸리고 바로 위에 있는 CMP 구문을 클릭하고 정보를 보면 7B 값이 들어가있는 것을 볼 수 있다.(7B==123)

우리가 입력한 값이 CMP DWORD PTR SS:[EBP-4] 이부분에 들어가게 되고 비교값은 77DE5E8C 가 되게 됩니다. 이 값을 10진수로 바꾸면 2011061900 이니 이 값을 프로그램에 입력하면 축하한다는 메시지가 나오게 되겠네요 ^^!!


와 저 값이 패스코드인가 보군요!!!! 이상 끝 ㅋ

이럴수가 있나요...

비가 너무 많이 와요 ㅠㅠ

그래서...



가지고 있던 문제중에 못푼 문제를 한번 풀어봤어요 ㅠㅠ
  1. Favicon of http://blueh4g.org BlogIcon BlueH4G 2010.09.12 11:35

    이거 뭐... 휴가나와서 컴질이라니...... 내가 다 눈물이 난다 ㅋㅋㅋ

  2. Favicon of https://sun2day.tistory.com BlogIcon Sun2Day 2010.09.13 09:17 신고

    .. 꿀같은 휴가를 요론식으로 =ㅁ=;;
    날리셔도 되요..
    사실 저도 휴가 나오면 잠자는 시간 줄여서 컴터를 -_-;;

    • Favicon of https://maj3sty.tistory.com BlogIcon MaJ3stY 2010.09.13 09:26 신고

      하핫 ㅋㅋㅋ

      지금 꿀같은 휴가 보내고 있어요 ㅋ

  3. 평안.누군지 알겟지? ㅋ 2010.09.20 18:37

    휴가 나가서 그딴짓 하고 있냐 ㅋㅋ

    휴가 나가면 나간다고 보고해야지

    군대에 보고체계 확실한거 몰라? ㅋㅋ

  4. Favicon of https://88oy.tistory.com BlogIcon ☆> 2010.09.22 00:33 신고

    여기 유명한건가 제가 이쪽에 관심이 많아선가...
    자꾸 마제스티님(?) 블로그 오네요 ㅎ
    댓글하나 냄기도 도망가요...
    휴가 잘보내세요^^

    • Favicon of https://maj3sty.tistory.com BlogIcon MaJ3stY 2011.01.04 22:44 신고

      여기 유명하지 않아요 ㅠㅠ 좋은말씀 감사합니다 ㅎ

  5. Favicon of http://dereklov.tistory.com/ BlogIcon dereklov 2010.11.18 17:08

    형 놀러왓다 ㅋㅋㅋㅋ

    휴가나와서까지 컴을 하다니 ㅋㅋㅋ 역시 넌! ㅎ

    잘지내지? 궁금하네..ㅎ

  6. Favicon of http://crownw.wo.tc BlogIcon kraunw 2010.11.19 19:19

    마제스티님 오랜만에 놀러왔어요~

오~ 이번에는 이런 문제도 나왔었군요 ㅋㅋ!!


음에는 뭔지 몰랐는데 클릭 메시지가 자꾸 옴겨지길래 한번 잡아봤더니... ㅋㅋㅋ

간단하면서도 생각하게 하는 문제였습니다 ㅎㅎ
  1. Favicon of https://sun2day.tistory.com BlogIcon Sun2Day 2010.04.20 19:57 신고

    어여 다시 국가의 품으로 돌아가세요!!
    ㅎㅎ

  2. Favicon of http://revers.tistory.com BlogIcon Lr라 2010.05.24 01:19

    역시 대단하신 MaJ3stY님.. ㅠㅠ
    네이트온좀 자주들어와서 대화좀해영 a ㅠㅠ
    실력없는 Lr라였습니다. 늅늅...

  3. Favicon of https://secretofsh.tistory.com BlogIcon SecretOfSh 2010.07.21 11:39 신고

    헐. 오랜만에 와보니 ㅋㅋ 설마 휴가나와서 이걸 풀으신건 아니겠죠

    • Favicon of https://maj3sty.tistory.com BlogIcon MaJ3stY 2010.07.24 17:34 신고

      푸는데 얼마 안걸렸어요 ㅋㅋㅋㅋ

      피방에서 친구 기다리고 있었는데 심심해서 해본것 뿐이에여 ㅋㅋㅋ

  4. Keine 2010.12.14 23:31

    ㄷㄷ;; 너무단순하면 저렇게 어려워질수도있군요.
    가끔가다않풀리면 쉽게생각도한번해봐야겠어요.
    오히려 단순하면 어려워지는건가봐요.

    • Favicon of https://maj3sty.tistory.com BlogIcon MaJ3stY 2011.01.04 22:54 신고

      저도 그런생각을 많이 해요 ㅎㅎㅎ

      세상은 단순하면서도 어려운듯?? ㅋㅋ

+ Recent posts