Themida는 강력한 프로텍터로 한창 이름을 날리고 있습니다.

거대한 바이너리와 많은 안티코드/스레드들, 가상의 cpu를 에뮬레이션하는 가상화등 리버서들에게 고통을 주고 있죠

특히 이 '가상화' 개념은 평이 좋아서, 제작사인 Oreans는 따로 Code Virtualizer(CV)란 제품도 내놓았습니다.

CV는 컴파일 전에 소스에 시작/끝의 인식자를 심어놓고 (vs의 경우 _asm _emit) 컴파일 후의 바이너리를 검색해서

인식자 사이를 가상화 해버립니다.

(이 가상화는 xen이나 vmware와 같은 자원 가상화와는 다른 개념의 가상화입니다. 
 x86 cpu의 경우 instruction set이 intel에 의해 정의되어 있는데 - 6a 00 이 push 0인 것 처럼요 -
 이 cpu instruction을 새로 만들어서 가상의 cpu로 코드를 돌리는 것 처럼 에뮬레이션 하는 스킬입니다.
 루틴도 크고, instruction set을 분석해야하므로 분석가가 분석하기 참 괴롭죠.)

상용인데 매출이 얼마나 될진 몰라도 간간히 게임업체들이 쓰는걸 볼 수 있습니다.

그런데 이런 Themida를 악성으로 잡아버리는 AV업체가 꽤 되네요.

http://www.virustotal.com/ko/analisis/688a187dd7691128c6f39f176547ae75



다른데야 그렇다 쳐도 NOD32, 닥터웹, ikarus등의 진단은 참 의외네요

AVG야 오진따위 아무렇지 않게 굉장히 공격적으로 잡으니 그렇다쳐도

닥터웹까지 잡으면.. 바이러스 체이서도 Themida를 악성으로 진단하겠는데요?

그리고 다른 일부 패커는 이름마저 무섭네요... 시스템 백도어라니.. 멀웨어라니...

논란의 여지는 있습니다. 진단해버린 AV업체도 할말이 있죠.

Themida는 원본 프로그램의 indirect call 코드를 변조해버립니다.

덤프, iat rebuild, api분석 등을 방해하려는 목적인데, 다른 패커에서도 많이 쓰입니다.

(다만 Themida가 좀 심하게 꼬아놓죠)

아무튼 이 원본을 수정해버리는 행위가 AV업체에게는 민감한일입니다.

AV의 기본 진단 방법인 Signature진단을 방해하기 때문이죠.

AV가 패커를 풀더라도 이 redirect code를 완전히 보정해주지 않으면 코드가 다르기 때문에 진단이 안됩니다.

그래서 원본을 바꾼다던지, 다형성 코드를 가진다던지 하는 패커는 AV업체에서 진단하는 경우가 꽤 있습니다.

그래도 역시 Themida 진단은 의외네요 ㅋㅋ




---------------------------------

2008. 11. 26. 00:30

바람의 나라 관련 문의가 있어 추가 내용을 덧붙입니다.

바람의 나라 창모드 프로그램이 피시그린과 같은 백신프로그램에 잡힌다고 합니다. 

제작자가 themida로 패킹해서 그렇다고 하며 이 포스트를 리퍼한 모양입니다.

그리고 그 툴을 이용한 사람들의 해킹 피해가 잇따르고 있습니다.
(원인이 그 툴인지는 물론 아직 모릅니다.)

피시그린은 카스퍼스키 엔진을 사용합니다.(Kaspersky)

위 그림파일을 보시면 아시겠지만, 카스퍼스키는 themida를 진단하지 않습니다.

해당 툴이 진단된다면 진단명을 보시기 바랍니다.

suspicious 진단이라던지, packed.themida 와 같은 진단명이면

themida란 이유로 진단된 것이라 볼 수 있지만

진단명이 다르다면 그 툴 속에 해킹툴이 심어져 있는 것이라 진단된 것일 수 있습니다.

즉 안전하지 않다는 것이죠.

진단명이 중요친 않지만 적어도 패커를 잡은 거라면 분명히 진단명에 나올 것입니다.

툴이 의심스러우신 분은 쓰지 마세요.

아니면 이곳에 업로드해서 진단명을 함 보세요.

http://www.virustotal.com/

물론 널리 퍼지지 않은 해킹툴이라면 진단 안될 수도 있습니다.

아니면 제게 툴을 보내주시면 제가 virustotal에 올려보거나, 시간이 나면 리버싱이라도 해보겠습니다.

----------------------------------

카넬리아님 말씀대로 인젝션을 통해 실험해 보았습니다. 아래 트랙백 참고하세요..





  1. Commented by at 2008.10.08 17:23

    비밀댓글입니다

    • Commented by at 2008.10.08 17:26

      비밀댓글입니다

    • Commented by jz- at 2008.10.08 18:41 신고

      네 맞습니다.
      정확히는 esi같이 특정 레지스터를 가상 eip처럼 놓고
      mov dl, byte ptr [esi]
      inc esi
      jmp dword ptr [ebx+edx] ; ebx = 함수주소base
      뭐 이런식으로 instruction을 수행합니다.
      아 진짜 혈압오르죠.. ㅋㅋ
      그리고 원래 AV업체들은 패커를 언팩한 후 진단하는데요,
      Themida를 풀지도 않고 잡아버리는건, 글에서 말한 진단을 방해하는 요소나 언팩의 어려움등 때문에 '아 십라 잡아버려'란 성격이 짙지 않나 싶습니다 ㅋㅋ

    • Commented by at 2008.10.11 17:00

      비밀댓글입니다

    • Commented by jz- at 2008.10.12 00:36 신고

      ㅋㅋ 다형성에 감염형 바이러스는 제대로 된거 나오면 요즘도 고생한다네요

  2. Commented by canelia at 2008.11.29 02:20 신고

    다시 확인해 주시기 바래요
    dll 을 타 프로세스에 injection 할 때
    그 dll 이 themida로 패킹되어 있으면 잡는 것 같네요
    Themida 2.0.3.0 입니다
    창모드 dll 에서는 DirectDrawCreate 와
    그 하위 인터페이스 (CreateSurface 등),
    RegisterClassW, ShowWindow 를 후킹합니다

  3. Commented by canelia at 2008.11.30 16:34 신고

    2006년 초기부터 멀티로더 등 프로그램을 배포해 오면서
    아무런 근거없이 해킹의 원인이 그것때문이라는 사람들 볼때마다
    기분 참 뭐하네요.. 자기네들이 패킷캡쳐라도 해봤는지.
    물론 jz님하곤 아무런 관련이 없습니다
    찾아보니 몇몇 av 에서 바이러스로 인식하는거 같은데
    같은 이유가 아닐까 했던거고요..
    그냥 아무 대가 없이 배포해 주는데도..
    여기서 뭐라 하소연 하는것도 한심하지만..
    보통 프로세스가 생성되는 시점에 모든 후킹을
    끝내면 쉽게 끝나지만 DirectDraw 인터페이스는
    해당 객체가 생성되는 시점이 후킹을 해야하기 때문에
    GameGuard 초기화 된 이후에 후킹을 해야합니다
    그래서 리소스에 넣어놓은 bypass용 드라이버를 사용했고요
    무슨 원인으로 잡는진 모르겠지만
    제가 카스퍼스키를 깔아보던가 해야겠네요

    그리고 사람들이 받아간 파일 원본입니다
    제작자만 저로 명시되어 있고,
    업로드는 제가 한게 아니라 맘대로 링크수정 못하고여
    http://www.goeyu.com/board/view.php?id=pds&no=58

    • Commented by jz- at 2008.11.30 23:54 신고

      네 괜히 제가 죄송해지네요;;;

      내용을 보니, 리소스에 파일을 넣었으면 antivirus에서 다운로더로 인식했을 가능성이 높네요

      드라이버를 파일로 생성 후 로드했을테니까요^^

      의심받는데, 아니라고 근거대기도 기분 뭣하겠네요 ㅋㅋ

      code virtualizer를 쓰시는건 어떠실지?

  4. Commented by canelia at 2008.12.01 05:39 신고

    ㅎㅎ아니에요 죄송하시다니요
    application 압축설정을 끄면 패킹후 바로 감지되더라구요
    cv 써보곤 싶었는데 asprotect랑 themida밖에 없어서요 ㅜㅜ
    전에 oreans에서 데모 받아봤다가 구경만 하고 지웠어요 ㅎㅎ

  5. Commented by 한자돌이 at 2008.12.01 19:41 신고

    음... 드라이버도 패킹을 적용할 수는 있던 것 같은데...

    만일 드라이버에 패킹을 적용하면 언팩과 분석은 어떻게 할지 궁금해지네요...^^

    Rustock Rootkit이 패킹을 적용한 최초의 커널 드라이버라고 하니...

    • Commented by jz- at 2008.12.02 23:34 신고

      포맷이야 똑같은 PE 포맷이므로 못할이유는 전혀 없습니다.
      분석은 커널디버깅해야겠죠 루트킷 분석할 때 하듯 ^^
      대신 디스어셈블리를 깨놓으면 진짜 짜증날걸요 windbg로 디버깅해야하니 ㅋㅋㅋ

    • Commented by 한자돌이 at 2008.12.03 18:53 신고

      저도 처음에 커널 드라이버를 패킹하면 분석하기 어려울 줄 알았는데, (커널 분석을 해야하니 아무래도 레벨이 어플리케이션 분석보다는 좀 어려울 거라고 생각되는...)

      Rustock 루트킷을 언패킹하는 화면을 잠깐 본거 같은데 OllyDbg로 분석하던데요...^^

      다만 PE의 플래그를 조금 바꿔서 sys 파일을 exe로 인식하게끔 하구요...;;

      신기하더라구요.

    • Commented by 한자돌이 at 2008.12.03 20:47 신고

      Olly Debugger 화면만 봐서 exe를 열었다는 것은 제 추측이죠 ㅋㅋㅋ;; 암튼 플래그를 바꿔서 유저 모드에서 디버깅을 하니 뭔가 신기하네요. 발상의 전환 ^^...

    • Commented by jz at 2008.12.03 21:53 신고

      dll/exe, sys는 OPTIONAL HEADER의 플래그하나만 다른거긴 한데, sys면 reloc 해야할텐데 차라리 dll로 해서 로드하면 깔끔할텐데, 그 분석한 사람은 설마 exe로 바꾸고 수동으로 절대주소를 바꿔준걸까요? ㅡㅡ;;
      dll로 했을거 같은데 ㅋㅋ 아무튼 유저레벨디버깅이 가능한걸 보니 커널 환경을 많이 쓰진 않나보군요^^

  6. Commented by canelia at 2008.12.02 00:40 신고

    드라이버엔 보통 Code Virtualizer를 쓰는 것 같더라구요
    아무래도 드라이버도 디버깅이 가능한 이상 언팩이 가능하기야하겠죠
    패킹패턴만 분석한다면요 ㅎㅎ

    • Commented by jz- at 2008.12.02 23:35 신고

      호 드라이버파일에 CV가 많이 쓰이나보군요

    • Commented by 한자돌이 at 2008.12.03 18:55 신고

      CV가 *.sys 파일을 지원한다곤 하지만, 실제로 쓰는건 게임가드밖에 못봤습니다. CV를 많이 쓴다는 것은 처음 듣네요...^^

      다만 한가지 오해하신 것은, CV는 패킹이 아니라 가상화 제품이라는 것입니다. 가상화도 엄밀히 말하면 anti-reversing이지만... 그 자체가 안티 디버깅에 특화된건 아니죠. 다만 분석하기 좀 성가시게 되었다는것뿐...

    • Commented by canelia at 2008.12.05 18:14 신고

      ㅎㅎㅎ네 저도 얼마전에 CV를 구해서 돌려봤더니
      PE Scanner 로 돌려봐도 VC++ 뜨고 하는거 봐선..
      VM 이 붙고 코드덩이가 변하는거 외엔 없나보네요
      여기에 ASProtect 로 패킹을 한번 더 걸어봤는데도
      아무문제없이 동작하더라구요..
      언팩 감지루틴을 넣고 CV로 돌린다음
      패킹해 놓으면 괜찮겠네요

  7. Commented by jz- at 2008.12.03 09:14 신고

    Hide from pe scanners 옵션이 문제였습니다.

    • Commented by 한자돌이 at 2008.12.03 18:56 신고

      Themida 2.x에서 새로 생긴 옵션이던데...^^;

      엔트리 포인트를 다형성으로 바꿔주는 녀석인데...

      이 다형성 엔진 마저 진단하다니 무섭네요...^^;;;

    • Commented by jz at 2008.12.03 19:04 신고

      그렇군요
      아마 unpacker가 건들기 힘들게 하기 위해서 넣었겠지만
      이게 AV한테는 쥐약인지라 ㅋㅋ

    • Commented by 한자돌이 at 2008.12.03 20:44 신고

      다형성 엔진을 진단해버리는 무식함도 놀랍지만,

      아무런 규칙이 없는것 같은 '다형성 엔진' 을 감지하는 테크닉도 놀랍네요.

    • Commented by canelia at 2008.12.05 18:18 신고

      네... ㅎㅎ 그 옵션 때문이군요
      그 옵션을 활성화 해놓고
      Application 을 Compression 해놓으면
      진단을 못하는 것 같네요 ㅎㅎㅎ
      이제부터는 그냥 CV+ASP를 쓰려고 해요