Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 

Basic RCE Level 09

Problem

  • Korean : StolenByte를 구하시오
    • Ex) 75156A0068352040
  • English : Find the StolenByte
    • Ex) 75156A0068352040

Background Knowledge

  • 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로 이동하여 실행한다.

Tool

  • ExeinfoPe
  • CFF Explorer
  • x32dbg

Explanation

  • ExeinfoPe로 열어보니 UPX로 패킹되었다는 것을 알 수 있다.

  • CFF Explorer에서 언패킹해준다.

  • 언패킹한 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.