woonadz :)

Control ID로 MFC 호출 함수를 찾아보자 (MFC 리버싱) 본문

IT/기타

Control ID로 MFC 호출 함수를 찾아보자 (MFC 리버싱)

C_scorch 2024. 4. 11. 00:00
반응형

https://h3llouniverse.blogspot.com/2016/09/event-mfc.html

 

Event 추적을 통한 MFC 리버싱

모든 MFC 파일들은 특정 행동들을 모두 Event로 보고 사용자의 행위에 따라 맞는 Event를 발생시키며 동작한다. 이 점을 통하여 MFC를 이해해고 있다면 리버싱을 통하여 자신이 원하는 부분을 빠르고

h3llouniverse.blogspot.com

 

위 글에서 Control ID 값으로 MFC 호출 함수를 찾아가는 내용을 확인했습니다.

처음보는 내용이라 신기해서 DreamHack babycmp 예제로 따라해본 내용을 풀이하겠습니다.

(처음에 이해 못하고 뻘짓해서 팀에 계신 연구원님께 여쭙고 알게된 내용 바탕으로 적었습니다..ㅋㅋ)

 

먼저 참고 글에서는 32bit 실행 파일을 사용하였고, 제가 사용한 예제 파일은 64bit 실행 파일입니다.

 

ResourceHacker의 dialog 폴더에서 사용자에게 보이는 gui 화면들을 확인할 수 있습니다.

SERIAL을 입력받는 message box 부분에서 사용자의 입력값을 체크하는 ID 값을 확인해보면 1005 라는 것을 알 수 있습니다. 

이 ID 값을 16진수로 변환해 리틀 엔디언으로 표기하면 "ED 03" 입니다. 이 값을 통해 함수의 주소값을 찾을 수 있는데 그 이유는 아래 구조체 형식과 관련이 있습니다. 지금 찾은 ID 값이 nID에 속하는 control id 값이고, 이 값으로부터 4byte, 8byte 떨어져있는 곳에 값이 함수의 주소값입니다.

함수의 주소값은 32bit 기준으로 4byte, 64bit 기준으로 8byte를 읽으면 됩니다.

struct AFX_MSGMAP_ENTRY {
        UINT nMessage; // 윈도우즈 메세지
        UINT nCode; // 제어 코드 또는 WM_NOTIFY 코드 값
        UINT nID; // control id
        UINT nLastID; // control id의 범위를 정의하기 위한 엔트리
        UINT nSig; // 메세지 핸들러 함수 프로토타입을 구분하는 식별값
        AFX_PMSG pfn; // 메세지를 처리할 함수 포인터
};

 

 

64 bit 기준 ID 값부터 12byte 후에 함수의 주소를 확인할 수 있습니다.

함수의 주소를 빅엔디안으로 바꾸면 "0140001F60" 입니다.

이제 이 값을 가지고 IDA에서 함수를 찾아보겠습니다.

 

이렇게 Check 버튼과 관련된 코드를 찾을 수 있었습니다.

반응형

'IT > 기타' 카테고리의 다른 글

[Virustotal API v3] v2와의 차이를 알아보자  (0) 2024.03.09
[Virustotal API v3] MITRE ATT&CK 파싱 코드  (0) 2024.03.09