.NET アセンブリの難読化ツール

.NET アセンブリ.NET Reflector 等で簡単に逆コンパイルできてしまいますが、それを防ぐために難読化が行われます。今回はどの様な難読化ツールがあるのかを調べてみました。探してみると有料無料 (無償) あわせてたくさんあるみたいですね。ブックマーク的な意味合いも含めて、有料と無料 (無償) とに分けてまとめておきたいと思います。

有料の難読化ツール

これらのソフトウェアは識別子を読めない文字に変更することや、文字列の暗号化、アンチ逆コンパイラ (アンチ逆アセンブラ)、余分なコードの除去、スタックトレースの復号化などが利用できます。詳細な比較は行いませんが、だいたいこれらの機能が利用できるようです。

無料 (無償) の難読化ツール

フリーで利用できる難読化ツールです。

NanDoKu

和製で基本的な識別子の名前変更ができます。商用利用もできるようです。

Eazfuscator.NET

ドラッグドロップで簡単に難読化できます。基本的な難読化に加えて、文字列の暗号化やコードの最適化などができます。Silverlight にも対応しています。

Phoenix Protector

こちらも識別子の名前変更や文字列の暗号化が可能です。

Babel.NET Free Edition

基本的な難読化から、文字列の暗号化や無効なコードの埋め込みなどが利用できます。

Skater .NET Obfuscator Freeware Light Edition

有料版の機能をは使えませんが、基本的な難読化ができます。

オープンソース

オープンソースで開発されている難読化ツールです。

さがせばまだまだ出てきそうですが、このあたりでやめておきます。
デコンパイリングJava ―逆解析技術とコードの難読化

TextBox を IME 前後参照変換に対応させる (System.Windows.Forms)

TextBox に入力済みの文字列を考慮して IMEかな漢字変換できるようにします。「IMEの前後参照変換機能に対応するには」が大変参考になりました。ありがとうございます。

【花が】「さいた」 →[花が咲いた]
【布を】「さいた」 →[布を裂いた]
【時間を】「さいた」 →[時間を割いた]

IMEの前後参照変換機能に対応するには

という風に、文脈を読んだ変換をしてくれます。ちなみにこの機能は IME がサポートしている必要があります。以下のソースコードコンパイルし、Windows 7 上の ATOK を使って試してみました*1

コードはあんまり自信ないです。ご利用の際は注意してください。

using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Text;
using System.Windows.Forms;

namespace Zengo
{
  class TextBoxEx : TextBox
  {
    private const int WM_IME_REQUEST = 0x0288;
    private const int IMR_DOCUMENTFEED = 0x0007;

    public struct RECONVERTSTRING
    {
      public uint dwSize;
      public uint dwVersion;
      public uint dwStrLen;
      public uint dwStrOffset;
      public uint dwCompStrLen;
      public uint dwCompStrOffset;
      public uint dwTargetStrLen;
      public uint dwTargetStrOffset;
    }


    protected override void WndProc(ref Message m)
    {
      // Multiline のことは考えてない。
      // てきとー実装なのでとりあえず動くだけ。
      unsafe
      {
        if (m.Msg == WM_IME_REQUEST && (int)m.WParam == IMR_DOCUMENTFEED)
        {
          uint len = (uint)SelectionStart;

          if (m.LParam.ToInt32() != 0)
          {
            RECONVERTSTRING* reconv = (RECONVERTSTRING*)m.LParam.ToPointer();

            char* paragraph = (char*)((byte*)reconv + sizeof(RECONVERTSTRING));

            reconv->dwSize = (uint)sizeof(RECONVERTSTRING);
            reconv->dwVersion = 0;
            reconv->dwStrLen = len;
            reconv->dwStrOffset = (uint)sizeof(RECONVERTSTRING);

            reconv->dwCompStrLen = 0;
            reconv->dwCompStrOffset = len * sizeof(char);

            reconv->dwTargetStrLen = len;
            reconv->dwTargetStrOffset = len * sizeof(char);

            for (int i = 0; i < SelectionStart; i++)
            {
              paragraph[i] = Text[i];
            }
          }

          m.Result = new IntPtr(sizeof(RECONVERTSTRING) + len * sizeof(char));
          return;
        }
      }

      base.WndProc(ref m);
    }
  }
}

ポインタつかっちゃっててなぜだか負けた気がする・・・。

*1:ATOK では「変換補助」の「カーソル位置前後の文章を参照して変換する」を有効化する必要があります。

Core Temp 日本語化

Core Temp 1.0RC 日本語化言語ファイル

Core Temp の紹介

Core Temp は CPU の情報や温度を表示するソフトウェアです。 IntelAMD 製の主要な CPU に対応しています。主にメニューの日本語化です。32 ビット版と 64 ビット版を同梱しています。メニュー以外の日本語化については技術的には可能ですが制約もあり、日本語化するかどうかは未定です。

日本語化言語ファイルをダウンロード

CoreTemp の日本語化は言語ファイルになりました。CoreTemp のインストール先の Languages ディレクトリに言語ファイルを保存してください。

日本語化パッチは 32 ビット対応版と 64 ビット対応版の二つを用意しています。使用している CoreTemp に合ったパッチを使用してください。

Window Clippings 日本語化

Window Clippings 2.1.28 日本語化パッチ

Window Clippings の紹介

Window Clippingsスクリーンショット撮影ソフトです。このソフトの特徴は Windows VistaWindows 7 の透明ウインドウの背景を消したり、影と一緒に撮影ができる点です。上の画像は Window Clippings で撮影しました。
ウィンドウだけでなく、遅延撮影を利用してメニューの撮影や、ウィンドウ内のオブジェクトを撮影することができます。複数のウィンドウを選択し、それらだけを同時に撮影することも可能です。
シェアウェアですが非常に使いやすいのでお勧めです。
バージョン 1.5.15 以前はフリーウェアでした。現在でも公式ページからダウンロードできるようです。

http://www.windowclippings.com/download/1.5.15/x86/WindowClippings.exe
http://www.windowclippings.com/download/1.5.15/x64/WindowClippings.exe
日本語化パッチをダウンロード

日本語化パッチは 32 ビット対応版と 64 ビット対応版の二つを用意しています。使用している Window Clippings に合ったパッチを使用してください。

RIOT 日本語化

RIOT 0.6.0 日本語化言語ファイル

RIOT の紹介

RIOT は画像を比較しながら最適化できるソフトウェアです。JPEG, GIF, PNG などに対応しており、イメージを減色したり 最適な圧縮にしたりするなどして画像ファイルのファイルサイズを小さくします。わかりやすいインターフェースで操作は簡単です。

JPEGSnoop 日本語化

JPEGSnoop 1.6.0 日本語化パッチ

JPEGSnoop の紹介

JPEGSnoop は画像ファイルや動画ファイルに隠された情報を解析するソフトウェアです。
デジカメの撮影情報などが格納されている EXIF を取得することができます。JPEG のエラー検出などにも利用でます。

Process Monitor 日本語化

Process Monitor 3.60 日本語化パッチ

Process Monitor の紹介

Process Monitor はプロセスの活動を監視するソフトウェアです。ファイルアクセスやレジストリアクセスなどの詳細なログをとることが可能です。
プロセスの動作のを監視することでプロセスの動作を詳細に調べることができるようになります。監視ログをフィルタリングしたり、検索したりすることも可能です。