Easy Unpack

Finding the original entry point of a packed binary and dumping it once the unpacking stub has run.

2026.08.18 Reversing original post

Packer는 실행 파일을 “압축·암호화·변형”해서 분석과 리버싱을 어렵게 만드는 보호 기술입니다. 패커는 주로 리버싱 해킹 을 막기 위해 사용합니다. 그리고 언패커란, 패커에 의해 변형·암호화·압축된 실행 파일을 실행 흐름을 따라가며 메모리 상 에서 원본 코드가 완전히 복원된 시점, 즉 OEP(Original Entry Point)를 찾아 정상적인 프로그램 분석이 가능하도록 만드 는 모든 행위·기술·도구를 의미합니다

Figure 1

여기서 저는 아이다로 코드를 분석하겠습니다. IDA의 Graph View를 기준으로 실행 흐름을 분석해 보면, 초기 엔트리 포 인트에서는 XOR, INC, CMP, JZ/JMP와 같은 반복적인 루프와 의미 없는 분기 코드들이 다수 관찰됩니다. 이러한 패턴은 패커의 전형적인 복호화 루틴(packer stub) 으로, 실제 프로그램 로직이 아니라 메모리 상에서 원본 코드를 복원하기 위 한 준비 단계에 해당합니다.

특히 상단의 루프들은 ecx를 증가시키며 특정 메모리 영역에 대해 XOR 연산을 반복 수행하고 있으며, 조건 분기를 통해 동일한 루프 구조를 여러 번 순환합니다. 이 구간에서는 정상적인 함수 호출, API 사용, 프로그램 로직의 흐름이 전혀 나타 나지 않으며, 제어 흐름 또한 인위적으로 복잡하게 분산되어 있습니다. 이는 정적 분석을 방해하기 위한 패킹 코드의 특징 적인 모습입니다. 이러한 복호화 루틴이 종료된 이후, 실행 흐름은 여러 분기를 거쳐 하나의 지점으로 수렴하게 되며, 그 지점이 바로 0x401150입니다. 이 주소를 기준으로 IDA는 START OF FUNCTION CHUNK FOR start 라는 표시와 함께 정상적인 함 수 구조 분석을 다시 시작합니다.

0x401150 이후의 코드에서는 다음과 같은 변화가 명확히 관찰됩니다.

  • 의미 없는 루프와 난독화 분기 구조가 사라짐
  • lodsb, cmp, jnz 등 정상적인 로직 흐름을 가지는 명령어 등장
  • 실제 조건 판단 및 데이터 처리 코드가 나타남
  • 이후 코드 흐름이 프로그램의 논리 구조를 형성하기 시작함

이는 패커 stub이 모든 복호화 및 메모리 재배치를 완료한 뒤, 제어 흐름을 원본 프로그램의 시작 지점으로 즉 OEP로 넘겼 다는 강력한 증거입니다.

x32 디버거를 사용하고싶으면 이런 방법 또한 있다. 여기는 그 방법이다. easy unpack me 메인 함수에서 Ep 주소로 내 려간다. 코드를 ㄴ내려가다보면, 똑같은 방법으로 의미없는 분기들이 한곳에 보이는 포인트가 보인다.

Figure 2

Figure 3

즉 다시 401150 가 OEP 라고 알수있다는거다. 그러므로 Flag 는 401150 다.