ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 8. [reversing.kr] Easy Unpack me
    프로그래밍/Reversing 2022. 4. 13. 22:49
    반응형

     

    0단계 - 다운로드

    http://reversing.kr/challenge.php

     

    Reversing.Kr

    Copyright © 2012-2022 Gogil All Right Reserved.

    reversing.kr

     

    1단계 - 프로그램 실행해보기

    별다른건 없고 OEP를 찾으라는데?

     

     

     

    2단계 - peid로 열어보기

     

    알 수 없는 방법으로 패킹 되어있다.

     

    이럴땐 Generic OEP Finder 기능을 활용해보자.

     

    ????

    답이 나왔는데요?????????????

     

    하단의 PEiD Generic Unpacker를 이용하면...

    언팩도 가능... 

     

     

    3단계 - 직접 해보기

     

    답은 그냥 나왔지만 사실 나는 매뉴얼 언패킹을 못한다.

    이건 쉬워서 그냥 푸는 방법을 알 뿐

     

     

     

    프로그램은 exe하나의 파일이지만 사실 섹션(부분)으로 나뉜다고 한다.

    (곤충 하나가 머리 가슴 배로 나뉘듯이?)

    사람에 인체해부도가 있다면 이건 exe 해부도가 아닐까

     

     

    이 프로그램은 알 수 없는 방법으로 패킹이 되어있고 5개의 섹션으로 나누어져 있다.

     

    peview로 열어보니 00000000 ~ 0000BF0 이렇게 하나의 파일인데

    00000000 ~ 0000003C 부분은 Image_DOS_Header

    00000040 ~ 000000D0 부분은 MS-DOS Stub Program

    .

    .

    .

     

    이런식으로 섹션을 나누어서 볼 수 있다.

    이 두 부분은 dos시절부터 프로그램 호환을 위해 빠져서는 안되는 부분이다.

    그래서 모든 exe 프로그램은 4D 5A 90 ~~ 이런 식으로 시작을 한다.

    MZ~

     

    NEW EXE 헤더파일은 도스헤더 가장 아랫부분을 보면 D8부터라고 되어 있다.

     

    IMAGE_NT_HEADER 를 보면 진짜로 D8부터 시작되는걸 알 수 있는데

    PE로 시작하는 특징이 있는데 이 부분만을 PE헤더라고 부르진 않는다 (헤더 전체를 묶어서 PE헤더라고 부르는 듯)

    이곳은 그냥 NT 헤더

     

    IMAGE_OPTIONAL_HEADER를 보면 다양한 정보들을 얻을 수 있는데

    이미지 베이스는 x64dbg의 메모리 맵에서도 볼 수 있다.

     

     

    Image Base ( 400000 ) 에 엔트리포인트 포인트( A04B )를 더해서

    디버거로 열면 두 값을 더한 주소 ( 40A04B ) 에서 시작을 한다.

     

     

    * 엔트리포인트 정보가 저장되는 위치

    이미지 도스 헤더에서 알려준 new exe header 가 D8 이었는데

    여기에 맨위에 그림을 보면 0x0028 부분이 엔트리 포인트 이다.

    그래서 D8 + 0x0028을 해보면 엔트리 포인트가 100번지가 나온다.

    이부분의 주소로 가보면

    A04B를 알 수 있다. 여기에 이미지 베이스를 더하면 엔트리포인트가 나온다.

     

     

     

     

    다른건 더 봐도 아직 잘 모르겠다. 

     

     

    섹션별로 오프셋이 다르니까 쓰는 부분이 다르겠거니 추측을 할뿐.

     

    코드로 가서 ctrl + F8로 animate over를 수행했다.

    돌리다가 첫번째 반복하는 부분을 만났는데

    ecx 가 1씩 증가하길래 이부분을 Follow in dump 를 해보았다.

     

    409000부터 시작해서 409050을 지나 409125에서 끝나는 것을 확인했는데. .gogi 부분인 것 같다. 

     

     

     

     

     

    두번째 반복구간을 만났는데

    api명을 읽는 부분인듯하다

     

     

    세번째 구간은 401000부분을 훑고있었다.

     

    네번째는 40605F부분이다.

     

     

     

    모든 언패킹과정이 끝나면 return 이나 jmp로 oep 주소로 가므로

    40A1FB에서 점프시키는 곳인 401150이 oep라고 추측

     

    401150에 eip가있을때 find strings를 해보면 정상적으로 잘 보임.

     

    다른 프로그램 실행중에도 이 부분에서 정확히 멈출 수 있는 방법은 없을까?????

     

     

     

     

     

     

     

     

    아직 사용할 줄도 모르는 IDA로 열어보면 

    이런식으로 간단하게 찾아낸다는데 이렇게 안열리는 실행파일들도 있어서 도움이 될지는 모르겠다.

     

     

     

     

     

     

     

    x64dbg의 Scylla 를 이용해 덤프시켜줬다.

    eip가 oep에 있을때 가능하다.

     

     

     

     

     

    반응형

    '프로그래밍 > Reversing' 카테고리의 다른 글

    9. [레나 튜토리얼] 03  (654) 2022.04.14
    [Ghidra] stryker2k2's crackme 0x00 ~ 0x04  (313) 2022.04.14
    7. [reversing.kr] Music Player  (313) 2022.04.13
    6. [reversing.kr] Easy Keygen  (316) 2022.04.12
    5. [reversing.kr] EasyCrack  (317) 2022.04.11

    댓글

Designed by Tistory.