- Joined
- May 26, 2007
- Messages
- 5,545
- Reaction score
- 1,315
[SIZE=+2]Release - ExtractStrings
Aid to Translation[/SIZE]
[SIZE=+1]Contents[/SIZE]Aid to Translation[/SIZE]
Introduction
Usage
Downloads
Credits
[SIZE=+1]Introduction[/SIZE]Usage
Downloads
Credits
ExtractStrings.exe was initially developed to aid in the construction of .lng files for use in my International.dll libraries. It's output was almost a perfect match for a .lng file, but it does output information which is not string data... so the files still need a little cleaning up.
Osirus came to me asking about translating a newer client in a traditional way (a task he has done manually many times before) and I suggested he use ExtractStrings to tell him where particular Korean strings are in the executable. Between us, we made some changes that make traditional translation much more simple, and since then, I've cleaned the code up a little to make ExtractStrings easier to use.
There are lots of programs available which claim to "extract string information" from executables, and you can Google them. The trouble is, just about all of them look for Western European ANSI strings and Unicode UTF16LE (Wide Strings), and usually ignore anything in Asian languages as just being "code".
ExtractStrings doesn't, which means it picks up lots of "code" that isn't a string at all, but won't miss any text from a basic Korean, Chinese or Japanese game.exe either.
[SIZE=+1]Usage[/SIZE]
First of all, you should note that this program dose not have a GUI and double clicking it will do nothing interesting at all. You have to use it from the command line.
If you just run it, you will see something like this in your console:-
You must be registered to see links
is incredibly cleaver and can give you everything needed for ExtractStrings.The first thing you will need is a dump of a clean section of the file. All the text in PT is stored in the .Data and .RData sections... so we may as well dump both of those out to separate files now.
Open your game.exe in CFF Explorer, and immediately select Section Headers from the TreeView.
Don't close CFF Explorer yet! You also need to make a note of the Virtual address of those sections.
Now enter the following commands:-
Code:
ExtractStrings game.rdt 5C7000 > Game.txt
ExtractStrings game.dat 5FC000 >> Game.txt
Do note that the first command uses > (which will overwrite any existing file) and the second uses >> (which will append output to any existing file). This isn't anything I wrote, this is simply how the Command Console in Window NT handles output redirection. If you leave out everything from the first chevron (>) to the end of the line, you will get all the strings displayed on screen, instead of in a file.
This can be useful if you are a command line freak like me, and want to pass the output through SED, GREP or GSAR to perform some of the more basic filtering for you, or look for a specific line that you know is in there somewhere. But you needn't worry about it if you are not. I'm sure your preferred text editor has a "Search" or "Find" option.
Having done that, you'll have a file called game.txt which is pretty big, and starts off something like this:-
Code:
005C6FFFh = "6·"
005C7004h = "ㅀ"
005C7008h = "린"
005C700Ch = "뼭"
005C7014h = "V±"
005C701Ch = ""
005C701Fh = ""
005C7024h = ":°"
005C7028h = "°"
005C702Ch = "r°"
005C7030h = "f°"
005C7034h = "L°"
005C7038h = "沚"
005C703Ch = "$°"
005C7040h = "°"
005C7044h = "°"
005C7048h = "°"
005C704Ch = "啞"
However, further into the file you can see lines like these:-
Code:
005C8A4Ch = "> (%s) 아이템을 획득했습니다"
005C8A6Ch = " 크리스탈을 사용할수 없습니다 "
005C8A90h = " 소환은 한 번씩만 할수 있습니다 "
005C8AB8h = " 소환할수 있는 갯수를 초과했습니다 "
005C8AE0h = " 축하합니다. 상금 %d원을 획득했습니다 "
005C8B08h = "아이템 ( %s ) 사용기간이 종료 되어 제거되었습니다"
005C8B3Ch = " 아이템 ( %s ) 을 받았습니다 "
005C8B60h = "%s : 너무 말을 많이 했더니 혀가 굳어 버렸다! 우와 -_-;"
005C8B98h = "야호"
005C8BA0h = "무계를 초과했습니다 "
005C8BBCh = "귓말이 거부되었습니다"
005C8BD4h = "전투중에는 종료할수 없습니다"
005C8BF4h = "사용중인 창을 닫고 종료 하십시오"
005C8C18h = "게임을 종료 합니다"
005C8C2Ch = "서버와의 연결이 끊어 졌습니다 (4)"
005C8C50h = "서버와의 연결이 끊어 졌습니다 (3)"
005C8C74h = "서버와의 연결이 끊어 졌습니다 (2)"
005C8C98h = "서버와의 연결이 끊어 졌습니다 (1)"
005C8CBCh = "서버와의 연결이 끊어 졌습니다"
005C8CDCh = "%s님은 거리가 멀어서 거래 신청을 할수 없습니다"
Let's open the game.exe in Olly and look for the line "%s : 너무 말을 많이 했더니 혀가 굳어 버렸다! 우와 -_-;" Which is the "chatterbox" or "shut up" line "I talk so much my tongue froze up. Wow! -_-;".
According to the file we got from ExtractStrings, we should find that at 005C8B60. If you click in the Dump pane in Olly, press <Ctrl> + G or Right click -> Go to... -> Expression... then type (or paste) that address, Olly should take you right to that string.
There it is!
RapidShare AG, Cham, Switzerland - DEAD.
You must be registered to see links
- DEAD.
You must be registered to see links
- DEAD (copyright infringement my arse!)
You must be registered to see links
- DEADzSHARE - ExtractStrings.zip - DEAD (and I still hate zShare)
Download ExtractStrings.zip for free on uploading.com - DEAD
You must be registered to see links
Cloud storage... priceless. :
You must be registered to see links
(they seem to do better than RapidShare alone) - DEADView attachment ExtractStrings.zip RaGEZONE attachment. Also priceless.
[SIZE=+1]Credits[/SIZE]
I must thank Osirus for pointing out how much easier this makes raw translation, and giving me ideas as to how to make the output more useful for this purpose.
Attachments
You must be registered for see attachments list
Last edited: