ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • CodeEngn Basic RCE 10
    $ 리버싱 $/CodeEngn Basic RCE 2019. 5. 6. 13:48

    해당 문제는 해당 문제파일의 OEP를 구한 후에 분기점의 OPCODE를 구하면 되는 것입니다.

    해당 파일을 PEID로 확인해 보겠습니다.

     

    Aspack으로 패킹이 되어 있습니다. 

    언패킹을 해보겠습니다. 

     

    저기 아래에 보면 Aspack v2.0/2.001 이라는 문자열을 확인 할수 있습니다.

     

    올리디버거로 확인해 보겠습니다. 

    좀 아래로 내려가 보면 다음과 같은 화면을 확인 할 수 있습니다. 

     

    PUSHAD 라는 문자열을 확인 할 수 있습니다. 

    PUSHAD는 범용 레지스터에 저장된 값들을 스택에 저장하는 명령어 입니다. 

     

    현재의 레지스터값을 스택에 저장하고 원본 코드로 복구한다음 POPAD를 이용해서 원래의 레지스터 값으로 되돌린 다음 복구한 OEP로 분기합니다.

     

    F8을 한번더 눌러보면 PUSHAD 명령어가 실행 되서 EAX ECX와 같은 레지스터가 들어갑니다.

     

    ESP에 19FF64라는 주소가 들어가 있습니다. 

    해당 주소의 Dump 창으로 가보겠습니다. 

     

    그러면 다음과 같이 Dump창의 주소가 19FF64로 되어있습니다.

     

    주소가 바뀐 것을 확인하고 4바이트 만큼을 드래그 해서 해당 주소로 갑니다 

     

    그러면 POPAD로 가는 분기점에 BP가 걸리게 됩니다.

     

    한번 확인해 보겠습니다.

     

    를 눌러보면 다음과 같이 Hardware BP걸려있는 곳을 보여줍니다.

     

    19FF64에 4바이트 만큼 BP걸려 있습니다. 

     

    POPAD바로 다음으로 넘어갑니다. 

    이대로 쭉내려가보면 진짜 원본 코드의 OEP가 나옵니다.

     

    이처럼 말이지요 

     

    OEP는 445834입니다. 

     

    이제 OllyDump 플러그인을 이용해서 덤프를 떠보겠습니다.

    해당 사이트 에서 설치 하실 수 있습니다 : https://m.blog.naver.com/PostView.nhn?blogId=ln8520nl&logNo=220734849758&proxyReferer=https%3A%2F%2Fwww.google.com%2F

     

    Dump debugged process 를 클릭 하면 다음과 같이 창이 뜨는데 다음과 같이 설정 해야 하빈다.

     

    Modify 에 OEP 주소를 잘 적고 Rebuild Import에 체크를 해제해야 합니다.

    그 이유는 다른 툴로 Import 하는 것이 더 편리하고 좋기 때문입니다.

     

    Dump를 누르면 파일을 저장할 수 있습니다. 

    저장한 파일을 PEID로 확인해 보면 다음과 같이 Aspack이 Unpack 되어 있는 것을 확인 할 수 있습니다.

     

    겉으로는 Unpack이 되어 있는거 처럼 보이지만 내부적으로 봤을때 아직 완전하게 풀린 것이 아닙니다. 

     

    올리디버거로 확인해서 파일을 열어 보면 다음과 같은 에러가 뜨게 됩니다.

    시작 지점이 없다고 뜨게 됩니다. 

     

    그래서 시작지점을 다시 잡아줘야 하는데 아까 체크를 해제했던 Import를 해주겠습니다. 

     

    사용 할 툴 이름은 Import REConstructor 입니다.

     

    설치 방법은 다음과 같습니다.

    https://m.blog.naver.com/PostView.nhn?blogId=ln8520nl&logNo=220734849758&proxyReferer=https://www.google.com/

    아까 다운한 파일을 올리디버거에 넣고 저기 Attach to an Active Process의 ▼를 눌러보면 다음과 같이 파일을 선택 할 수 있습니다. 

     

    위와 같이 파일을 올릴수 있습니다.

    다음의 순서대로 클릭하시면 됩니다. 

    1. AutoSearch을 클릭.

    2. Get Import을 클릭.

    3. kernel32.dll FThunk ... 을 클릭.

    4. Fix Dump을 클릭.

    5. 파일 저장

     

    위의 5가지를 완료 한 후에 해당 파일을 올리디버거로 열어보면 잘열립니다. 

     

    이제 문제로 다시 돌아가서 성공이라는 문자열이 뜨면 해당 문자열로 가는 분기하는 주소를 찾아야 합니다.

     

    올리디버거에서 우클릭후에 문자열을 찾아보면 다음과 같습니다.

    well done! 이라는 문자열이 출력되기 위한 그전 분기점으로 올라가 보면 다음과 같습니다.

     

    4454D4주소에 있는 JNZ 분기를 넘어가 버리면 44550C에 있는 성공 문자열을 볼 수 없습니다. 

     

    그렇기 때문에 분기의 주소는 4454D4입니다. OPCODE는 7555입니다.

     

    그렇기 때문에 004458347555 를 입력 하면 됩니다.

     

     

     

    '$ 리버싱 $ > CodeEngn Basic RCE' 카테고리의 다른 글

    CodeEngn Basic RCE 12  (0) 2019.05.06
    CodeEngn Basic RCE 11  (0) 2019.05.06
    CodeEngn Basic RCE 9  (0) 2019.03.27
    CodeEngn Basic RCE 8  (0) 2019.03.27
    CodeEngn Basic RCE 7  (0) 2019.03.27

    댓글

Designed by Tistory.