Q. AGTH의 H코드와 아랄트랜스의 AT코드는 둘 다 텍스트 출력지점을 뜻하는 걸로 아는데 무엇이 다른가?
A. 둘 다 텍스트 출력지점임은 맞습니다. 하지만 프로그램의 성격이 미묘하게 다릅니다.
AGTH의 H코드는 대부분 한 개의 문자가 출력되는 지점만 잡으면 됩니다. 즉, 문자를 별도의 창에 출력하는 것이 주 목적이므로 문자가 하나하나 찍히는 부분을 후킹해서 모으면 하나의 문장이 보여지게 되는 형식입니다.
반면 아랄트랜스의 경우에는 문자로 출력되기 전에 전체 문장을 찾아야 합니다. 게임에 찍힌 문자들을 모아서 하나의 문장을 만들었다 한들, 이미 늦었죠. 게임은 이미 그 텍스트를 화면에 찍어버렸기 때문입니다. 따라서 H코드보다 찾기가 까다로운 것은 사실입니다. 이 문제는 디버거 플러그인을 점점 개선시키는 방향으로 해결할 것입니다.
Q. AT코드는 모든 게임에 존재하는가?
A. 현재 제공되고 있는 AT코드 디버깅 플러그인은 윈디버거, 올리디버거 같은 전문 디버거 툴에 비하면 코딱지(?) 같은 존재입니다. 다만 텍스트가 지나가는 함수를 찾는 기능에 특화되어 있을 뿐이죠. 따라서 AT코드 디버거가 잡아내지 못하는 함수나 문자열들도 있습니다. 이론상으론 90% 이상의 게임은 AT코드가 될만한 지점이 있긴 있습니다. 말이 AT코드이지;; 사실 게임 프로그래밍에 있어서 대사 출력함수는 10에 9게임은 존재하기 마련입니다. 물론 아랄트랜스가 불안정해서 팅기거나 하는 경우는 아랄트랜스가 개선해야 될 문제구요. ^^
Q. 강좌대로 했는데 번역이 안된다. 혹시 후킹지점을 잘못잡았는가?
A. 가장 이상적인 AT코드는 대략 다음과 같습니다.
- 대사를 한 번 넘기면 후킹지점도 단 한 번 걸린다.
- ESP로부터 가깝다. (ESP+0x20 이상이면 의심해보시길..)
- 게임 내부적으로 텍스트 복사가 이루어지기 전의 위치다.
Q. 후킹코드를 찾은거 같은데 첫글자가 외계어로 나온다. 왜 그런가?
A. 후킹코드에 거의 근접한 주소를 찾았으나 한 박자 느린 주소입니다. 그 첫 문자 조차도 출력되기 전의 주소를 찾아야 합니다.
Q. 후킹 코드는 꼭 함수 진입점이어야 하는가?
A. 어셈블 코드 중간도 상관없습니다. 후킹 복귀시 EAX~EDX, ESI, EDI, ESP, EBP, EFL 레지스터들을 그대로 복구시킵니다.
Q. 아랄트랜스로 후킹만하면 게임이 뻗어버린다. 원인이 무엇인가?
A. 크게 두 가지 경우를 생각할 수 있습니다.
- 첫번째 : 후킹 시도만 하면 게임에서 거부반응을 보이는 경우. 즉, 아랄트랜스에서 Hook버튼을 누르기만 해도 뻗어버리는 경우는 게임 자체적으로 조작방지 기능을 넣었거나, 컴퓨터에 깔린 바이러스 감시 프로그램에 의해 종료되는 경우가 있습니다. 이러한 경우는 저도 속수무책입니다. ㅡ,.ㅡ;;
- 두번째 : 후킹 플러그인으로 Cached, NonCached를 적용시키거나, AT코드를 적용시켜 번역을 시도할 때 게임이 뻗어버리는 경우. 이런 경우는 후킹 주소가 잘못된 경우입니다. 텍스트가 아닌 중요한 메모리임에도 불구하고, 텍스트로 인식, 이를 다른 데이터로 덮어버릴 때 발생하는 문제입니다. DebuggingATCode 플러그인을 적용시켜 돌려보시면 알겁니다. 이 플러그인은 메모리에 쓰기작업은 일체 하지 않고 오로지 정보를 보여주기만 하므로 뻗지 않을 겁니다.
Q. 아랄트랜스가 버전업하면 AT코드 형식도 바뀌는가?
A. 업그레이드 됨에 따라 새로운 옵션이 추가되기는 하겠지만, 현재의 옵션체계 그대로 하위 호환이 되도록 할겁니다. 따라서 형식 자체가 바뀐다거나, 예전 AT코드가 쓸모없게 되는 일은 절대 없습니다.
게임이 뻗어 버리는 증상이 나오는 게임은 보류중..
AT 코드는 쭉가겠죠..
후아암 저녁인뎅 않주무시는 관리자님에게 박수.. (?)