안녕하세요. EroGame 이며 前피시 입니다.
강좌를 어떻게 올릴까하고 고민하고 고민한 끝에 결국에는 이리저리 망설이지 말고 생각나는대로 올리기로 했습니다.
이 내용은 어디까지나 제가 찾는 방법을 기준으로 작성하기 때문에
다른 분과는 약간(?) 다를 수도 같을 수도 있습니다.
이점을 유의해주시고 읽어주세요.
앞으로 쓸 강좌는
영상으로 나올때도 있을것이고
글로만 작성할때도 있을지도 모르고
이미지와 글로 작성할 수도 있습니다.
전부 영상으로 하기에는 너무 몸이 버티질 못하기 때문에 양해를 구합니다. ^-^
!주의!
피시는 코드를 파는데 무조건 중시하는 것이 있습니다.
첫째. 코드로 내놓는건 띄어쓰기를 제거하지 않아야 하며, 글잘림이 없어야 한다.
둘째. 디나이워드의 무시설정도(PASS)를 사용하거나 Cmd필터를 사용하는 등 원문이 첫째에 반하는 형태로 나오거나 저런 필터를 사용하지 않고서는 게임이 튕기는 코드는 버려야 한다.
셋째. 모든글을 최대한 번역하는 코드를 내놓고 추후에 다른 미번역 글이 발견되면 코드를 업데이트 한다.
먼저 저도 인간이기 때문에 코드 찾기를 귀찮아 합니다.
그래서 다소 요령도 피우고 야메도 쓰고 하지요.
모르는 게임을 접했다?
그러면 처음엔 이렇게 합니다.
1. 게임을 실행합니다.
일반적인 실행으로도 실행되어도 가급적 특별하지 않는 이상 어플로 실행.
어플, 노어플로 안될경우 유니코드 변경 후 실행
(NTLEA는 유니코드 변경 실행가능 유무 판단으로만 사용하되, 절대 아랄을 사용하기 위한 용도로 쓰지 않는다)
2. 아랄트랜스를 실행하여 게임을 후킹합니다.
게임을 선택하여 후킹합니다.
프로세스 목록에 보이는 실행한 게임이 있을겁니다.
선택하여 HOOK 버튼을 눌러주세요.
3. 나중을 위해 ATCode(기본셋팅), 필터(그림과 같이), 번역플러그인을 선택해놓고 바로가기 버튼을 눌러 바탕화면에 바로가기를 만듭니다.
코드를 파면서 게임이 튕기면 다시 1~3까지 다시 해야하는 번거로움을 줄이기 위해 하는 작업입니다.
나중에 바로가기만 열면 바로 셋팅이 다시 되니까요.
4. 아랄자체디버거를 사용하기 위해 셋팅을 다시 아래와 같이 바꿔줍니다.
필터도 2개 지웠습니다.
5. 후킹플러그인에서 DebuggingATCode를 선택합니다.
그러면 창이 하나 뜨게 되는데요.
이걸 타이틀에서 띄우는것과 게임진행중에 띄우는것은 게임이 타이틀에서 먹통이 되냐 안되냐로 판단하여
게임에 맞게 적절히 대응해주세요.
6. 게임을 진행하여 한줄이 나오도록 해봅니다.
보시게 되면 Score에 레지와 스택이 보이고 ()로 Hit 수가 써져있는데요.
이 Hit 는 글자가 출력된 최대 길이 누적량을 보여줍니다.
이미지로 보면 88Hit 를 기록하고 있네요?
7. 만약 Hit 수가 출력된 글과 정상적으로 일치하는 게임의 경우에는 해당 주소와 스택을 메모장에라도 옮겨적으세요.
443FA0 [ESP+0x18], 446240 [ESP+0xc]
이때 나온 둘 중 하나라도 되길 빌어보는겁니다.
덤프 텍스트에서도 무난하게 뜨는군요.
Kernelbase.dll, GDI32.dll, ntdll.dll, USER32.dll 과 같은 일부 외부 dll은 윈도우 dll 입니다.
저부분은 가볍게 무시해주세요.
(설령 저기서 글이 나온다 할지언정 말이지요)
[]는 포인터 형식을 의미합니다.
(포인터의 개념은 추후 영상으로 간단한 소개를 진행하겠습니다.)
간단히 제 식으로 비유하면 바로가기 파일? 같은 존재로 이해하시면 됩니다.
소녀의 팬티라고 생각하셔도 됩니다.(도주)
덤텍(=덤프텍스트 필터, DumpText )에서 보아도 따로 필터를 사용할 필요는 없어보이네요.
그대로 ATCode에 적용해서 제대로 나오나 확인합니다.
(아까 만들어둔 바로가기로 다시 실행하여 코드를 적어넣습니다.)
안전도의 순은 포인터 바꿔치기가 우선순위며
만약 해당 대사가 들어있는 메모리에 대사말고 다른 값을 사용하여 별개의 연산도 겸해서 하는 경우에는 튕기게 됩니다.
그래도 포인터는 여러번 복사해서 원 주소를 백업해두기 때문에 메모리 덮어쓰기보다는 안전하다고 보는게 좋습니다.
EAX,EDX,ECX 와 같은 레지의 직접들고 올경우에는 포인터 바꿔치기를 사용할 수 없습니다.
이럴때는 메모리 덮어쓰기를 사용해주세요.
물론 예외로 [EAX] 처럼 포인터를 넣어서 들고오는 경우에는 포인터 바꿔치기로 사용할 수 있습니다.
(포인터의 개념을 이해하고 계시면 위 내용은 쓸데없는 설명입니다.)
메모리 덮어쓰기의 경우는 원문 대사위에 한글을 덮어버려서 원문을 날려버리는 형식입니다.
따라서 대사가 길면 그 원문 이상의 장소에 한글을 덮어버리게 되는데
게임내에서 이 넘어간 장소에 별다른 작업이 없다면 튕기지는 않습니다.
반대로 넘어간 장소에 종결문자라든가 다음 대사가 들어있다던가 명령어가 있거나 한다면
그 글이 뭉게지게 되므로 당연히 튕기게 되지요.
(튕긴다면 이런 이유들 때문이구나 하고 이해하시면 되겠습니다.)
그래도 메모리 덮어쓰기로 대사가 나오는지는 확인해봐야 하니 버퍼크기 무시를 활성화하지 않은 상태로 테스트 후
버퍼크기 무시를 활성화 시켜서 튕기는지? 혹은 글이 안잘리는지? 를 확인해주세요.
무사하다면 메모리 덮어쓰기로 코드를 내도 상관 없다는겁니다.
* 위 포인터와 메모리 형식으로 튕기는 대처 방안은 2가지로 분리되다가 합쳐지는데
a - 메모리 덮어쓰기의 튕기는 경우 디버거로 열어서 포인터화 시킬 수 있는 방법을 찾습니다.
포인터로 했을때도 튕길때는 b의 대처 방법을 이행합니다.
(추후에 설명하도록 하겠습니다.)
b - 포인터 바꿔치기의 튕기는 경우는 메모리 덮어쓰기 방식으로 해봅니다.
그래도 튕길경우에는 디버거로 대사만 처리하는 단계까지 계속 들어가서 다시 포인터를 납치합니다.
(추후에 설명하도록 하겠습니다.)
c - 외전격으로 튕기는 대처 방법은 해당 지점에 대사가 다른 곳으로 2차적인 복사를 하는지 확인하고
할 경우 그 2차적인 메모리 부분의 포인터나 메모리 덮어쓰기를 할 장소를 알아내면 됩니다.
(추후에 설명하도록 하겠습니다.)
8. 위 1~7번까지 한것을 영상으로 해보았습니다.
...........내렸습니다.하나 느낀게 있다면 넷북으로 영상찍지 말자...라는거
(저번 영상에 비해 이번건 엄청 버벅거리네요.)
일단 지금 설명한 방식은 아랄자체디버거로 걸려서 "어라? 단순하네?" 싶은 게임들이 코드가 나오는 방법입니다.
약 에로게가 100개 있다면 대략 30개 정도는 위 방법으로도 코드를 찾을 수 있습니다.
이것을 배우신 여러분은 약 30%의 에로게 코드를 팔 능력을 얻었습니다!
어렵지는 않으셨는지요?
다음 강좌는 아랄 자체디버거에서 1Hit. 즉 한글자씩 넘어오는 게임을 디버거로 열어서 찾아보겠습니다.
========================================================================================================
본 강좌는 무단으로 다른 곳에 기재하는걸 금합니다.
아니, 허락 맞고도 금합니다. 데헷~♥