악성코드 분석에 있어 제일 걸림돌은 무엇일까? 복잡한 알고리즘? 안티 디버깅? 개인적으로 바이너리 패킹(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 신고

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

Toorcon2011 에서 발표된 안드로이드 리버싱 툴 입니다.(관련기사 :  http://www.dailysecu.com/news_view.php?article_id=1567)

파일을 올리려고 했으나 티스토리 파일 업로드 제한 크기인 10MB를 조금 넘어 다운로드 링크를 걸어 둡니다.

링크가 죽었거나 하면 댓글 남겨주세요. 보내드리겠습니다.


위 이미지는 Mac OS X Lion으로 돌렸을 때의 인터페이스 입니다.

다운로드 URL :  http://otertool.com/toorcon2011/

'[+] 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. 2012.08.13 20:00

    비밀댓글입니다

  2. 2012.10.18 19:59

    비밀댓글입니다

    • Favicon of https://maj3sty.tistory.com BlogIcon MaJ3stY 2012.12.07 20:43 신고

      답변이 너무 늦었군요 ㅠㅠ ...

      그나저나 메일이 어디에 있는걸까요 ㅎㅎ;

  3. 2012.12.30 20:23

    비밀댓글입니다

  4. Favicon of https://asecbug.tistory.com BlogIcon Asecbug 2012.12.31 11:42 신고

    감사합니다 :) 새해복 많이받으세요 ^^

  5. 2016.02.03 09:58

    비밀댓글입니다

아주 쉬운거에요..

스트링을 보면 성공 메시지가 보이지만 이건 성공메시지가 중요한 것이 아닙니다.

어떤식으로 돌아가고 있는지 풀이를 간단하게 저에게 알려주시면 합당한 상품(?)을 드릴께요.

아 오랜만에 플밍하니 머리 아프네요 ㅋㅋㅋㅋ

자주자주 해야겠어요..




컴파일 환경: XP SP3, VS 6.0

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

Lena's Tutorial 1 상세분석  (0) 2011.10.06
Lena's Tutorial 분석 글을 쓸 예정  (0) 2011.10.06
아주 쉬운 크랙미  (9) 2009.11.24
출처모르는 크랙미 풀이..  (4) 2009.11.15
POC Window 리버싱  (2) 2009.10.24
  1. Favicon of https://maj3sty.tistory.com BlogIcon MaJ3stY 2009.11.24 23:28 신고

    문제가 뭐 이따구니 뭐가 이렇게 쉽냐는둥 하시면 안되요~

    이건 초보자를 위한 크랙미에요 중급자 크랙미는 다음에 만들어 올릴께요 ㅋ

    분석능력을 기를수있게 만든 크랙미에요~

  2. Favicon of https://sone.tistory.com BlogIcon Sone 2009.11.24 23:50 신고

    끝에 system("pause";); 정도는 넣어주시는 센스~!

  3. Favicon of http://rex0.tistory.com BlogIcon rex0 2009.11.26 07:10 신고

    그럼 끝에 getch(); 정도는 넣어주시는 센스..

  4. gasinams 2010.02.19 19:53

    관리자의 승인을 기다리고 있는 댓글입니다

  5. gasinams 2010.02.24 19:48

    관리자의 승인을 기다리고 있는 댓글입니다

  6. 2010.09.04 11:47

    비밀댓글입니다

악.. 낚시에 걸려서 조금 헤맨... ㅠㅠ



이거 처음에 켜니까 컴터가 종료되길래 VM에서 작업했다는.. ㅋㅋㅋ

너무 무섭더라구요 ㅠㅠ

자동으로 종료되면 다들 그러시지 않나요? ㅋ

리눅스 바이너리 분석이랑 PHP도 있던데..

리눅스 서버가 없어서 뭐 ㅋㅋㅋㅋ

이참에 리눅스를 하나 깔던지 해야지 ㅋㅋㅋ

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

아주 쉬운 크랙미  (9) 2009.11.24
출처모르는 크랙미 풀이..  (4) 2009.11.15
POC Window 리버싱  (2) 2009.10.24
ShowString - 프로그램 스트링 보여주는 프로그램  (14) 2009.08.27
재밌는 리버싱 문제~  (120) 2009.07.03
  1. Favicon of https://johnghb.tistory.com BlogIcon John_G 2009.10.24 16:25 신고

    이번 문제 글올리신분이 누군가 했더니 마제님이셨군요 하힛 ^^
    분석하다 수십번 자동종료 덕분에 오기로 풀어 버렸다는...
    윈도우 문제 다 풀고 나니 리눅스 바이너리(바이러스)와 PHP를 풀 시간이 없었더라는.. (사실 풀수 없었던거였을지도.)
    자동종료 공감이 가서 글올리고 갑니다 하핫;;

    • Favicon of https://maj3sty.tistory.com BlogIcon MaJ3stY 2009.10.24 17:22 신고

      하핫 역시 리버싱은 vm에서죠?? ㅋ

      로컬에서 하면 위험을 너무 안고 해야하는.. ㅠㅠ

다들 닷지 아시리라 믿습니다.

곰플레이어에 껴서 배포되는 총알피하기 게임인데요.

심심해서 수정해봤어요~

양심껏 이정도로만..

순위 인증은 하지 않았습니다.

다른분들은 열심히 총알을 피하셔서 순위 인증을 하시는데 제가 이런식으로 순위를 강탈해버리면 다른분들이 허탈해 하시니까요..

무튼 오랜만에 재미좀 봤어요 ㅋㅋㅋ

p.s 디버거 감지기능이 있는것 같지만 Attach에 무너지는군요.
공부와 포스팅 목적으로 글을 쓴 것이기 때문에 문제가 된다면 바로 삭제하겠습니다.




  1. 님짱 2009.04.11 18:38

    님 좀 짱인듯

  2. BeST 2009.04.14 03:11

    저두 예전에 해 봤었는데 노란공 50개~ 근데 이젠 어떻게 했었는지 기억도 잘 안나네요~ㅋ
    크랙미 대용으로 여기저기서 건드는 만만한 동네북 닷지&핀볼...ㅎㅎ

  3. 은쏘이 2009.04.18 21:41

    우아 대단하세요^^

  4. 프로텍터 2009.05.09 17:27

    안녕하세요 리버싱 개 허접인데 닷지는 프로텍터 걸려있어서 리버싱 안되는데 어떻게 하냐요..?

    • Favicon of https://maj3sty.tistory.com BlogIcon MaJ3stY 2009.05.09 22:58 신고

      흐음?? 프로텍터라면 n프로텍터를 말씀하시는건가요??

      그런건 없던데.. 전 참고로 어태치 해서 풀엇어요.

  5. 어태치 2009.06.21 13:25

    저기 질문이 하나 있는데요 어태치로 닷지의 그 저장하는 부분을 찾긴 했는데 CPU창에서 우클릭 한 후 'copy to..'-> 'all mod..'로 저장하는데 저장이 안되네요. 어태치 한 다음 저장하는 방법좀 가르켜 주시면 감사.. 어태치로 하는건 이번이 처음이라... 귀찮이시다면 사이트라도 가르켜 주세요..ㅠ

+ Recent posts