오랜만에 글 하나 끄적여 봅니다.
예전부터 세계최고 게임회사 콦낪밊 아케이드 복돌 데이터가 풀리면 "돈나미 보안 좆*이네! ㅋㅋㅋ" 생각하면서 살던 시절이 있었습니다.
나중에 알게 되었지만 좆*인건 당연히 필자였습니다.
리버스 엔지니어링 지식은 전혀 없다보니 "일단 해보고 보자"라는 생각으로 개고생 많이 했습니다.
그래서 실패기입니다...
mon님이 쓰신 글을 보고 DRM 해제를 시도 했습니다.
https://mon.im/2017/12/konami-arcade-drm.html
아케이드 HDD, USB 인증 토큰은 야후 재팬 옥션 구매 대행 사이트 통해 구했습니다.
혹시나 구매하려는 분들이 계신다면 굳이 PCB 본체까지 사지 마시고 아케이드 HDD, USB 인증 토큰만 있어도 어느 정도 구동이 가능해서 복호화 과정에는 문제가 없다고 생각합니다.
그리고 실제 오락실 장비에서 몰래 가져와서 작업하시면 큰일 납니다.
제가 구매한 리스트에는 최신 게임부터 구형 게임까지 다양하게 구매해서 확인 해본 결과 최신 게임은 mon님 글과 많이 다르기도하고 64비트이므로 필자 실력으로는 IDA 분석에 어려움이 있어 리플렉비트로 작업 했습니다.
하드 받자마자 제일 처음 했던건 고스트 백업입니다.
SelfImage 사용하셔도 되고 어떻게든 하드는 미리 백업 하시는게 좋습니다.
기본 파티션의 수는 4개입니다.
C : OS
konami 폴더에는 게임 시작에 필요한 기본적인 배치 파일과 유틸리티 파일이 있습니다.
가상머신에서 작업하시는 분들은 "klock.exe" 파일에 이름을 바꿔주시고 부팅하시면 키보드가 동작하게 됩니다.
D : 게임 데이터
아마 복돌 데이터 받으면 간혹 0~d 폴더가 있는 경우가 있는데 암호화된 게임 데이터가 들어있는 파티션입니다.
나머지 파티션 및 자세한 사항은 아래 글을 보시면 됩니다.
https://www.zanneth.com/2015/05/03/konami-game-data.html
처음으로 해야하는 작업은 D:\MBR\contents\modules\ DLL 복호화 및 분석입니다.
테스트 환경 - VMware Windows 7 32bit
SafeNet 드라이버 설치 후 동글 2개 연결 해주고 게임 실행 해봤습니다.
D:\MBR\contents>modules\bootstrap.exe prop\bootstrap.xml env_drm prop\trustcerts.p7s prop\trustfiles.p7s
M:boot: bootstrap 1.5.1 build at 2012-07-10 14:57:21+9, r610
M:boot: Copyright (C) 2008-2012 KONAMI Digital Entertainment Co.,Ltd.
M:adb: attached successfully.
F:boot: The process must be shutdown due to the security consideration.
M:adb: bootstrap.exe has been exit.
당연하지만 보안 어쩌고 하면서 게임이 종료됩니다.
이제 어느 부분에서 문제가 됐는지 확인이 필요합니다.
IDA 디컴파일러로 확인 해보니 The process must be shutdown due to the security consideration. 메시지 위치까지 디버깅하면서 어느 부분이 문제인지 찾아 보기로 했습니다.
IDA 디버깅 해보니 이번에는 다른 오류가 발생합니다.
따라가보니 kbd.exe 프로세스 생성 후 kbd.exe 메시지에서 추정되는 bootstrap.exe 죽이는 코드가 동작하게 됩니다.
mon님 글에서 bootstrap.exe <- kbd.exe 디버거로 연결 된다고 합니다.
즉 IDA에서 이미 디버깅 상태이므로 문제가 생기니 kbd.exe 프로그램을 새로 만들어 넣으라 합니다.
#include <stdio.h>
#include <windows.h>
int main() {
printf("I:adb proxy launched\n");
while(1)
Sleep(10000);
return 0;
}
프로그램 빌드 후 넣고 다시 디버깅 해봤습니다.
하지만 새로운 문제가 발생하게 됩니다.
디버깅으로 천천히 따라가면 kbd.exe 변조 프로그램으로 감지 되어 "Unable to initialize security process." 메시지와 함께 프로그램이 강제 종료 됩니다.
mon님이 언급하신 디버깅 메시지 출력과 서명 우회가 필요한 순간이었습니다.
WriteProcessMemory 코드는 워낙 자료가 많아 C# 코드로 대충 짜서 적용 시키고 다시 디버깅 해봤습니다.
디버깅 메시지 출력하는 코드가 여러 곳이라 어느 부분이 맞는지 찾기 귀찮아 모두 90, 90, 90.... 값으로 덮어 씌우고 서명 부분은 74->75 값을 바꿔 해결 했습니다.
사실 이게 맞는건지 잘 모르지만 동작은 됐습니다. ㅎㅎ...
더 좋은 방법 있으면 댓글 조언 부탁드리겠습니다.
디버깅 메시지가 출력되고 서명 우회가 잘 동작하는지 자세하게 로그가 남게 되었습니다.
이대로 쭉 실행하면 오류가 발생하면서 프로그램이 멈추게 됩니다.
여기서 자세히 보면 kdn.dll, kbt.dll, kmp.dll, kma.dll, kdu.dll, libavs-win32.dll, libavs-win32-ea3.dll 파일이 로드 되었다고 메시지가 나옵니다.
어느 순간 DLL 일부가 복호화가 되었다는 이야기입니다.
다음 글에서는 메모리에 복호화된 DLL 추출 방법으로 다시 찾아오겠습니다.
그럼 20000~