반응형

문제는 OEP를 원하고 있다.

 

여기서 OEP란 패킹된 파일들은 EP가 이상하게 되어버리는데 프로그램을 실행하다 보면, Unpacking되는 순간이 있다. 

이때부터 이 파일은 패킹 전 파일이고 이 파일의 시작 주소가 OEP가 된다. 그래서 OEP를 알면 패킹된 파일이라도 분석할 수 있다.

 

그래서 파일을 열어보면 처음부터 pushad라는 구문을 실행하려고 한다. 

보통 Packer의 특징은 특정 위치의 레지스터들을 백업해놓기 위해 처음에 pushad 명령어를 수행한다. 그리고 Unpack로직이 끝나면 백업해놓은 레지스터를 다시 복구시켜놓고 원본 파일의 실행을 시작하는 것이다. 그래서 다시 복구 시키는 구문 즉, popad 구문을 찾으면 OEP를 찾을 수 있다.

 

popad 구문을 쉽게 찾는 방법은 pushad 구문을 실행하고 다음 구문에서 스택에 브레이크 포인트를 거는 것이다.

레지스터가 백업된 스택의 주소

여기서 스택에 브레이크 포인트를 건다는 것은, 만약 pushad를 한 스택의 주소가 100번지라면 popad를 할 때도 100번지에 접근하여 백업된 레지스터 값을 가져올 것이다. 그렇기 때문에 100번지에 브레이크 포인트를 걸게 되면 pushad다음에 popad에서 이 스택 주소를 사용할 것이기 때문에 popad에서 멈추게 되는 것이다.

 

스택 하드웨어 브레이크 포인트

이렇게 스택에 브레이크 포인트를 걸게 되면 이렇게 popad에서 EIP가 멈추게 된다

그럼 아래에 있는 jmp구문에 있는 주소 즉, 401360이 OEP가 된다.

 

 

CTRL+G로 OEP로 이동하게 되면...

실제 패킹 전 프로그램이 나오게 되고 키를 판별하는 구문을 찾으면...

굉장히 쉽게 키를 구할 수 있다. 원한 양식은 OEP + KEY이기 때문에 

"401360AD46DFS547"

반응형

'Reversing 문제 풀이 > CodeEngn.com_Basic (Clear)' 카테고리의 다른 글

codeengn-basic-L08 풀이  (0) 2022.03.21
codeengn-basic-L07 풀이  (0) 2022.03.20
codeengn-basic-L05 풀이 UPX패킹 풀기  (0) 2022.03.11
codeengn-basic-L04 풀이  (0) 2022.03.11
codeengn-basic-L03 풀이  (0) 2022.03.11