2020-12-01

anond:20201201171157

追記

まず簡単なのはここに書いてある。

ttps://agk.saloon.jp/how-to-jp-series

結論をいうと対象ソフトが下記を満たすかどうかで難易度がかなり変わる。

1. 表示テキストが外部ファイルになっている or exe内部のリソースファイルから読み取られる ↔ プログラム埋め込み

2. 内部のテキストエンコード方式UTF-8 or 16 or 32 ↔ ASCIIなど

3. フォントシステムにあるのが使われる ↔ 外部ファイルになった画像フォントが使われる

すべてのソースが公開されていない限り、この条件を満たさなもの基本的日本語にできない。

例えば、自分C言語printfだけのHello world!プログラムを作ってみて、それをソース無しで、外からテキストを変更できるかためしてみればいい。

これは1に反するから多分簡単には出来ない。よしんば出来たとしても、Hello world!より文字数が多いテキストに変えるのはそれなりに面倒である

こういう表示をさせるやり方としてはprintfに渡すデータを実行時にすげ替えればいい。具体的にはprintfの直前で別の箇所にジャンプさせて引数レジスタに書き換えたいアドレスを渡して、またprintfまで戻ってくればいい。

これ以上に面倒なのが、2と3が合わさったもので、欧米アルファベットしか使わないため、ソフトの内部コードASCIIやCP12XXだったりする。さらにそのソフトに用意されているフォント文字はその範囲しか存在しない。これらはどう頑張っても普通に日本語を表示することは出来ないので、かなり強引に改造するしか無い。俗に中華パッチと呼ばれているものがそれである

具体的にはソフトのどこかで、表示させるテキスト配列から文字を1文字取得、1文字からコードポイントに変換、フォントファイルからそのコードポイントのグリフデータを取得、グリフデータを画面に表示させる処理があるため、そこに割り込む。1バイト取得している箇所を2,3バイト一気に取得して、それをなんとかしてコードポイントにして、そのコードポイントをグリフ取得の処理に回せばいい。

この方法にしても、技術的に難しい点は存在せず、技巧的であり、Cの本を読めば誰でもできる処理である

記事への反応 -
  • > じゃあ具体的に何を作りたいのかというと、英語のフリーソフトの言語表示を日本語に翻訳するソフト。 これはまっとうなソフトウェア開発ではおそらくまず出会わない。技術(テ...

    • (追記) まず簡単なのはここに書いてある。 ttps://agk.saloon.jp/how-to-jp-series 結論をいうと対象のソフトが下記を満たすかどうかで難易度がかなり変わる。 1. 表示テキストが外部ファイ...

      • おいちゃんには難しすぎてサッパリです よく分からないのですが、なんかOSのセキュリティ的に引っかかるとかないんですか? 動作中のプロセスに簡単にアタッチできなかったりとか最...

        • >OSのセキュリティ的に引っかかる 回避できる。Macはわからない。 >鬼滅の面白さがまったく分からないのです 本当に全巻見てから言ったか?

      • たぶん言わないであろうと思われるので言うと、現在これをやってる人は少ない なんでかというと、法律または利用規約に引っかかる可能性が大きいからだ 本質的にはこれをやったプロ...

        • 個人的なハックとかクラック?はいいんでないの? いや、良くはないけど、個人がこっそり家でやってることをどうやって取り締まんのよ?みたいな それより実行ファイルをバイナリエ...

          • いや、その、なんていうか リバースエンジニアリング禁止って利用規約に書いてあったら「それどうやって見つける気なの?」とか言わずにやめて欲しいわけなんですよ 複数台へのイン...

    • エミュですでにあるけどね

記事への反応(ブックマークコメント)

ログイン ユーザー登録
ようこそ ゲスト さん