[피카츄배구 리버싱] 4

그림을 어디선가 불러올텐데, 정직하게 처음부터 찾아나서려고 하니 도저히 찾아지지가 않는 상황이었습니다. 과연 어떤식으로 이 난관을 헤쳐나갈 수 있을까요? 답은 바로 Intermodular call에 있었습니다. 그림을 불러오려면 어찌됐든 리소스상에 있는 그림을 call하는 Windows API가 쓰일 것이기 때문에 Intermodular call로 어떤 함수들을 부르는지 확인하면 도움이 될 것이라고 판단했습니다.



Windows API를 하나도 모르지만 LoadResource, SelectObject라니, 뭔가 확인해보고싶게 생겼습니다. 모조리 breakpoint를 걸고 진행해봅니다.



그러다보면 운 좋게도 0x408D24에서 StrecthBit이라는 함수를 실행한 후 화면의 그림이 바뀌는 것을 확인할 수 있습니다. 감동입니다. 그런데 함수 이름좀 잘 지어주지.. StretchBit이 뭐야..ㅠㅠ 정확한 원리는 http://donghwada.tistory.com/entry/WINAPI-%EB%B9%84%ED%8A%B8%EB%A7%B5-%EC%B6%9C%EB%A0%A5-%EB%A9%94%EB%AA%A8%EB%A6%AC-DC 에서 확인할 수 있습니다.


이제 다시 실행흐름을 파악해봅시다. 우선 0x406AC8 번지에서 sub_401460을 call합니다. 그 후 sub_401460 -> sub_4013A0 -> sub_404ED0 -> sub_408C90(이미지 로딩) 으로 따라들어갑니다.


그런데 맨 처음에 저는 알파값이 다른 이미지 여러 장이 리소스에 저장되어있고 그걸 차례로 불러오는 줄 알았는데 코드 상에서 불러오는 비트맵의 주소도 늘 동일하고, 리소스해커로 확인한 리소스에도 그림은 단 1장밖에 없었습니다.



그렇다는 의미는 알파값을 다르게 해서 불러오는 루틴이 따로 있다는건데 도저히 찾아지지가 않습니다. 다음 기회에..
그럼 일단 로고를 아래의 것으로 대체해서 넣어보면




이렇게 티모를 만날 수 있습니다만 살짝 기괴하네요. 그러면 우리는 0x401471번지를 건들여 이미지 로딩 속도를 바꿀 수도 있고, 직접적으로 이미지를 변경할 수도 있습니다.
그 다음에는 



이 난잡한 창을 볼 수 있고, 마찬가지로 이미지파일 수정을 통해 변경할 수 있긴한데 로딩 이미지를 바꾸는 것과 완전히 동일한 내용으로 보여 넘어가겠습니다. 다음 게시글에서는 메뉴의 설정값들을 변경하면 어떤 식으로 동작하는지를 알아보겠습니다.



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

[피카츄배구 리버싱] 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
[피카츄배구 리버싱] 1  (3) 2018.03.10
  Comments
댓글 쓰기