U E D R , A S I H C RSS

��호/n Protect Reverse Engineering

(개��으로 � ZeroWiki는 http://www.dasomnetwork.com/~leedw/ 개� 위키� �곳보다 정보가 없다. 정� 아쉽다.)
좋� ���네요. ZeroWiki란 제로페�지 위키를 �하는 것�겠죠? 제로페�지 위키는 정보가 많� 곳� �어야 합니다. 그리고 모아놓� 정보를 가다듬는 작업� 따�야 정�로 효과가 있� 것입니다. 위키�서는 �를 정�관리� 비유하죠. 그리고 아�까지는 사람� �으로 ��� 페�지를 �아다니며 가꾸어주어야 합니다.
제로페�지 위키� 글� 많�� �료는 거� 없는 �유는 가다듬는 작업� 거� 안 �어나서�고 봅니다. 예를 들면 중복�는 내용� 담� 페�지, 관련� 내용��� 서로 다른 �름과 분류 아래 저장� 페�지, �미를 알 수 없는 �름� 가진 페�지, 너무 옛날 �료�서 �제는 �미없는 내용� 담고 있는 페�지 따위입니다. �신� 만든 페�지는 누구보다� 글쓴� �신� 잘 가다듬� 수 있� 것입니다. 때문� �신� 만든 페�지부터 가다듬는 것� 좋� 정보를 많� 찾� 수 있는 위키를 만드는 지름길��고 ��합니다. � 좋� 방법� 있�까요? -- Leonardong
특정한 게임� Cracking 하려고 했�니 nProtect와 비슷한 녀�� 디버그 �는 것� 방해하고 있었다.

게임 : 마비노기(Mabinogi)
Protector : guardcat ��는 nProtect와 같� �작� 수행하는 녀�

# 1�째
nexon� 경우 Protector를 외주� 주는 것� 아니� 게임� 만드는 팀 �체�서 설계하여 완성하는 것 같다.
확� 결과 nProtect와 guardcat� 비슷한 역할� 수행하는 것� 발견하였다.
(누군가가 nProtect가 함수를 hooking� 하고, 게임 �체 소스� �함 �는 것� 아니� 바�너리 형�으로 � 붙여진다고 하였는�,
마비노기가 아닌 다른 nProtect를 사용하는 게임� 확�한 결과 소스� �함�어 Exception Handling� 한다는 것� 발견하였다.)

guardcat� 확�하니 EnumServicesStatusA로 Process� 정보를 빼와서 OpenProcess로 열어 debug를 확� 하는 루틴� 발견하였다.
�것� ��� 패치하였지만, OpenProcess로 디버그 Process를 Hooking하는 함수는 gc_proch.dll� 있다는 것� 확�하였다.
=> guardcat.exe -> gc_proch.dll
�개를 고쳤지만 게임� 실행하니 �래대로 �아가 있다는 것� 확� 후, 업��트 파�� 있다는 것� 깨닫고, 파�� 변경 하였지만 시�는 성공 �지 않았다.
업��트 파��서 host� patch 주소를 내가 사용하는 eady.sarang.net/~dark/12/Mabi/로 고치고 여기� 파� 3개를 올리고 시� 하였�니
성공 하였다. 다행히 � guardcat� Packing, Enchypher로 �한 encoding� �지 않아서 ��� 패치가 쉬웠다.

# 2�째
=> gcupdater -> guardcat.exe -> gc_proch.dll
몇몇개� 함수만� 수정하고 guardcat.exe만 실행하였으나 gc_proch.dll� hooking 루틴때문� 막혀버렸다.
!!! gc_proch.dll� � 분�해야할 것�다.
gc_proch.dll 파�� 제거후 실행하였�니 gaurdcat.exe가 실행�고 debugger� 제대로 �작 하는 것� 알았다.
중요한것� update를 어떻게 막���다. 아마� gc_proch.dll� 없��� mabinogi.exe는 제대로 실행� 것�다.

=> mabinogi.exe -> client.exe -> gcupdater -> guardcat.exe -> gc_proch.dll
�렇게 �작하는 것� 확�하였다.
여기까지 분�하는� 2�씩�나 걸리다니...
1. mabinogi.exe(게임 �체� 업��트 체�를 한다. 그리고 createprocess로 client.exe를 실행하고 종료한다.)
2. client.exe(client가 실행� 때, gameguard와는 별개로 디버거가 있는지 확�하는 루틴� 있는 듯하다. � 파�� 순서는 �렇다. 1. ��터 파�� 무결성검사-확�해보지는 않았지만, �게 문제가 � 소지가 있다. 2. Debugger Process가 있는지 Check.-있다면 프로세스를 종료한다. 3. gcupdater.exe를 서버로부터 받아온다. 4. createprocess로 gcupdater를 실행한다. 5. �체 게임 루틴� 실행하고 gcupdater와 IPC를 사용할 thread를 만든다.)
3. gcupdater(실행시 항� 서버� 접�하여 파� 3개를 받아온다. guardcat.exe, INST.dat, gc_proch.dll� 순서대로 받아와 �체�으로 wsprintf를 �용하여 복사한다.-아마 디버거� API를 걸리기 싫었는지 모른다. createprocess로 guardcat.exe를 실행시킨다.)
4. guardcat.exe(실행시 EnumServicesStatusA로 Process List를 받아와 gc_proch.dll 파�과 IPC로 ��터를 보낸다. � 파�� 실행�는 Process를 체�하여 gc_proch.dll로 보내게 �다. �한 IPC를 통해 client.exe� Exception� 날리게 � 게임� 종료시키는 역할� 한다.)
5. gc_proch.dll(� 파�� debugger를 잡는 역할� 한다. 분�� � 필요하다.) -> � 파�� dll injection �한 막아낸다.

# 3�째
지금까지� �료들� 분�한 결과 key는 client.exe가 �고 있는 것으로 보�다.
client.exe가 실행� 때, ��터 무결성과 디버거를 잡아내는 루틴� 제거한다면, updater� 사�트를 내 사�트로 변경후 ��� 패치를 통한 내 protector를 올려 mabinogi를 무력화 시킬 수 있다.
아니면 client.exe가 gcupdater.exe를 받아내는 부분� 고치면 한결 수월 해 질 수� 있다. 단지, 무결성� 넘어가지 않는다면 힘들어진다.

그리고 zeropage� 정보 업로드 (부디 �건 google� 걸리면 안�는 문서다.)

-------------------------------------
mabinogi.exe -> client.exe로 넘어가는 부분

CreateProcess() 매개변수
|ModuleFileName = NULL
|CommandLine = ""C:\Program Files\Mabinogi\client.exe" code:1622 ver:237 logip:211.218.233.200 logport:11000 chatip:211.218.233.192 chatport:8000 setting:"file://data/features.xml=Regular, Korea""
|pProcessSecurity = NULL
|pThreadSecurity = NULL
|InheritHandles = FALSE
|CreationFlags = 0
|pEnvironment = NULL
|CurrentDir = "C:\Program Files\Mabinogi"
|pStartupInfo = 0012E4F0
|pProcessInfo = 0012E4E0

client.exe code:1622 ver:237 logip:211.218.233.200 logport:11000 chatip:211.218.233.192 chatport:8000 setting:"file://data/features.xml=Regular, Korea" 로 실행시키면 �다.
-------------------------------------

지금� reverse engineering� 하는 중�다.
Protector가 제거 �다면 바로 cracking� 들어가�. -_-^
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:30:32
Processing time 0.0080 sec