ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • patch(+ IDA 주소 점프하도록 패치하기)
    리버싱 엔지니어링/드림핵 2022. 5. 6. 17:49

    patch : https://dreamhack.io/wargame/challenges/49/

     

    patch

    flag를 그리는 루틴을 분석하고 가려진 flag를 보이게 해주세요. Reference GDI+ - Win32 apps | Microsoft Docs Graphics Functions - Win32 apps | Microsoft Docs File — x64dbg documentation

    dreamhack.io

     

    IDA를 통해 파일을 열면 이런 코드를 발견할 수 있는데 부르는 함수들을 보면 화면에 무언가를 그리기 위해 세팅 후 화면에 보이는 것을 알 수 있다.

     

    함수들을 하나하나 찾으니 특별한 소득은 없어서 Win32에서 Gdi를 이용해 그리는 코드를 알아내보았다.

    아래 블로그에서 대충 코드를 이해할 수 있었고 

    https://bit.ly/3Fmb6Zw 

     

    Win32에서 GDI+ 사용하기

    : Win32 프로그래밍 관련 전체 목차 http://blog.naver.com/tipsware/221059977193 1. GDI+ (Gdiplus)...

    blog.naver.com

    WNDCLASS에서 그리기 함수를 전달함을 알 수 있었다!

     

    WNDCLASS 구조체

    WNDCLASS를 살펴보면 다음과 같이 생긴걸 알 수 있고, 알아야하는 함수는 lpfnWndProc이다. 따라서 해당 위치에 있는 값을 확인하면 함수를 알 수 있을 것이다.

    그래서 저장된 값을 확인해보니,

    함수 하나를 발견할 수 있었다. bp를 걸고 들어가보면,

    위 블로그에 그리기 함수에 있던 함수(BeginPaint, PostQuitMessage, DefWindowProcW 등)와 비슷한 코드 구조를 발견할 수 있었다.bp를 걸고 실행하면 대부분 BeginPaint가 있는 쪽이 아니라 반대편으로 넘어가 바로 DefWindowProcW를 부르고 return한다.따라서 BeginPaint가 있는 loc_7FF7E7533365에 bp를 걸고 실행했다.그리고 한 코드씩 진행하다보면[F8]

    sub_7FF7E7532C40 함수를 호출 후 그림이 그려지는 것을 확인할 수 있다. 따라서, 이번엔 이 함수에 bp를 걸고 실행해 보았다. 

    여기서 실행해보면 가리는 선 -> flag 순으로 그림을 그리고

    코드 상에서 sub_7FF7E7532B80함수를 반복해서 호출하다 다른 함수를 호출하기 시작하는데 그 부분이 flag를 그리는 부분이다. (각도만 바꾸기 때문에 같은 함수를 호출한 것 같다. )

    (실행해보면서 flag가 출력하는 부분을 체크해도 된다.)

     

    따라서, flag가 출력이 시작되는 부분에 rename 기능을 이용해 flag라는 이름을 붙여 주었다.

    이제 선 그리는 코드를 지나치고 flag로 바로 이동하도록 수정하면 선을 그리지 않게 되어 flag 값을 확인 할 수 있을 것이다!

     

    IDA에서 주소를 이동 패치하는 법

    ①  Edit -> Patch program -> Assemble

    ② jmp + rename으로 설정한 이름

    ③ 변경 완료

     

    위와 같이 패치하고 나면 선이 없이 flag 값이 출력된다.

     

    답)

     

    후기)

    우선 Win32 코드에 대해 정확히 모르니까 그걸 이해하는데 오래 걸렸던 것 같다

    코드를 제대로 이해못하니 BeginPaint로 실행되도록 패치하는 등의 바보같은 패치를 했다.

    그리는 함수를 정확히 찾고나니 문제 푸는건 금방이어서

    이번 문제는 잘 모르는 코드 분석하기 + 원하는 함수 찾기가 중점인듯 싶다. 

    '리버싱 엔지니어링 > 드림핵' 카테고리의 다른 글

    rev-baic-9  (0) 2022.05.03
    rev-baic-7,8  (0) 2022.04.19
    rev-basic-5,6  (0) 2022.04.09
    rev-basic-4  (0) 2022.04.05
    rev-basic-3  (0) 2022.04.05

    댓글

Designed by Tistory.