Folders and files Name Name Last commit message
Last commit date
parent directory
View all files
Korean : StolenByte를 구하시오
English : Find the StolenByte
The Art of Unpacking
Anti-Memory Dumping Techniques
Stolen Bytes(Code Splicing)
메모리 덤프를 방지하기 위해, Packer에 의해 OEP(Original Entry Point)의 일부 명령들(bytes)이 다른 위치에 옮겨지는데, 이 때 옮겨지는 명령들(bytes)을 의미한다.
패커들 분석
Packed PE 동작 원리
레지스터 Context를 저장한다. (PUSHAD
)
코드와 데이터 섹션을 디코딩하고 압축을 해제한다. (디코딩 루프)
사용할 라이브러리를 로드하고 그 라이브러리에서 사용되는 API들의 주소를 가져온다. (임포트 테이블 복구)
레지스터 Context를 복구한다. (POPAD
)
실제 OEP로 이동하여 실행한다.
ExeinfoPe
CFF Explorer
x32dbg
ExeinfoPe로 열어보니 UPX로 패킹되었다는 것을 알 수 있다.
언패킹한 PE를 x32dbg에서 열고 Entry Point에 도달하면, 12바이트가 비어있는 것을 확인할 수 있다.
이 12바이트가 곧 Stolen bytes이다.
Packer가 12바이트를 어디다 빼돌렸는지 찾아야 한다.
패킹된 PE파일을 x32dbg에서 열어보았다.
돌려보니 0x401000
에서부터 디코딩한 코드/데이터를 작성한다.
pushad
가 있는 구역에서 popad
를 검색하여 나온 위치에 Stolen bytes와 0x40100C
로 넘어가는 명령을 발견할 수 있다.
Stolen bytes
6A 00 68 00 20 40 00 68 12 20 40 00
총 12 bytes.
You can’t perform that action at this time.