"1.2메인 함수와 사용자 정의 함수 찾기 (VS 옵션 코드 이해)" 연재

 

 

1. VS 최적화 옵션 수정

변경 전
변경 후

 

 

 

 

2. 코드 확인

 

Entry point 코드 확인

Entry point 값이 기존과 달라졌다.

 

 

 

Main 함수 찾기

 

 

main함수와 사용자 정의 함수 구현된 부분이 보임. ^^

 

 

서브 루틴이 2개 표기됨.

.text:00401000

.text:00401000 ; =============== S U B R O U T I N E =======================================

.text:00401000

.text:00401000 ; Attributes: bp-based frame

.text:00401000

.text:00401000 sub_401000      proc near               ; CODE XREF: sub_401010+3p

.text:00401000                 push    ebp

.text:00401001                 mov     ebp, esp

.text:00401003                 mov     eax, 1234h

.text:00401008                 pop     ebp

.text:00401009                 retn

.text:00401009 sub_401000      endp

.text:00401009

.text:00401009 ; ---------------------------------------------------------------------------

.text:0040100A                 align 10h

.text:00401010

.text:00401010 ; =============== S U B R O U T I N E =======================================

.text:00401010

.text:00401010 ; Attributes: bp-based frame

.text:00401010

.text:00401010 sub_401010      proc near               ; CODE XREF: start-8Dp

.text:00401010                 push    ebp

.text:00401011                 mov     ebp, esp

.text:00401013                 call    sub_401000

.text:00401018                 xor     eax, eax

.text:0040101A                 pop     ebp

.text:0040101B                 retn

.text:0040101B sub_401010      endp

.text:0040101B

.text:0040101C ; ---------------------------------------------------------------------------

 

기존 코드 diff

 

3. VS 결론

결론 우리가 원하는 main 함수와 사용자 정의 함수 확인 성공

 

프로그램을 배포할 때 반드시 최적화 옵션 활성화 설정 필요.

아니면 코드가 그대로 노출된다.

 

 

"1.1메인 함수와 사용자 정의 함수 찾기 (VS 옵션 코드 이해)" 연재

 

 

1. VS 보안 옵션 수정

 

일단 보안 옵션을 변경해서 우리가 원하는 main 함수와 사용자 저의 함수를 조금 이남아 힌트를 얻어보자.

 

일단 보안 옵션은 버퍼 오버 플로우 공격을 차단하기 위해 사용된다. 정도만 이해하자.

 

기존 옵션을 유지한 상태에서 보안 옵션만 사용 안 함으로 설정

 

변경 전

 

변경 후

 

 

 

2. 코드 확인

 

Entry point 코드 확인

Entry point 값이 기존과 달라졌다.

 

 

 

Main 함수 찾기

 

 

일단 main 함수 진입전을 빠르게 찾아왔다.

 

 

main함수를 들어가보니 기존과 동일하다.

 

기존 코드 diff

 

 

3. VS 결론

결론 아직까지 main 함수와 사용자 정의 함수 구현부를 알 수 없다.

 

 

1. VS 콘솔 샘플 코드

 

#include <stdio.h>

 

int sub_1() // main()으로 부터 호출을 당하는 callee

{

        return 0x1234;

}

 

int main(void) // system으로 부터 호출을 당하는 callee

{

        sub_1();

        return 0;

}

 

2. VS 최초 프로젝트 생성 시 옵션 확인

 

 

 

 

 

3. VS 코드 확인

 

 

Entry point 코드 확인

 

 

0040125B 확인

 

 

Main 함수 찾기

 

.text:00401260                 jmp     loc_4010D9 // main을 이동하는 과정

 

 

일단 main 함수 진입점을 찾았다.

.text:004011CE                 call    sub_401000

 

 

 

 

main함수를 가봤더니 헉 알 수 없다. 무엇을 하는지 알 수 없다.

일단 중요한 건 main 함수를 찾은 것이다.

 

.text:00401000 sub_401000      proc near               ; CODE XREF: start-8Dp

.text:00401000                                         ; .text:00401831j

.text:00401000                 xor     eax, eax

.text:00401002                 retn

.text:00401002 sub_401000      endp

 

 

 

수상한 값 역추적

 

 

이 값은 도대체 무슨 값일까?

.text:00401003 byte_401003     db 3Bh                  ; DATA XREF: sub_40198B+Fo

.text:00401004                 dd 4030040Dh, 275F200h, 0E9F2C3F2h, 279h, 0E8016A56h, 0B47h

.text:00401004                 dd 67EE8h, 72E85000h, 0E800000Bh, 0B9Dh, 0CDE8F08Bh, 6AFFFFFFh

.text:00401004                 dd 0E8068901h, 3F9h, 5E0CC483h, 7374C084h, 83E8E2DBh, 68000008h

.text:00401004                 dd 4018FAh, 599E8h, 641E800h, 0E8500000h, 0B0Fh, 0C0855959h

.text:00401004                 dd 3AE85175h, 0E8000006h, 68Fh, 0B74C085h, 40100068h, 0AEBE800h

.text:00401004                 dd 0E8590000h, 651h, 64CE8h, 626E800h, 6DE80000h, 50FFFFFFh

.text:00401004                 dd 0B24E8h, 12E85900h, 84000006h, 0E80574C0h, 0ACDh, 0FFFF53E8h

.text:00401004                 dd 77FE8FFh, 0C0850000h, 6AC30175h, 659E807h, 0E8CC0000h

.text:00401004                 dd 61Eh, 0E8C3C033h, 7ADh, 0FFFF2FE8h, 0ECE850FFh, 5900000Ah

 

딱 봐도 메인 함수에 대한 보안이 되어 있다는 것을 알 수 있다.

일단 코드를 따라 가보자.

 

 

 

 

 

 

 

 

 

.text:00401260                 jmp     loc_4010D9

 

main 함수를 호출하는 과정에서 해당 코드가 수행되었다.

뭔가 느낌이 오는가? 아직 아무것도 알 수 없다면 우리는 다음 단원에서 밝혀보자.

PsSetCreateProcessNotifyRoutineEx function (ntddk.h)

 

구현부

 

NTSTATUS PsSetCreateProcessNotifyRoutineEx(
  PCREATE_PROCESS_NOTIFY_ROUTINE_EX NotifyRoutine,
  BOOLEAN                           Remove
);

 

 

PCREATE_PROCESS_NOTIFY_ROUTINE_EX PcreateProcessNotifyRoutineEx;


void PcreateProcessNotifyRoutineEx(
  PEPROCESS Process,
  HANDLE ProcessId,
  PPS_CREATE_NOTIFY_INFO CreateInfo
)
{...}

결론부터

- 실행파일이 어느 섹션에 포함 되었는지 확인이 쉽지 않다.

- ascii,40,0x0000004D,-,dos-message,-,!This program cannot be run in DOS mode. 하나만 표시

 

원본

 

UPX
원본
UPX
원본
UPX
원본
UPX

 

해결 방법

UPX언패킹!!

"1.2 숨어 있는 실행파일 추출1" 연재

ResourceHacker 실행 파일 추출

 

 

 

 

 

파일 확장자만 변경하면 그대로 사용 가능

"1.1 숨어 있는 실행파일 확인" 연재

 

 

Exeinfo PE 0.0.6.5 실행 파일 추출

 

작업 전

 

작업 후

 

드라이버 파일과, 일반 EXE파일 추출

 

샘플

 

실행 전

 

실행 후

 

 

1차 확인

pestudio.exe 

 

The file contains another file,signature: executable, location: .rsrc, offset: 0x00009240, size: 48640,1

The file contains another file,signature: executable, location: .rsrc, offset: 0x00015040, size: 5704,1

 

file,-,-,-,-,-,-,-,executable, offset: 0x00009240, size: 48640,-
file,-,-,-,-,-,-,-,executable, offset: 0x00015040, size: 5704,-

 

DRIVER,102,0x00015040,executable (cpu: 32-bit),5704,5.41 %,4.015,Korean,4D 5A 90 00 03 00 00 00 04 00 00 00 FF FF 00 00 ,M Z .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. @ .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 
BIN,101,0x00009240,executable (cpu: 64-bit),48640,46.12 %,4.279,Korean,4D 5A 90 00 03 00 00 00 04 00 00 00 FF FF 00 00 ,M Z .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. @ .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 

 

자신을 포함한 3개의 실행파일을 확인

ascii,40,0x0000004D,-,dos-message,-,!This program cannot be run in DOS mode.
ascii,40,0x0000928D,-,dos-message,-,!This program cannot be run in DOS mode.
ascii,40,0x0001508D,-,dos-message,-,!This program cannot be run in DOS mode.

 

2차 확인

CFF Explorer.exe

myExe.exe
MyDriver1.sys

+ Recent posts