아래의 코드를 알아채기 힘들게 obfuscate해서 packer 속에 집어넣으면

mup시 lordpe와 ollydbg의 플러그인 dump로 dump뜨지 못하게 됩니다.

전혀 어렵거나 대단한 트릭은 아니고

단순히 peb의 imagebase와 ldr_data의 첫번째모듈을 지우고, 파일도 열지못하게 선점하는 것입니다.

ㅋㅋ 우회하려면 아래 코드를 실행하지 않던가 아니면 VA를 갖고 강제 dump하는 것입니다.

(직접 툴을 짜든지, lordpe의 dump partially 기능을 쓰던지)

이런게 많아질 수록 PE format과 같은 기초가 얼마나 중요한지 알게 되죵..

just for fun!!



 char filepath[MAX_PATH];
 GetModuleFileName( NULL, filepath, MAX_PATH );

 HANDLE hF = CreateFile( filepath, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL );

 _asm{
  push ebx
  mov ebx, dword ptr fs:[0x30]
  add ebx, 8
  // erase imagebase 1
  mov dword ptr [ebx], 0
  add ebx, 4
  mov ebx, dword ptr [ebx]
  mov ebx, dword ptr [ebx+0xc]

  // erase imagebase 2
  mov dword ptr[ebx+0x18], 0
  // erase entrypoint
  mov dword ptr[ebx+0x1c], 0
  // erase image size
  mov dword ptr[ebx+0x20], 0
  pop ebx
 }

  1. Commented by 한자돌이 at 2008.12.03 19:02 신고

    비슷한 방법으로 'Pavol Cerven' 라는 사람( Slovak(SVK) Protector를 개발한 사람으로 'Crackproof Your Software' 라는 책으로 유명하신 분이죠. )이 만든 Anti LordPE Dump 가 있는데, LDR_MODULE의 ImageSize를 +0x1000 정도 증가시키더군요.

    아무래도 저 값을 0 같이 조작하면 App에서 호환이 안될 수도 있으니...

    (파일을 열거나 등등의 이상한 짓은 ㅋㅋㅋ;;; 호환율을 떨어뜨리는...)

  2. Commented by 한자돌이 at 2009.01.21 16:42 신고

    케겍...이방법 썼더니 MessageBox만 호출해도 팅겨부리네요;;;

    • Commented by jz- at 2009.01.21 18:02 신고

      엉? 저는 되는데요 ㅋㅋㅋ

      int main()
      {
      char filepath[MAX_PATH];
      GetModuleFileName( NULL, filepath, MAX_PATH );

      HANDLE hF = CreateFile( filepath, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL );

      _asm{
      push ebx
      mov ebx, dword ptr fs:[0x30]
      add ebx, 8
      // erase imagebase 1
      mov dword ptr [ebx], 0
      add ebx, 4
      mov ebx, dword ptr [ebx]
      mov ebx, dword ptr [ebx+0xc]

      // erase imagebase 2
      mov dword ptr[ebx+0x18], 0
      // erase entrypoint
      mov dword ptr[ebx+0x1c], 0
      // erase image size
      mov dword ptr[ebx+0x20], 0
      pop ebx
      }

      MessageBox( 0, "test", "ok", 0 );

      return 0;
      }

    • Commented by vbdream at 2009.01.21 18:59 신고

      제 컴퓨터에서는 이렇게 뜹니다.:

      ---------------------------
      TestApp.exe - 응용 프로그램 오류
      ---------------------------
      "0x76c441ec"에 있는 명령이 "0x00000014"의 메모리를 참조했습니다. 메모리는 "read"될 수 없었습니다.


      프로그램을 마치려면 [확인]을 클릭하십시오.
      프로그램을 디버그하려면 [취소]를 클릭하십시오.
      ---------------------------
      확인 취소
      ---------------------------

      그리고 MSN Messenger좀 들어와 주세요... ㅠ_ㅠ;;

    • Commented by jz- at 2009.01.22 18:46 신고

      아마 내부에서 exception이 발생하고, 핸들링이 제대로 안되는 것 같습니다.

      exception이 발생하는 경우 windows는 핸들러에게 가는동안 LIST_ENTRY를 돌며 pe헤더 파싱을 하더군요.
      그래서 헤더를 손상시키면 exception handling이 되지 않는데 이게 원인일 수 있겠네요.

      저 경우에는 LIST_ENTRY를 손상시켜서 핸들링이 안되는 거일 수 있죠

      이거에 대한 포스팅도 할까말까 하고있는데 ㅋㅋ 귀찮아서..

      그리고 MSN은 집에 가서 들어가겠습니다. 크크

    • Commented by 한자돌이 at 2009.01.22 21:11 신고

      그러시면서 안들어오시는 센스(?);;

  3. Commented by HS at 2009.02.09 14:06 신고

    이런 방식의 덤프방지... 일부 환경에서는 안되더라구요;
    비스타에서는 실행자체가 안되고..
    일부 백신이 설치되어있을땐;; 실행되다가 꺼져버리기도 하고..^^;;

  4. Commented by HS at 2009.02.26 11:35 신고

    한동안 덤프방지땜에 이것저것 테스트를 많이 했는데..
    해당 EXE 파일이 Delay Import 를 가지고 있는 경우에,,
    Image Base 를 날리는게 문제가 되더군요..^^;;;
    엔트리포인트, 이미지크기 수정등은 별문제가 없는거 같았구요..

    Image Base 를 날리면 LordPE 의 Correct Image size 이런것도..
    애초에 안먹히니까 괜찮기는한데..^^;;
    =0= Delay Import 가진 녀석들에 대해 문제가 발생하는게..
    살짝.. 아쉽네요..ㅋ

    • Commented by jz- at 2009.03.02 12:24 신고

      여러 api에 영향을 미치기 때문에 범용으로 쓰기는 무리입니다 ㅋㅋ
      근데 delay import가 뭔가 해서 찾아보니, 실제함수 주소 대신 dll을 1회만 load하고, 그이후는 load한 addr로 jmp하는 코드가 들어가있는 것이더군요.
      imagebase가 없는 것이 왜 문제가 될지는 그 코드를 봐야할 것 같습니다.

      지금 vc6로 컴파일한 delay-load 바이너리를 리버싱해보았는데 loadlibrary, getprocaddress 말고 딱히 쓰는-의심가는 api는 없네요.

      다른 컴파일러의 경우 다를지도 모르겠지만

      아마 위의 vbdream님의 경우처럼 컴파일러가 아닌 시스템에 따라 안되는 것일듯 하네요 ㅋㅋ 아무튼 제 머신에선 delay import도 돼서 이유를 모르겠네요 ㅠㅠ

      바이너리를 부탁드려도 될까요 ㅋㅋ 궁금한데

  5. Commented by HS at 2009.03.03 15:54 신고

    제가 테스트해봤던건 한글과컴퓨터 오피스뷰어 2007 의 HncView.exe 파일입니다..
    실행시킨 후 임의로 이미지 베이스를 날린후 XLS/PPT 등 다른 포맷의 파일을
    읽어들이려하면.. 정상적으로 동작하지 않더라구요..^^;;

  6. Commented by 김동완 at 2013.08.01 10:26 신고

    멘토님 좋은 글 잘 보고 갑니다!

    프로텍터 만들떄 유용하겠네요 ㅋㅋ