본문 바로가기
Reversing

[Lena] Lena Tutorial 20

by 8희 2023. 5. 16.

 

뭐가 문제인 거지?

이거부터 혼란스럽다.

구글링 해서 뭘 해야 되는 지 찾았다.

 

 

앱을 클릭하면 언패킹 하고 싶으면 튜토리얼을 작성하라고 한다 :)

 

패킹(실행 압축)은 실행 파일의 코드를 압축하는 행위이고
그렇게 압축된 코드를 해제하는 것이 언패킹이다. 

패킹은 일반적으로 흔히 알고 있는 압축과 달리 있는 그대로 일반 프로그램처럼 실행이 가능하다.

 

패킹은 데이터 압축의 목적 혹은

악성 코드에서 작은 용량으로도 빠르게 많이 퍼지게 하여, 분석이 불가능 하게끔 만드는 목적으로 사용된다.

 

패킹의 기본 원리

패킹 프로그램이 실행되는 어느 시점에서는 압축되기 전 상태로 돌아가야 하며,

그때 메모리 상태를 Dump(메모리 내용을 그대로 파일로 저장)하고, 

EP를 압축하기 전 위치로 설정해주는 것이다.'

 

EP(Entry Point) - 실행파일의 코드 시작점
OEP(Original Entry Point) - 원본 코드 시작점

 

> OEP만 찾을 수 있다면 패킹 해제는 아주 쉽게 이루어질 수 있다.

 

 

패킹된 바이너리이기 때문에 실행 시 EP가 코드 섹션을 벗어난 주소에 존재한다는 내용의 경고 창이 뜬다.

패킹되면 EP가 달라지기 때문에 뜨는 것으로 무시해도 된다.

 

 

x32로 파일을 열고 Ctrl + F8을 클릭해 EP로 이동한다.

 

 

메모리 부분을 확인해 보면 .text 부분인 401000 ~ 44B000 사이에 Entry Point가 존재해야 한다는 것을 알 수 있다.

​현재 찾은 EP는 0046B6DE로 기준점을 벗어났으므로 

언패킹 하기 위해서는 해당 범위 내에 있는 OEP를 찾아야 한다. 

OEP는 주로 언패킹이 수행되고 나서 jmp가 있는게 특징이다.
즉, 압축을 모두 풀었으면 이제 코드를 실행할 처음 주소로 이동한다는 의미이다.

 

 

OEP로 의심되는 분기문을 찾아본 결과, 004271B0으로 확인된다.

앞서 메모리 맵에서 봤던 코드 영역에 포함되기 때문이다. 

 

 

따라서 여기서 메모리 덤프를 진행해야 된다. 

 

 

메모리 덤프는 플러그인 > Scylla를 클릭해서 진행할 수 있다.

 

 

IAT Autosearch를 누르면 IAT Info를 보여준다.

 

 

 

get imports를 누른 후, 파일을 저장한다.

 

 

Fix Dump를 눌러서 앞서 저장한 dump 파일을 불러온 후, 다시 파일을 저장한다.

 

 

 

총 파일이 세 개가 된다.

 

 

저장한 _SCY 파일을 열어서 Ctrl + F8을 클릭하면 바로 OEP로 이동한다!

 

 

참고

https://lucete1230-cyberpolice.tistory.com/176

https://jdh5202.tistory.com/679

 

'Reversing' 카테고리의 다른 글

[Lena] Lena Tutorial 22  (0) 2023.05.28
[Lena] Lena Tutorial 21  (0) 2023.05.18
[Lena] Lena Tutorial 19  (0) 2023.05.16
[Lena] Lena Tutorial 18  (0) 2023.05.10
[Lena] Lena Tutorial 16  (0) 2023.05.10