분석 전 쉘코드가 어떤 아키텍쳐로 제작되었는지 중요하다. 32비트로 만들어진 쉘코드를 x64dbg로 연결했을 경우 오류가 발생하였으며, x32dbg로 올렸을 경우 정상적으로 코드가 동작된다.
쉘코드를 자주 본다면 이런 앞부분 형태에 익숙하게 된다. 이는 어셈블리어 코드로 본다면 함수의 시작 느낌이 강하다.
55 push ebp
8b ec mov ebp, esp
83 ec 10 sub esp, 0x10
8d 45 f0 lea eax, [ebp-0x10]
b9 4b 17 cd 5b mov ecx, 0x5bcd174b
6a 00 push 0x0
1. x32dbg(또는 x64dbg) 실행
- 32비트 디버거 실행 후 아무 32비트 파일을 로드한다.
- 가장 만만한 notepad.exe 를 바탕화면에 하나 복사해두고 올린다. (64비트 OS 기준 C:\Windows\SysWOW64 경로가 된다)
2. 메모리 맵을 통해 메모리 할당하기
- 메모리 할당하기 (메모리 맵 -> 메모리 할당 -> 표현식 값 입력)
- 크기는 쉘코드 보다 크게 잡는다. (쉘코드 크기 : D9280 -> DA000으로 잡기)
- 메모리맵 -> 사용자할당 메모리 찾은 후 이동 00으로 비어있는 값에 쉘코드 붙혀넣기
- HxD로 쉘코드 전체 복사 후 -> 첫번째 주소값에 -> 바이너리 -> 붙혀넣기(크기무시)
3. 맨 앞쪽에 EIP설정
- 04940000 주소 맨 앞에 우클릭 후 EIP설정 (64비트는 RIP)
- F7/F8 등으로 따라가면서 디버깅 시작
- 맨 처음 쉘코드를 IDA를 통해 디버거와 동시에 확인하면 보기 편하다.
쉘코드를 익숙하게 많이 보다보면 숨겨진 바이너리 값에서 쉽게 찾을 수 있을 것이다.
'분석 TIP > 동적분석' 카테고리의 다른 글
| ASP.NET 서버에서 돌아가는 DLL 파일 (0) | 2025.04.27 |
|---|---|
| dnSpy의 Analyzer 기능 (0) | 2025.04.25 |
| IDA와 Debugger 주소 매칭 (0) | 2025.04.11 |
| IDA를 통해 리눅스 원격 elf 파일 디버깅 (0) | 2025.03.31 |
| Sysmon 통한 리눅스 동적 분석 (0) | 2025.03.27 |