2015-07-05

공명전

공명전


윈도우즈95 버전
32비트.
씨디에 있는 *.avi 파일은 설치시에 복사되지 않음.
씨디에 있는 대부분의 M??.e2(??는 숫자) 파일은 설치시에 복사되지 않음.
씨디에 wing.dll을 포함한 기타 dll 파일이 존재하지 않음. 게임을 실행할 때, 추가적인 라이브러리가 필요치 않은 듯함. 즉, win32api만을 사용하는 것으로 보임.
음악 트랙 갯수 16개.

윈도우즈3.x 버전
16비트.
씨디에 wing.dll을 포함한, 여러 라이브러리가 들어 있는 것으로 보임.
음악 트랙 갯수 19개.


편의상 32비트로 만들어진 윈도우즈95 버전을 분석하는게 낫다고 생각함.


먼저... 윈도7 32비트에서 올바로 실행되지 않음. 256색 디스플레이... 어쩌구 오류가 발생함. 호환성 옵션을 사용하지 않은 상태로는 실행되지 않는 것으로 보임.
256색 아닌 모드에서, 호환성 옵션을 사용하지 않은 채로 실행되게 할 수 있는가?
winapi 콜을 중간에 가로채서 재구현하면 되지 않을까?
예를 들어, gdi32.dll의 GetDeviceCaps() 콜을 중간에 가로채려면 어떻게 해야 할까?

hooking 이라 불리는 기술을 사용하면 어떨까?

SetWindowsHookEx() CBT 방법을 사용하자.
http://www.reversecore.com/41
https://goo.gl/DHh35o

간단히 요약하면 다음과 같다.
wrapper 또는 proxy procedure가 있는 dll 을 만든다.
공명전 프로세스에 이 dll을 자동으로 injection 시켜주는 exe 를 만든다.

이렇게 만든 exe 파일 1개, dll 파일 1개는 다음과 같은 흐름을 가진다.
exe 파일은 공명전을 실행하기 전에 실행된다. exe 파일은 CBT message hook을 설치한다. cbt hook은 windows global hook으로 보인다. 이렇게 설치된 hook은 공명전이 실행될 때, 공명전 프로세스에만 dll 을 injection 시킨다. 이 dll에는 개발자가 만든 wrapper 콜들이 있다.

http://yokang90.tistory.com/60
https://goo.gl/b2drfi

gdi32.dll에 있는 GetDeviceCaps() 콜 만을 wrapping 하고 싶은 경우 어떻게 해야 할까? gdi32.dll의 모든 api를 구현한 proxy dll을 만들어서 injection 시켜야 할까? 내가 원하는 GetDeviceCaps()만 redirection 시킬 수 있을까?
다음을 참고하라.

https://goo.gl/2OXJbn
http://goo.gl/u05DXK
https://goo.gl/eiUwsa
https://github.com/cybereality/Perception/tree/master/DxHijack/DxHijack32

cbt hook을 설치하는 exe 파일이 맘에 들지 않는가?
cbt hook을 설치하는거 자체가 맘에 들지 않는가?
injection될 dll만 만들고 싶은가?

이런 경우 다음과 같이 하면 된다.
공명전 실행파일 ekd2w95.exe을 직접 수정하면 된다.
간단히 말하면, ekd2w95.exe가 injection될 dll을 로딩하도록 만든다.
다음을 참고하라.

http://www.reversecore.com/43
https://goo.gl/qlIoXS




No comments:

Post a Comment