HWP 파일 내 BINdata 안에 OLE를 포함하고 있다. OLE의 경우 PS와 다르게 자동 실행되지 않으며, OLE개체를 사용자의 상호작용(클릭 or 매크로)을 통해 실행된다. 만약 해당 내에 쉘코드가 포함되어 있을 경우에는 문서의 취약점을 악용하는 경우가 많다.
malcat을 통해 구조를 확인해보자. Bindata안에 의심스러운 OLE 개체를 확인할 수 있다.

해당 Bindata는 Zlib으로 압축되어 있기 때문에 수동으로 풀어줘도 되지만, decompress 툴이 존재할 경우 자동으로 풀어주는 툴을 이용해보기도 하자.
현재 샘플 같은 경우 decompress를 하면 파일 용량이 180MB를 넘나는드는 대용량이 되버린다.
처음 4바이트는 삭제하자. 그래야지 OLE개체로 인지할 수 있다.

다시 Malcat을 통해 열어서 구조를 보자.

이 세 놈이 용량을 크게 하는 범인인 것 같다. 여기서 공격자의 의도를 파악하면 좋을 것이며, 이 60MB짜리 대용량 파일 3개가 그냥 낚시용인지 아니면 실제 코드가 들어있는지 확인이 필요 하다.
우선 비슷해보이는 60MB짜리 세 개를 모두 빼보고 쉘코드로 의심될 놈을 찾아봤지만, 나오지 않았다.
그래서 BMP파일 하나하나 보기로 해본다.
일단 쉘코드 초입에 많이 쓰는 90909090이라는 공백을 검색해보자. 거의 밑 부분에 존재하며, 90 다음에 60 FC 등은 PUSHAD 명령어로 거의 쉘코드로 의심해 볼 수 있다.

실제 IDA에 올려봤을 경우 쉘코드로 확인이 되었다.
60 FC → PUSHAD (60) 및 CLD (FC), 즉 레지스터를 저장하고 DF 플래그를 클리어하는 명령어
E8 99 01 00 00 → 상대적 CALL 명령어로, 쉘코드의 실행 흐름을 특정 위치로 변경하는 패턴
나머지 2개의 BMP파일도 동일한 방법으로 확인해봤는데 해쉬가 동일하게 나왔다. 동일한 3개의 쉘코드가 포함된것으로 확인할 수 있었다. (처음에는 OS 또는 32/64비트 별로 다른 쉘코드가 들어있는줄 알았다)
그렇게 하나의 파일을 IDA로 열어보자. (32비트 형태로 오픈)
디버겅을 해도 되지만, 쉘코드의 경우 대부분 취약점을 통해 실행되기 때문에 디버거로 취약한 환경을 그대로 재현 할 수 없기 때문에 디스어셈블러를 통해 보는 것이 좀 더 쉽게 확인이 가능하다.
쉘코드를 봤을 때 주목해야할 점은 두 가지이다. 특정 시작점을 두 번 검색. 그리고 xor과 더하기를 통한 반복문이다.

분석을 많이했다면 그냥 때려 맞출수 있는 수준이다. 시작점을 찾고 덤프 뜬 다음 0x37를 xor하고 55을 + 해주면 된다.
최초 덤프 떴던 bmp파일에서 리틀엔디안으로 검색해보면 내가 찾던게 나온다. (쉘코드 밑에) 2개가 이어져있는 바이트가 존재한다.

여기부터 끝까지 덤프 뜬 후 xor, add 작업을 해주자.


이렇게 하면 복호화된 PE파일을 구할 수 있다.
이제 나온 최종 페이로드를 분석 하면 된다.
'분석 TIP > 정적분석' 카테고리의 다른 글
| Visual Basic 6.0 샘플 분석 (0) | 2025.04.18 |
|---|---|
| PDF Deflate JavaScript 분석 (0) | 2025.04.17 |
| HWP PS 파일 분석 (0) | 2025.04.15 |
| IDA 도구 활용 (0) | 2025.04.09 |
| IDA 파이썬 스크립트 (0) | 2025.04.04 |