[피카츄배구 리버싱] 1


네, 다들 한번쯤은 해보셨을 피카츄배구입니다. 한글화가 된 프로그램도 쉽게 구할 수 있습니다만 원본파일을 가지고 리버싱을 해보겠습니다. 한글화가 된 프로그램은 원본 프로그램에서 누군가가 먼저 건들여놓은 프로그램이니까요.


PIKA_V+original.exe



보면 exe파일 하나만으로 알아서 이미지와 bgm을 불러옵니다. 아마 내부에 리소스로 들어있는 것 같습니다. 일단 제일 처음 거슬리는건 저 해괴한 제목입니다. 저 제목을 정상적인 제목으로 바꾸어봅시다. 날로 먹기 위해 All referenced text strings를 해보면



??? 제목이 없습니다. 딱 봐도 난독화나 패킹이 이루어진 것 같지는 않은데 이게 무슨 상황일까요? 별 수 없이 열심히 한 줄 한 줄 실행하면서 실행 흐름을 알아가겠습니다.

우선 Entry point는 40A350번지입니다.


찬찬히 따라가다보면 40A488번지에서 401AD0 함수를 CALL하면서 창이 열리는 것을 확인할 수 있습니다. 401AD0 함수(앞으로 sub_401AD0으로 표기합니다) 내부로 들어가봅시다.



또 천천히 한줄씩 가다보면 401AD0 내부에서는 401B19번지에서 sub_401240을 CALL하면서 창의 일부가 열림을 알 수 있습니다. 일부라 함은 아래와 같은 상황임을 의미합니다.



정확히 어떤 식으로 로딩이 되는지 알기 위해 sub_401240 안으로 들어가봅니다.



일단 GetSystemMetrics 함수가 무엇인지 찾아보면 현재 모니터의 해상도를 알아낼 때 쓰이는 함수입니다. 들어가는 인자에 따라 각기 다른 정보들을 얻을 수 있습니다.(https://msdn.microsoft.com/en-us/library/windows/desktop/ms724385(v=vs.85).aspx)

그리고 SetRect 함수는 RECT 구조체의 크기를 지정해주는 함수입니다. 401240번지부터 401297번지 까지는 현재 모니터의 정보를 읽어서 창의 크기를 계산한다고 생각하면 되겠네요.

IDA로 조금 더 보기좋게 정리한 코드는 아래와 같습니다.



401297번지 이후로는 다음에



'컴퓨터과학 > 리버싱' 카테고리의 다른 글

[피카츄배구 리버싱] 7  (0) 2018.03.11
[피카츄배구 리버싱] 6  (0) 2018.03.11
[피카츄배구 리버싱] 5  (0) 2018.03.11
[피카츄배구 리버싱] 4  (0) 2018.03.10
[피카츄배구 리버싱] 3  (0) 2018.03.10
[피카츄배구 리버싱] 2  (0) 2018.03.10
  Comments