본문 바로가기

모의해킹/리버싱

Ghidra(기드라)로 수동 정적분석

간단한 설명:

프로젝트의 exe파일을 대상으로 여러 함수 중 하나의 함수를 정적 분석한 것이다.


분석목표:

GetCommandLineW / ReadFile / GetEnvironmentVariableW 등 외부 입력이 CreateDirectoryW/ACL 생성으로 흘러가는지 확인하고, 입력 검증의 부재 여부를 분석하였다.


 

요약:

  • exe는 외부 입력(커맨드라인, 파일, 환경변수, 임시경로)을 읽을 수 있는 API를 import하고 있으며, 입력을 가공(따옴표 제거, 멀티바이트→와이드 변환)한 뒤 디렉터리 생성 및 ACL 조작에 사용하는 코드 경로가 존재.

POC:

 

  1. 바이너리를 Ghidra에 로드 → Import Summary 확인
  2. Imports(Symbol Tree → Filter)에서 먼저 외부 입력/환경 관련 API를 찾는다:
    GetCommandLineW, ReadFile, GetEnvironmentVariableW, GetTempPathW 등이 보이면 외부 입력 가능성이 있음.
  3. REF(References)를 사용해 API 호출 지점으로 이동:
    References to GetCommandLineW → 호출자 위치(Decompile) 확인
  4. 주요 함수들 확인:
    FUN_140017210: 따옴표 제거(quote stripper). (디컴파일 캡처)
    FUN_1400079a0: MultiByteToWideChar로 변환, 필요 시 내부 할당(UTF-8 → UTF-16 helper). (디컴파일 캡처)
    FUN_140016ee8: 경로 접근성 검사(_access_s / waccess_s) 등. (디컴파일 캡처)
    FUN_140007810: OpenProcessToken / GetTokenInformation → ConvertSidToStringSidW → CreateDirectoryW 흐름. 
  5. 이정도 확인한것같다..

쉽게말해, 하나의 함수를 예시로 들어 간단한 흐름은

1. Symbol Tree → Filter으로 원하는 함수를 검색함.

2. Filter에서 함수가 나오면 Show References to 선택.

GetCommandLinW함수를 검색 후 Show References to 옵션

3. 이제 GetCommandLinW 이 함수가 어디서 어떻게 호출되는지 보면됨.

 

  • 왼쪽 어셈블리 뷰: 0x140007046에서 CALL qword ptr [→ KERNEL32.DLL::GetCommandLineW] 호출이 보임.
  • 아래 References 창: GetCommandLineW는 총 3곳에서 참조됨 (0x140007046, 0x14000efb1, 0x14002ac8).
    → 즉, 프로그램이 최소 3번은 자기 실행 커맨드라인 문자열을 읽는다는 의미.

 

 

4. 외부 입력 → 내부 로직 연결:
GetCommandLineW는 사용자가 실행 시 입력한 커맨드라인 인자를 리턴.
→ 이 값이 그대로 CreateProcessW에 전달되면, 사용자가 입력한 인자나 실행 경로가 그대로 새로운 프로세스 실행에 영향을 줌.

 

정리하면..

  1. GetCommandLineW → lpCommandLine 저장.
  2. 그 값이 바로 CreateProcessW 인자로 전달됨.
  3. 따라서 외부 사용자 입력(커맨드라인)이 프로그램의 프로세스 실행 로직에 직접 반영됨.
  4. 보안 분석 관점에서는 명령줄 인자 조작 취약점 여부를 검토해야 하는 포인트가 됨.
  5. 그리고 파라미터값이 리턴이 안나오면 함수를 타고타고 들어가서 끝까지 찾아내야함...

이거만보면 외부 입력을 신뢰하고 있어 잠재적 취약점 지점이다라고 볼 수 있다.

하..어렵다..ㅜ

 

'모의해킹 > 리버싱' 카테고리의 다른 글

exe파일 언패킹/추출, 디컴파일  (0) 2025.09.23
리버싱 문자열 실습문제  (2) 2024.07.30
리버싱 문자열  (1) 2024.07.30
기본 레지스터 기초공부, 디버거 사용법  (1) 2024.07.29