오브의 빛나는 별

1부 2장 Hello World! 리버싱(3) 본문

리버싱

1부 2장 Hello World! 리버싱(3)

오브의 별 2022. 4. 23. 01:02
반응형

안녕하세요, 오브입니다.

오늘은 원하는 코드를 빨리 찾아내는 4가지 방법에 대해 알아보겠습니다.

 

Hello World! 리버싱

2.4.1. 코드 실행 방법

<main() 함수의 MessageBox() 함수 호출 코드 찾기>

  • 디버거로 HelloWorld.exe를 디버깅[F8]하다 보면, 언젠가 main() 함수의 MessageBox() 함수가 실행되어 “HelloWorld” 메시지 박스 출력
  • 코드의 크기가 작고 기능이 명확한 경우 사용 가능
  • 실습
    • 베이스캠프(40104F)에서부터 명령어를 한 줄씩 실행[F8]
    • 디버거 재실행[Ctrl+F2] 반복해보면 특정 함수를 호출한 이후 메시지 박스가 나타나는 것 파악 가능
    • ‘401144’ 주소에 있는 CALL 00401000 명령어에서 호출하는 함수 주소 401000으로 가보면[F7] main() 함수 코드 영역임
    • 40100E 주소에 MessageBoxW() API 호출 코드가 보임
    • 401002와 401007 주소의 PUSH 명령어는 메시지 박스에 표시될 문자열을 스택에 저장하여 MessageBoxW() 함수에 파라미터로 저장

 

2.4.2. 문자열 검색 방법

  • 마우스 우측 클릭-Search for- All referenced text strings
  • 프로그램 코드에서 참조되는 문자열들을 보여줌
  • 401007 주소의 PUSH 004092A0 명령어에서 참조되는 4092A0 주소는 ‘HelloWorld!’ 문자열
  • 문자열 더블클릭하면 호출 코드로 바로 이동 가능
  • 덤프 창 클릭 후 [Ctrl+G] 눌러서 4092A0으로 가면 유니코드로 된 ‘HelloWorld!’ 보임
  • 그 뒤에는 NULL로 채워짐

 

2.4.3. API 검색 방법(1)- 호출 코드에 BP

  • 마우스 우측 클릭- Search for- All Intermodular calls
    • Windows 프로그래밍에서 모니터 화면에 출력시 Win32 API 사용하여 OS에게 화면 출력 요청
  • 코드에서 사용된 API 호출 목록을 보고싶을 때 ‘All Intermodular calls’ 명령 사용
  • 40100E 주소에서 user32, MessageBoxW() API 호출

 

2.4.4. API 검색 방법(2)- API 코드에 직접 BP

  • Packer/Protector 이용하여 실행 파일 압축 또는 보호하면 파일 구조가 변경되어 OllyDbg에서 API 호출 목록이 보이지 않음
    • Packer: 실행 암축 유틸리티, 실핼 파일 코드, 데이터, 리소스 등 압축. 일반 압축 파일과 다른 점은 압축된 파일 자체도 실행 파일임
    • Protector: 실행 압축 기능 외 파일 및 프로세스 보호 목적으로 anti-debugging, anti-emulating, anti-dump 등 기능 추가
  • API라는 것은 OS에서 제공한 함수이고, 실제로 API는 C:\Windows\system32 폴더 *.dll 파일 내부에 구현되어 있음

 

<프로세스 메모리 일부분 확인>

  • 마우스 우클릭- View- Memory[alt+M]
  • USER32 라이브러리가 로딩되어 있는 메모리 영역 확인

 

<DLL 파일이 제공하는 모든 API 목록 확인>

  • 마우스 우클릭- Search for- Name in all modules
  • “MessageBoxW” 검색(그냥 키보드를 치면 검색이 됨)

  • USER32 모듈에서 Export type의 MessageBoxW 더블클릭

  • 7761A9B0(컴퓨터마다 다름)에서 BP 설치[F2], 실행[F9]
    • [F8] 눌러서 7761A9B0 값까지 가기
    • 레지스터 창의 ESP 값이 프로세스 스택의 주소(컴퓨터마다 다름)
    • ESP 값: 0019FF1C
    • 써있는걸 해석해보면 MessageboxW는 0040100E주소에서 호출됐고, 함수 실행이 종료되면 401014로 리턴

  • Call 함수까지 [F8]해서 메시지 박스 확인
  • 메세지 박스에서 [확인] 버튼 누르면 실행되는 걸 확인 가능
  • RETN 함수까지 [F8]하면 리턴주소 401014로 가는 걸 확인 가능
    • 401014는 HelloWorld.exe의 main 함수 내 MessageBoxW 함수 호출 바로 다음 코드임
    • 위로 커서를 조금 올리면 확인 가능

반응형

'리버싱' 카테고리의 다른 글

1부 3장 리틀 엔디언 표기법  (0) 2022.04.23
1부 2장 Hello World! 리버싱(3)  (0) 2022.04.23
1부 2장 Hello World! 리버싱(2)  (0) 2022.04.22
1부 2장 Hello World! 리버싱(1)  (0) 2022.04.21
1부 1장 리버싱 스토리  (0) 2022.03.28