PC 게임 한글화를 위한 공부 방법 여쭙니다.

HDNua의 이미지

안녕하세요. 컴퓨터공학과 재학중인 대학생이고 군 복무중인 군인이기도 합니다.
PC게임의 한글화에 관해서 나름 정보를 찾아보려고는 했었는데, 시원하게 답이 나오지 않아
제목처럼 PC 게임 한글화를 위한 공부 방법을 여쭤보려고 글을 올렸습니다.

http://kldp.org/node/139972

위는 이전에 KLDP에서 한글화 방법에 관해 질문한 글입니다.

http://cafe.naver.com/hansicgu/2202

위는 땅땅치킨님이 쓰셨던 PC 게임 한글화에 대한 개략적 가이드라인입니다.

저는 컴파일러를 개발하는 데 관심이 있어서 이에 관해 정보를 찾으며 어셈블리를 어느 정도 익힌 상태입니다.
프로그래밍은 아주 열심히 해서, 단서만 있으면 모르는 것도 바로 찾아낼 수 있다고 자신합니다.
Qt로 이미지 뷰어, Gtk#로 파일 이름 변경 프로그램, Cocos2D로 iPhone 게임,
Javascript로 웹 페이지 개발 도구 등을 개발해봤습니다.

지금 땅땅치킨님의 글을 보면, 제가 이제 공부해야 하는 부분이 윈도우 실행 파일 구조 분석 부분 같은데,
말씀드렸듯 제가 지금 군 복무 중이라 인터넷에서 이를 필요할 때마다 찾기가 번거롭습니다. 돈도 많이 들구요..
이전에 Reverse Engineering Bible을 보니 Win32 API에 대해서도 먼저 알아야 되는 것도 같고,
일단 한글화가 해킹이니 해킹 방법을 먼저 공부해야 할 것 같기도 하고..

의욕은 넘치는데 공부 방향이 잡히지 않아서 진척이 없는 것 같은 느낌이네요.
될 수 있으면 컴퓨터 작업은 휴가 때 하고 부대 내에서는 책으로만 공부하려고 하는데,
어떤 책을 보아야 PC 게임 한글화에 관한 정보를 얻을 수 있을지 정보를 얻고 싶습니다.

사실 이 글은 네이버 카페 한식구에 먼저 올렸다가, 고민 후에 KLDP에도 복사해서 붙여넣은 것입니다.
직접 찾기 귀찮아서 이런 글 올린다고 지적하시면... 뭐라 드릴 말씀이 없네요.

이런 이유로 KLDP 여러분들께 도움을 청합니다.
읽어주셔서 감사합니다. 즐거운 한가위 되세요.

mirheekl의 이미지

일단 예전 글로 미루어보건대, 글쓰신 분은 "멍석이 깔려있는 경우", 즉 모딩이나 단순 데이터파일 수정, 오픈소스 프로젝트, 기타 공식 인터페이스를 통해 이루어지는 한국어화에는 거의 관심이 없으신 듯 합니다. 즉, 어떤 방식으로든 이미 다국어화에 대한 고려가 되어 있는 경우에는 관심이 없으실 걸로 보입니다. 주로 현지화 자체를 아예 고려하지 않은 케이스를 강제로(?) 한국어화하는 데에 관심이 있으신 것 같아요. 수출을 전혀 염두에 두지 않고 만든 일부 일본산 게임들, 그리고 그냥 영문판을 보급하면 된다고 생각하는 일부 영문 게임들이 여기에 해당하겠죠.

그렇다면, 한국어화는 크게 두 단계로 이루어질것 같군요. 기존 실행파일을 언패킹하고 암호화 및 프로텍션을 무력화하는 게 전반부, 그리고 그렇게 얻어낸 깨끗한(?) 바이너리를 가지고 실제 한국어화를 구현하는게 후반부가 될 듯 한데, 두 가지의 접근방법은 전혀 다르겠지요. 그리고 당연히 전자가 후자보다 더 어렵고 말이죠.

그런데, 전자를 책으로 해결하는 건 무리일 수밖에 없는 것이, 책에서 이미 다 가르쳐줄 정도의 기술이라면 현역 프로텍션으로서의 의미가 사라진 뒤일 확률이 높기 때문입니다. (그래도 방법론적인 측면으로 봐선 책이 도움은 되겠지요.) 결국 한글화 수요가 가장 많을 최근의 게임을 다루려면 다른 크래커와의 교류가 필수가 될 것이니 군복무중 독학꺼리로는 글쎄요.

후자라면 시중에 나와있는 수많은 리버스 엔지니어링 교재를 쓸 수 있을 것입니다. 그걸로, 일단 프로텍션이 아예 없거나 기존의 기술로 쉽게 해제할 수 있는 고전게임을 타겟으로 잡아서 시도해보시면 좋을 것 같네요. (이미 작업이 끝난 것을 가지고 원본과 비교해보는 것도 좋고요.) 쉬운 것부터 차근차근 해나가시면 언젠간 원하시는 수준에 도달할 수 있을 것입니다. 다만 미국산 게임과 일본산 게임의 접근방법은 전혀 다르기 때문에 공부하실 때 이 부분도 염두에 두시는 게 좋을 듯 합니다.

노파심에서 말씀드리지만 제가 언급한 것은 모두 개인적인 공부에 대한 얘기고, 결과물을 대중에 오픈한다는 것은 전혀 다른 의미가 되니 주의하시기 바랍니다.

--

HDNua의 이미지

지금까지 질문하고 찾아본 것들을 합하면.. 어떻게든 혼자는 힘들다는 거군요.
매번 좋은 답변 감사합니다. 일단 전역을 하고 팀을 알아보던지 해야겠네요.

저는 이렇게 생각했습니다.

mirheekl의 이미지

말씀드린 대로 모듈 암호화나 메모리 프로텍션과 관련 없는 부분이라면 책으로도 얼마든지 공부할 수 있을 걸로 봅니다.

윈도용 바이너리에 대한 리버스 엔지니어링이나 크래킹 관련 교재는 시중에 많이 보이네요.

단지 그걸 가지고 현역 게임에 대한 한글화를 바로 제공하기가 어려울 뿐인데 그건 제대 후에 계속 노력하시면 되겠죠.

--

HDNua의 이미지

생각해보니 리버싱이라는 단어는 많이 검색해봤었는데, 어째선지 해킹이나 크래킹으로는 한 번도 검색해보지 않았었네요.
1. 방금 검색해보니 다음 네 가지 책이 나왔습니다.
- 루트킷 : 윈도우 커널 조작의 미학
- 해킹 : 공격의 예술
- 문제 풀이로 배우는 시스템 해킹 테크닉
- 리버싱 : 리버스 엔지니어링 비밀을 파헤치다
게임 한글화에서 Windows32 API를 사용한다는 얘기를 듣고 '윈도우 API 프로그래밍 - 강경우(http://www.aladin.co.kr/shop/wproduct.aspx?ISBN=8998756935)'를 살 생각인데,
일단 이 중에 가장 괜찮아보이는 책을 같이 사서 리버싱을 기초부터 공부하려고 합니다. (개인적으론 리버싱: 리버스 엔지니어링 비밀을 파헤치다'가 입문서로 가장 괜찮아보이네요.)
혹 읽어보신 책이 있다면 그게 괜찮은 책인지 의견이 궁금합니다. (음.. 너무 무리한 부탁인가요?)
2. 리버싱, 해킹, 크래킹 관해서 입문하실 때 보셨던 책이나 추천해주실 책이 있다면 소개해주시면 감사하겠습니다.

혼자서는 안 될 거라 생각하고 일단 미룰 생각이었는데, 생각을 바꾸게 되었습니다. 다시 한 번 답변 감사드립니다.
당장 다음 휴가때부터라도 예제를 얻어서 시작해봐야겠습니다.

저는 이렇게 생각했습니다.

mirheekl의 이미지

작업용 레퍼런스도 가능할 진 모르겠지만 그보다는 입문서로 보이는데요. 그쪽 지식이 없으시다면 제일 먼저 공부하셔야 되는 게 맞는 것 같네요. (저 책을 추천드리는 건 아닙니다. 제가 읽어본 적이 없으니...) 다만 그 과정에서 구현 결과물보다는 윈도 API호출과 메시지 처리가 어떤 식으로 되는지 집중하시는게 도움이 될 것입니다. 저 책에 그 부분이 얼마나 자세하게 나와있을지는 알 수가 없습니다. 기본 프로그래밍 지식이 있으신 만큼, 내부 구조를 좀 더 다룬 복잡한(?)책을 함께 보셔도 좋을 것 같네요. 책 이름은 정확히 기억이 안나지만 (보통 xxx 인터널스, ooo 시크릿 뭐 이런 류의 이름을 가지고 있습니다) 윈도 구조와 메시지 처리에 관해 상세하게 나온 책들이 좀 있을 겁니다. 이런 건 프로그래밍 책이라기보단 윈도 자체를 분석한 책에 가깝죠. 이 때 조심하실 것이 내부구조를 다루는 척 하면서 평범한 팁이나 활용법만 훑고 넘어가는 책들도 있습니다. 목차만 봐선 구분하기가 어려우니 내용을 잘 살펴보셔야 합니다. 아무래도 다음 휴가 때 직접 여러 책들을 살펴보시는 게 좋을 것 같네요. 책 제목을 정확히 알려드릴 수 있으면 좋겠는데, 어차피 옛날 OS를 다룬 책들이고 제목 기억도 잘 안나서 힘들 듯 합니다.

리버싱의 경우도 직접 책을 보시고 결정하는 게 좋을 것 같습니다. 말씀하신 작업의 특성상, 네트워크 보다는 로컬에서, 그리고 리눅스보다는 윈도에서 주로 작업을 하게 될텐데, 리버싱이라고만 하면 광범위하기 때문에 원하시는 걸 정확히 다루지 않는 책도 많을 겁니다.

--

HDNua의 이미지

휴가 전에 좋은 답변을 정말 많이 얻어갑니다. 시간 내주셔서 감사합니다.

저는 이렇게 생각했습니다.

익명 사용자의 이미지

API 책은 김상형 님의 API 정복 이 가장 좋고, 어느 정도 개념을 익힌 뒤에는 구글과 MSDN 을 이용하는게 제일 빠릅니다.
그리고 말씀하신 리버싱 : 리버스 엔지니어링 비밀을 파헤치다 라는 책은 입문용이 아니며, 비교적 고급 내용을 담고 있습니다.

시스템 해킹 테크닉, 해킹 공격의 예술, 루트킷 이 책은 지금 하시려는 것과는 거의 관계가 없다고 봐도 무방한 책들입니다.
한글로 된 리버스 엔지니어링 관련 책들 중 난이도를 따져서 순서를 매기면 대략 아래와 같습니다.

1. Reverse Enginnering 역분석 구조와 원리 (하)
2. 리버스 엔지니어링 바이블 (중)
3. 리버싱 핵심 원리 (이건 사실 제목과 달리 역분석에 대한 책이라고 하기엔 미묘합니다)
3. 리버싱 : 리버스 엔지니어링 비밀을 파헤치다 (상)

물론 위의 책을 모두 읽어본 지라 말씀드리는 것입니다.
하지만 저나 주위의 사람들을 보면 책보다는 구글링과 문서 비중이 더 큽니다.

HDNua의 이미지

사실 API 책을 찾을 때 김상형님의 API 정복을 고르지 않은 건,
책이 너무 두꺼워보여서 입문서로 괜찮을까 의문이 들어서였습니다.
컴퓨터 프로그래밍이 힘든 환경이라 API에 대한 개념을 자세하게는 아니어도,
책을 읽고서도 어느 정도 API가 무엇인지 감각을 잡을 수 있는 책을 찾고 있어서 골랐습니다.

Reverse Engineering 역분석 구조와 원리, 리버스 엔지니어링 바이블은 이전에 구매했었지만
왼쪽은 뭔가 부족해보였고, 오른쪽은 너무 모르는 내용이 많아 PE 구조 분석 쯤에 포기했던 것 같네요.
(지금 다시 보면 다른 느낌일 것 같기는 합니다.)

일단 답변을 받고 '리버싱: 리버스 엔지니어링 비밀을 파헤치다'는 구매하지 않기로 결정했습니다.
API 정복이 입문서로 괜찮을지만 다시 한 번 여쭤보고 싶습니다.

다시 한 번 좋은 답변에 감사드립니다.

저는 이렇게 생각했습니다.

익명 사용자의 이미지

API 정복은 입문서로 분명 나쁘지 않습니다. 다만 단점이 있다면, 많은 내용을 레퍼런스 식으로 설명하기 때문에
사람에 따라서는 두껍다는 것이 오히려 공부 의욕을 저하하는 원인이 될 수 있습니다. 그 외에는 딱히 없습니다.

저 같은 경우는 대부분 일단 개념적인 것을 겉으로 훑고 나머지는 구글링으로 여러 사이트와 문서 들을
찾아가면서 공부하는 편이기 때문에 두꺼운 책을 그다지 좋아하지 않습니다만 필요할 때 보는 형식으로 사놓는 편입니다.
다만 안타까운 것은 제 경우 저 책은 사놓고도 거의 안봐서 나중에 들여다보니 이젠 볼 필요가 없어졌더군요.(구글링이 더 빠르기도 하고)

리버싱은 결국 경험이 중요합니다. 리버스 엔지니어링 바이블 등의 책은 대부분 패커/프로텍터 게열과 연관되어
안티 디버깅 등에 대한 내용이 많은 편이고 애초에 책의 목적도 그런 코어한 쪽의 분석이 대부분입니다.
원하시는 것처럼 단순 분석은 사실 그다지 효율도 없고, 상용 프로그램 분석 시에는 더미다가 대부분인데 이건
초보자가 책 한 두권 보고 분석할 만큼 만만한 프로텍터는 아닙니다.

결국 기초부터 리버싱을 쭉 많이 해보는 것이 가장 좋은 답입니다.
reversing.kr 이나 codeengn.com 에 있는 RCE 등으로 연습해보는 것도 좋습니다.

HDNua의 이미지

API는 맨 처음에 고른 책으로 간단하게만 익히고 나머지는 실전에서 익히는 게 나을 것 같네요.
좋은 답변 주셔서 다시 한 번 감사드립니다.

저는 이렇게 생각했습니다.

qkrwncks593의 이미지

일단 게임방식에 따라 다릅니다. 대규모 게임의 (대부분게임) 경우에는 보통 대화내용이나 이런것을 리소스에 담아둡니다.

이 경우에는 리버싱이 필요하지 않습니다. 대충 파일명이나 폴더명으로 추측후 수정하면 되니까요..

하지만 프로그램 내에 대화내용같은것들이 들어있는경우에는 필요합니다. 그런데 많이 필요한것도 아니에요...

프로그램내에 문자열검색후 수정하면 끝나는거에요. 단순히 한글화를 목표로 리버싱을 배우시는거면 별로 가치가 없다고 생각합니다...

HDNua의 이미지

참고하겠습니다.

저는 이렇게 생각했습니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.