간단한 설명:
프로젝트의 exe파일을 대상으로 여러 함수 중 하나의 함수를 정적 분석한 것이다.
분석목표:
GetCommandLineW / ReadFile / GetEnvironmentVariableW 등 외부 입력이 CreateDirectoryW/ACL 생성으로 흘러가는지 확인하고, 입력 검증의 부재 여부를 분석하였다.
요약:
- exe는 외부 입력(커맨드라인, 파일, 환경변수, 임시경로)을 읽을 수 있는 API를 import하고 있으며, 입력을 가공(따옴표 제거, 멀티바이트→와이드 변환)한 뒤 디렉터리 생성 및 ACL 조작에 사용하는 코드 경로가 존재.
POC:
- 바이너리를 Ghidra에 로드 → Import Summary 확인
- Imports(Symbol Tree → Filter)에서 먼저 외부 입력/환경 관련 API를 찾는다:
GetCommandLineW, ReadFile, GetEnvironmentVariableW, GetTempPathW 등이 보이면 외부 입력 가능성이 있음. - REF(References)를 사용해 API 호출 지점으로 이동:
References to GetCommandLineW → 호출자 위치(Decompile) 확인 - 주요 함수들 확인:
FUN_140017210: 따옴표 제거(quote stripper). (디컴파일 캡처)
FUN_1400079a0: MultiByteToWideChar로 변환, 필요 시 내부 할당(UTF-8 → UTF-16 helper). (디컴파일 캡처)
FUN_140016ee8: 경로 접근성 검사(_access_s / waccess_s) 등. (디컴파일 캡처)
FUN_140007810: OpenProcessToken / GetTokenInformation → ConvertSidToStringSidW → CreateDirectoryW 흐름. - 이정도 확인한것같다..
쉽게말해, 하나의 함수를 예시로 들어 간단한 흐름은
1. Symbol Tree → Filter으로 원하는 함수를 검색함.
2. Filter에서 함수가 나오면 Show References to 선택.

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

4. 외부 입력 → 내부 로직 연결:
GetCommandLineW는 사용자가 실행 시 입력한 커맨드라인 인자를 리턴.
→ 이 값이 그대로 CreateProcessW에 전달되면, 사용자가 입력한 인자나 실행 경로가 그대로 새로운 프로세스 실행에 영향을 줌.
정리하면..
- GetCommandLineW → lpCommandLine 저장.
- 그 값이 바로 CreateProcessW 인자로 전달됨.
- 따라서 외부 사용자 입력(커맨드라인)이 프로그램의 프로세스 실행 로직에 직접 반영됨.
- 보안 분석 관점에서는 명령줄 인자 조작 취약점 여부를 검토해야 하는 포인트가 됨.
- 그리고 파라미터값이 리턴이 안나오면 함수를 타고타고 들어가서 끝까지 찾아내야함...
이거만보면 외부 입력을 신뢰하고 있어 잠재적 취약점 지점이다라고 볼 수 있다.
하..어렵다..ㅜ
'모의해킹 > 리버싱' 카테고리의 다른 글
| exe파일 언패킹/추출, 디컴파일 (0) | 2025.09.23 |
|---|---|
| 리버싱 문자열 실습문제 (2) | 2024.07.30 |
| 리버싱 문자열 (1) | 2024.07.30 |
| 기본 레지스터 기초공부, 디버거 사용법 (1) | 2024.07.29 |