ITHのマニュアル等の翻訳

 これは、ITHのマニュアル等の翻訳をしたものです。


interactive-text-hooker - UserManual.wiki

Introduction
はじめに

 Interactive Text Hooker (ITH) is a tool to help you extract text from Japanese games.
 Interactive Text Hooker (ITH)は、日本のゲームからテキストを抽出するためのツールです。

 It's the first building blocks of a auto-translating system.
 これは、自動翻訳システムの最初の基礎的要素です。

 The main purpose of ITH is to intercept text processed by a program and arrange text into clean form.
 ITHの主な目的は、プログラムによって処理されたテキストを捉えて、きれいなフォームにテキストを配置することです。

 Main idea of ITH comes from AGTH.
 ITHの主なアイデアは、AGTHから来ています。

 ITH works very like AGTH, and has some advantage over AGTH.
 ITHはAGTHと非常によく似た動作をしますが、かつAGTHよりもいくつかの利点があります。

System requirement
システム要件

 Intel Pentium4 or later processor.
 インテルのPentium4以降のプロセッサ。

 Recommend OS is Windows XP or later.
 OSはWindows XP以降であることをお勧めします。

 Your processor must support SSE2.
 あなたのプロセッサは、SSE2をサポートする必要があります。

 Or you may get an error message.
 そうでなければ、エラーメッセージが表示されることがあります。

Basic Usage
基本的な使用法

Setup and start ITH
セットアップと起動ITH

 ITH contains 3 files, namely ITH.exe, ITH.dll and ITH_engine.dll.
 ITHは3つのファイル、すなわちITH.exe、ITH.dllとITH_engine.dllが含まれています。

 These 3 files need to be put into same folder.
 これらの3つのファイルを同じフォルダに入れることが必要です。

 ITH requires administrative privilege to function properly.
 ITHが正常に機能するには管理者権限が必要です。

 If you are using Vista/7, you need to run ITH as administrator.
 あなたはWindowsVista / 7を使用している場合は、管理者としてITHを実行する必要があります。

UI layout
UIのレイアウト

 The first line contains 8 buttons.
 最初の行は、8つのボタンが含まれています。

Process : opens the Process Explorer .
プロセス : プロセスエクスプローラを開きます。

Thread : opens the Thread Editor .
スレッド : スレッドエディタが開きます。

Hook : opens the Hook Editor .
フック : フックエディタが開きます。

Profile : opens the Profile Manager .
プロフィール : プロファイルマネージャを開きます。

Option : opens the Option Dialog .
オプション : オプションダイアログを開きます。

Top : let ITH stay on top of other windows.
トップ :ITHを他のウィンドウの前面に配置します。

Clear : clears text of current thread.
クリア :現在のスレッドのテキストをクリアします。

Save : save current profile.
保存 :現在の設定を保存します。

 The second line contains a short drop-down list and a editable area.
 二行目は短いドロップダウンリストと編集可能なエリアが含まれています。

 The short drop-down list is called Process List.
 ショートドロップダウンリストには、 プロセスリストと呼ばれています。

 This list contains Process ID and name of all attached process.
 このリストは、接続されているすべてのプロセスのプロセスIDと名前が含まれています。

 The editable area is called Command Line .
 編集可能領域は、 コマンドラインと呼ばれています。

 You can type command here to let ITH perform actions.
 あなたは、ITHがアクションを実行できるようにここにコマンドを入力することができます。

 The third line is a long drop-down list called Thread List .
 三行目はスレッドの一覧と呼ばれる長いドロップダウンリストです。

 This list contains all available thread.
 このリストは、利用可能なすべてのスレッドが含まれています。

 You can select one thread to change content of the Text Area .
 あなたは、 テキスト領域の内容を変更する一つのスレッドを選択することができます。

 Under the Thread List is the Text Area .
 スレッド一覧の下のテキスト領域です 。

 This area contains text of one thread.
 この領域は、1スレッドのテキストが含まれています。

Attach ITH
ITHの接続

 The first step of text extraction is attaching ITH to a game.
 テキスト抽出の最初のステップは、ゲームにITHを接続することです。

 Open the Process Explorer .
 プロセスエクスプローラを開きます。

 On the left you can see a list of processes that ITH is able to attach.
 左側には、ITHが接続できるプロセスの一覧が表示されます。

 This list is sorted by creation time of the process.
 このリストは、プロセスの作成時刻でソートされます。

 So the latest created process is at the top of this list.
 だから、最新の作成されたプロセスは、このリストの一番上にあります。

 Select the process you want to attach ITH, then click Attach button.
 あなたがITHを添付したいプロセスを選択し、[Attach button]をクリックします。

 ITH will give a message if it attach successfully.
 それが正常に接続する場合は、ITHはメッセージを表示します。

 Click OK to close the dialog.
 ダイアログを閉じるには、[OK]をクリックします。

Select text thread
テキストスレッドを選択

 After ITH receive some text, it will put text into threads .
 ITHがいくつかのテキストを受信した後、ITHは、 スレッドにテキストを配置します。

 A thread contains certain piece of the text.
 スレッドは、テキストの特定の部分が含まれています。

 If you select one from the Thread List , the text in the main window is changed to that thread.
 あなたがスレッドリストからどれか1つスレッドを選択した場合は、メインウィンドウ内のテキストは、そのスレッドに変更されます。

 By default, there's only one named ConsoleOutput .
 デフォルトでは、ConsoleOutputという名前の一つだけがあります。

 Usually as the game display some text, more threads should be added to this list.
 通常、ゲームがいくつかのテキストを表示するように、複数のスレッドがこのリストに追加する必要があります。

 If you can't see any thread other than ConsoleOutput while the game is flashing text, you will need to insert custom hook.
 ゲームは、テキストを点滅しているときにConsoleOutput以外のスレッドを見ることができない場合は、カスタムフックを挿入する必要があります。

Copy to clipboard
クリップボードにコピー

 ITH can copy received text to clipboard, then other translation software monitors clipboard can read the text and translate it into other language.
 ITHは、受け取ったテキストをクリップボードにコピーすることができます。その時、 他の翻訳ソフトウェアモニタのクリップボードは、テキストを読み込んでそれを他の言語に翻訳することができます。

 You can simply select text in the Text Area by clicking and dragging.
 あなたは、単にクリックしてドラッグすることで、 テキスト領域内のテキストを選択することができます。

 Then the selected text is copied to clipboard.
 次に、選択したテキストがクリップボードにコピーされます。

 ITH is able to copy the last sentence to clipboard automatically.
 ITHは自動的にクリップボードに最後の文章をコピーすることができます。

 You need to enable this function in the Option Dialog by checking Auto copy to clipboard .
 あなたは、オプションダイアログでこの機能を有効にするには、Auto copy to clipboardをチェックする必要があります。

Save you selection
自分の設定を保存

 It's bothersome to attach ITH and select text every time you start the game.
 ITHに接続して、あなたがゲームを起動するたびにテキストを選択することは、煩わしいです。

 After you have attached ITH and selected some thread for the first time, click Save to save your selection.
 あなたがITHを取り付け、初めていくつかのスレッドを選択した後、あなたの選択を保存し、[保存]をクリックします。

 ITH will record necessary information in ITH.pro.
 ITHはITH.proに必要な情報を記録します。

 The next time you start this game, ITH will attach to the game and select thread automatically.
 あなたはこのゲームを次に起動したときは、ITHはゲームに接続し、自動的にスレッドを選択します。

Link threads together
スレッドのリンク

When your see text appears in different threads, you don't need to switch between them every time.
あなたのシースルーテキストが異なるスレッドに表示されたら、あなたはそれらの間のたびに切り替える必要はありません。

ITH provide a flexible mechanism to handle this case.
ITHは、このケースを処理するための柔軟なメカニズムを提供する。

Namely Thread Linking .
すなわちリンクを通します 。

You can find thread name in the Thread List .
あなたは、 スレッドリストにスレッド名を見つけることができます。

Every thread's name begins with its unique 4-digit identifier.
すべてのスレッドの名前は、そのユニークな4桁の識別子で始まる。

You use this number to tell ITH which threads to link.
あなたがリンクするスレッドITHに伝えるために、この番号を使用します。

Notice that thread number is hexadecimal.
スレッド番号が16進であることに注意してください。

So character AF stands for decimal number 10-15 (you won't see decimal number in Thread List ).
だから、文字AF 10進数10〜15(あなたがスレッドリストの進数は表示されません)の略です。

You will need 2 numbers to perform a link operation.
あなたは、リンク操作を実行するために、2つの数値が必要になります。

Namely From and To .
すなわちFromとに 。

There are 2 ways to link threads.
スレッドをリンクする2つの方法があります。

Additional hook
追加のフック

 If you couldn't get any useful text thread, you will have to insert additional hook to generate more threads.
 あなたは任意の有用なテキストスレッドを得ることができなかった場合は、より多くのスレッドを生成するために、追加のフックを挿入する必要があります。

 You need a small piece of text called H-code to inform ITH about the desired hook. H-code looks like this /HA-8:-14@402050.
 ITHに希望するフックについて通知するために、H-コードと呼ばれるテキストの小片が必要です。H-コードは例えば【/HA-8:-14@402050】という形になります。

 Type H-code in the Command Line and press enter, a new hook will be inserted.
 コマンドラインでのH-コードを入力し、Enterキーを押します、新しいフックが挿入されます。

As the game goes advance, you may see new text threads in Thread List .
ゲームが進歩を行くとして、あなたはスレッド一覧に新しいテキストスレッドが表示されることがあります。

This code is game and usually version dependent.
このコードは、ゲームと通常バージョンに依存します。

To create such a code, you should be familiar with programming and x86 assembly.
このようなコードを作成するには、プログラミングとx86アセンブリに精通している必要があります。

If you don't know what these things are, you must wait someone else to create one.
あなたはこれらの事が何であるかわからない場合、あなたは1を作成するために他の誰かを待つ必要があります。

You can request it at the Hongfire forum.
あなたはHongfireのフォーラムで、それを要求することができます。

interactive-text-hooker - DevGuide.wiki

Introduction
はじめに

This article describe the process of custom hook devloping and H-code format.
この記事では、カスタムフックdevlopingとH-コードフォーマットのプロセスについて説明します。

Reader should be familiar with x86 architecture, assembly and debuggers.
読者は、x86アーキテクチャ、アセンブリおよびデバッガに精通している必要があります。

What ITH does
ITHの動作

When perform attach operation, ITH will inject a DLL into target process.
操作を添付し実行すると、ITHは、ターゲットプロセスにDLLを注入します。

The DLL then insert hooks within the target process address space.
DLLは、ターゲット·プロセスのアドレス空間内のフックを挿入します。

Since x86 is Von Neumann architecture.
86以来フォンノイマンアーキテクチャです。

Program code resides in the same address space as program data.
プログラムコードは、プログラムデータと同じアドレス空間内に存在する。

So if coded carefully, read/write certain part of memory can change the program's execution flow.
慎重にコード化されたのであれば、/読み出されたプログラムの実行フローを変更することができ、メモリの特定の部分を記述します。

After a hook is inserted at a certain address, whenver the program execute the instruction at that address, it will first execute hook code.
フックプログラムは、そのアドレスの命令を実行whenver特定のアドレスに挿入された後、第1のフックコードを実行する。

ITH insert hook as follow:
ITH以下のようにフックを挿入します。

  1. Disassemble instruction length at the target address, make sure it's greater than 5.
    それが5より大きいだことを確認し、ターゲットアドレスでの命令長を分解します。

  2. Copy the instructions to somewhere else for later recovery.
    後で回復のためにどこか別の場所に命令をコピーします。

  3. Allocate memory and fill it with hook code.
    メモリを割り当て、フックコードでそれを埋める。

  4. 4. Modify instrution at the target process to CALL $(E8 $), where $ stands for the hook code entry address.
    $はフックコード·エントリ·アドレスを表します$(E8 $)を、呼び出すためにターゲットプロセスでinstrutionを変更します。

    The call instruction is 5 bytes long, if we copied more than 5 bytes, fill the rest with INT 3(CC).
    コー​​ル命令は、我々は5つ以上のバイトをコピーした場合、INT 3(CC)で残りを埋める、5バイト長である。

  5. Copy original instruction after hook code, do necessary modifications(any position relative instruction, jmp,call, etc) and insert a JMP $(E9) at the end.
    コピー元の命令がフックコードの後、必要な修正を行う(任意の位置の相対的な命令、JMP、など、呼び出し)、最後にJMP $(E9)を挿入。

    Here $ stands for the next instruction at the target address.
    ここで$ターゲットアドレスでの次の命令の略です。

    Assume 1-10 is address of 10 instruction.
    1-10が10命令のアドレスであると仮定します。

    If insert hook at 5 and hook code at 15-20.
    もし5での挿入フックとフックコード15-20で。

    The execution flow will be 1-4, jmp to 15, 15-20, 5, jmp back to 6, 6-10.
    実行フローは、バックのjmp 6に、6-10、1-4、15のjmp、15-20、5になる。

    This technique let you intercept program execution, and do anything you want at that point.
    このテクニックは、プログラムの実行を傍受し、その時点で必要なことをすることができます。

    ITH applies this technique to text processing related routes to intercept text.
    ITHは、テキストを傍受する、関連のルートを処理してテキストにこの手法を適用します。

    At a certain point ITH can
    ITHができる特定の時点で、
    • Read all register value
      すべてのレジスタ値を読む

    • Access most memory except the stack above current ESP.
      現在のESP上のスタックを除くアクセスほとんどのメモリ。

Information needed to build hook
フックを構築するために必要な情報

Encoding of information情報の符号化

AGTH H-code is an efficient method to encode this information.
AGTH Hコードは、この情報を符号化する効率的な方法である。

Although it's not complete in theory, it can handle most of common cases.
それは理論的には完全ではないですが、それは一般的なケースのほとんどを処理することができます。

When text processing is too complicated to represent by H-code, an extern hook is needed.
テキスト処理は、H-コードで表現するにはあまりにも複雑である場合には、externをフックが必要とされている。

That is, we provide our own code to gather information for ITH.
それは我々がITHのための情報を収集するために私たち自身のコードを提供する、である。

H-code format
H-コードフォーマット

 /H{A|B|W|S|Q}[N][data_offset[*data_indirect]]
[:split_param[*split_indirect]]@addr[:module[:name]]

/H: Prefix for H-code.
/ H:H-コードのプレフィックス。

A|B|W|S|Q: Data form.
A | B | W | S | Q:データの形式。

N: Disable(zero) first split parameter.
N:無効(ゼロ)第1分割パラメータ。

By default, the first split parameter is taken from [ESP] .
デフォルトでは、第1の分割パラメータは、[ESP]から取得されます。

data_offset: Specify where to find data.
data_offset:データを検索する場所を指定します。

If data_offset is positive, data is taken from [ESP+data_offset] .
data_offsetが正の場合、データは[ESP + data_offset]から取得されます。

If data_offset is negative, it refers to registers as follow.
data_offsetが負である場合、それは以下のようにレジスタを指す。

EAX EAX ECX ECX EDX EDX EBX EBX ESP ESP EBP EBP ESI ESI EDI EDI
-4 -4 -8 -8 -C -C -10 -10 -14 -14 -18 -18 -1C -1C -20 -20

data_indirect: If value of data_offset is a pointer, use this to take one level of indirection reference.
data_indirect:data_offsetの値がポインタである場合には、間接参照の1のレベルを取るためにこれを使用する。

Assume 32-bit pointer taken according to data_offset is off_data.
data_offsetに従って撮影し、32ビットのポインタがoff_dataであると仮定します。

So data is taken from [off_data+data_indirect] .
だから、データは[off_data + data_indirect]から取得されます。

split_param, split_indirect: Same to data_offset, but value is for split parameter.
split_param、split_indirect:data_offsetに同じですが、値は、分割パラメータのです。

addr: Absolute address or offset.
addr: 絶対アドレスまたはオフセット。

module: Target module name.Case insensitive.
モジュール:対象モジュール名。大文字小文字を区別しない。

name: Export function name.Case sensitive.
名前:エクスポート関数名。大文字と小文字を区別。

Some examples:
いくつかの例:

 /HA-4@41F400 -> SHIFT-JIS character in EAX, 8? at AH.
 /HA-4@41F400 -> EAXのSHIFT-JIS文字、AHの8? 。

 /HS4@CE1F0:koisora_main.exe -> If koisora_main is mapped at 400000, insert address is 400000+CE1F0=10E1F0. [ESP+4] contains a SHIFT-JIS string pointer.
 /HS4@CE1F0:koisora_main.exe - > koisora_mainが400000にマッピングされている場合は、アドレスは400000 + CE1F0 = 10E1F0で挿入する[ESP + 4] SHIFT-JIS文字列ポインタが含まれています。。

 /HWN-10*-8:-10*10@46AE28 -> Unicode character at [EBX-8] , split parameter at [EBX+10] , zero default split parameter.
 / HWN-10 * -8:-10 * 10 46AE28 @ - [EBX-8]で> Unicode文字、[EBX + 10]で分割パラメータ、ゼロデフォルトのスプリットパラメータ。

Valid address form有効なアドレス形式

 Most of current H-codes use absolute address(@address).
 現在のH-コードのほとんどは、絶対アドレス(@address)を使用します。

 It's resolved to the correspond address in target process virtual address space.
 これは、ターゲット·プロセスの仮想アドレス空間内の対応するアドレスに解決だ。

 Base-offset(@offset:base) is a more flexible form.
 ベース·オフセット(@offset:ベース)は、より柔軟な形である。

 You specify a module name as base address, and an offset to add to that base.
 あなたは、ベースアドレスとしてモジュール名を指定して、そのベースに追加するオフセット。

 This form is necessary if you are hooking in DLL or the main module is using Address Space Layout Randomization.
 あなたはDLLにフックされているか、メインモジュールは、アドレス空間レイアウトのランダム化を使用している場合は、このフォームが必要です。

 You can also specify a function name in the export table of target module to narrow down the address.
 また、アドレスを絞り込むために、ターゲットモジュールのエクスポートテーブルで関数名を指定することができます。

Valid data form
有効なデータ形式

SHIFT-JIS
SHIFT-JIS

 Most game engines use SHIFT-JIS encoding.
 ほとんどのゲームエンジンは、SHIFT-JISエンコードを使用しています。

 SHIFT-JIS characters begins from 8140. Usually 2 bytes long.
 SHIFT-JIS文字が長い8140.通常2バイトから始まります。

 If you see a 2 byte data 8??? or 9???, it's probably a SHIFT-JIS character.
 あなたが2バイトのデータ8???または、9???だったら、それはおそらくSHIFT-JIS文字です。

 If 8? is at high address, use A, otherwise use B to represent SHIFT-JIS character.
 もし8?が高いアドレスにある場合はAを使用し、そうでない場合はBを使用してSHIFT-JIS文字を表します。

Unicode
ユニコード

 There are also many engines using Unicode encoding.
 Unicodeエンコーディングを使用して、多くのエンジンもあります。

 Japanese character (Hiragana and Katakata)in Unicode starts from 3000. But Kanji characters spread in a great range.
 Unicodeで日本語の文字(ひらがなとKatakata)が大きな範囲に広がっ3000しかし、漢字から始まる。 Unicode characters are always 2 bytes long. Unicode文字は常に2バイト長である。

 Look for 2 bytes data with the form 30??
 フォーム30との2バイトのデータを探す? is good.良いです。

 Use W to represent Unicode character.
 Unicode文字を表現するためにWを使用してください。

String
文字列

 If you find a big block of text and is null terminated, you can use string.
 あなたがテキストの大きなブロックを見つけて、nullで終了している場合は、文字列を使用することができます。

 S for SHIFT-JIS and Q for Unicode.
 SはSHIFT-JIS、QはUnicodeです。

 Note that value is a pointer of the first character.
 値は最初の文字のポインタであることに注意してください。

 So there is already a level of indirection.
 したがって、すでに間接的なレベルがあります。

Valid split parameter form
有効な分割パラメータ·フォーム

 There is no fixed format for split parameter.
 分割パラメータに決まった形式はありません。

 Split parameter is used to split text stream from one hook into different threads.
 分割パラメータは、別のスレッドへつのフックからテキストストリームを分割するために使用される。

 It's only necessary to be different if you want to split the text.
 テキストを分割したい場合は異なることが必要なだけだ。

Examples

 Now I take some examples to demonstrate the whole process to build a hook.
 今、私はフックを構築するためにプロセス全体を示すためにいくつかの例を取る。

1. Font caching issue
1.フォントキャッシュの問題

 Example BGI engine.
 例 BGIエンジン。 素晴らしき日々

 Default hook gives a thread from TextOutA.
 素晴らしき日々デフォルトのフックがTextOutAからスレッドを提供します。

 Set breakpoint at TextOutA.
 TextOutAにブレークポイントを設定します。

 Called from 41F1F2.
 41F1F2から呼び出されます。

 We navigate to the entry of current function -- 41F1A0.
 41F1A0 - 私たちは、現在の関数のエントリに移動します。

 Set a breakpoint there and let the process fly.
 そこにブレークポイントを設定し、プロセスが飛ぶことができます。

 We can observe that process breaks at 41F1A0 as many times as TextOutA.
 私たちは、TextOutA何度でもとして41F1A0でそのプロセスの切断を観察することができます。

 So we continue step out.
 だから我々はステップアウトを続ける。

 41F1A0 is called from 41F45A.
 41F1A0は41F45Aから呼び出されます。

 Entry of this function is 41F400.
 この関数の入力は41F400です。

 This time process breaks at 41F400 more than TextOutA, as well as 41F1A0.
 この時間プロセスは41F1A0だけでなく、TextOutAより41F400以上に分割します。

 At 41F400, EAX contains data we want.
 41F400で、EAXは私たちが望むデータが含まれています。

 So the code is /HA-4@41F400.
 だから、コードは/HA-4@41F400です。

Then we discover that it mess up with some punctuation.
その後、我々はいくつかの句読点と、それが台無しにすることを発見する。

Keep the breakpoint at 41F400 and clears all other.
41F400にブレークポイントを保持し、他のすべてのをクリアします。

We can discover that ESP changes several times during one sentence, especially when the character is punctuation(for example 8141:、).
私たちは、文字が(たとえば8141用:,)句読点である場合は特に、ESPは一つの文章中に数回変更されていることを発見することができます。

So we use ESP as split parameter.
だから我々は、分割パラメータとしてESPを使用しています。

H-code is /HA-4:-14@41F400.
H-コードは、/HA-4:-14@41F400となります。

Simple test shows that this code works pretty well.
単純な試験で、このコードはとてもよく機能することを示しています。

 

 

 

 

Copyright (C) 2014 hakadoru.tank.jp All Rights Reserved.

文章の無断転載、複写等はご遠慮下さい。