fc2ブログ

記事一覧

XamarinプロジェクトをDotfuscatorで難読化する | Xamarin.Forms


やはり Xamarin.Forms で開発したapkファイルやipaファイルでも逆コンパイルが可能という事を最近知りました。それはまずいと思い、Visual Studio 2005 から難読化ツールとして VisualStudio に標準搭載されているDotfuscatorがあることを思い出しました。そのツールを使って、例え逆コンパイルされても解読がされにくいようにしたいと思います。

dotfuscator_04.png



前提条件
・Windows10 Pro 64Bit
・Visual Studio 2015 Community Update3
・Xamarin 4.3.0.784 (NuGet Xamarin.Forms 2.3.4.224)
・macOS Sierra 10.12.4 / Xcode8.3.1 / Xamarin.iOS 10.4.0.123



1.使用登録

(1)Visual Studio 2015 Community のメニューから
ツール→「PreEmptive Protection - Dotfuscator」を選択します。
以下の図のように使用許諾が表示されますので、同意してOKを押下します。

dotfuscator_01.png


(2)次にメールアドレスを登録する画面(図は割愛)になりますので、受信ができるメールアドレスを入力して次に進みます。
登録手順が完了すると以下のようなメッセージが表示されます。

dotfuscator_02.png


(3)以下の入力ボックスが表示されたら、(2)で入力したメールアドレス宛に受信しているメールにシリアル番号と確認コードが記載されていますので、確認コードを入力してOKボタンを押下します。

dotfuscator_03.png



2.プロジェクトファイルを編集する

(1)次にエクスプローラで、難読化したいDLLをビルドしているプロジェクトフォルダに移動します。プロジェクトフォルダ内にあるAppName.csprojファイルをメモ帳で開きます。
ReleaseビルドのPropertyGroupタグの最下部に以下のタグを貼り付けます。

<Obfuscate>true</Obfuscate>

dotfuscator_05.png


(2)次に同じcsprojファイルの最下部</Project>の手前に以下のコードのDotfuscatorのパスのみ確認してそのまま貼り付けます。

<Target Name="AfterCompile" Condition="'$(Obfuscate)'=='true'">
    <!-- dotfuscator.exeパスのプロパティ設定 -->
    <CreateProperty Value="C:\Program Files (x86)\Microsoft Visual Studio 14.0\PreEmptive Solutions\Dotfuscator and Analytics Community Edition\dotfuscator.exe">
      <Output TaskParameter="Value" PropertyName="_DotfuscatorExePath" />
    </CreateProperty>

    <!-- 難読化するファイルのプロパティ設定 -->
    <CreateProperty Value="$(ProjectDir)$(IntermediateOutputPath)$(TargetFileName)">
      <Output TaskParameter="Value" PropertyName="_ObfuscatedFilePath" />
    </CreateProperty>

    <!-- 難読化先フォルダのプロパティ設定 -->
    <CreateProperty Value="$(ProjectDir)Dotfuscated">
      <Output TaskParameter="Value" PropertyName="_DotfuscatedFolderPath" />
    </CreateProperty>

    <!-- 難読化の実行 -->
    <Exec Command="&quot;$(_DotfuscatorExePath)&quot; /in:&quot;$(_ObfuscatedFilePath)&quot; /out:&quot;$(_DotfuscatedFolderPath)&quot; /q" />

    <!-- 難読化済みファイルをコピー -->
    <Copy SourceFiles="$(_DotfuscatedFolderPath)\$(TargetFileName)"
          DestinationFiles="$(_ObfuscatedFilePath)" />
  </Target>

Dotfuscatorのパスは
"C:\Program Files (x86)\Microsoft Visual Studio 14.0\PreEmptive Solutions\Dotfuscator and Analytics Community Edition\dotfuscator.exe"
となっておりますが、Windows10 64Bit VisualStudio 2015 の環境でのパスになります。環境により適宜変更してください。

dotfuscator_06.png


参考URL
http://www.atmarkit.co.jp/fdotnet/dotnettips/528autoobfuscate/autoobfuscate.html



3.Visual Studioでリリースリビルドする

(1)リビルドする前にプロジェクト内に「Dotfuscated」という名前のフォルダを作成してください。
(2)先ほど編集したcsprojファイルのプロジェクトをリリースでリビルドします。
ビルド中に以下の画面が表示される場合がありますが、Dotfuscatorのビルドボタンを押下して、×ボタンで終了してください。VisualStudio のビルドが進みません。おそらくWindows8以降は対話型のプログラムとしてしか起動が許可されていないからだと思います。

dotfuscator_04.png


尚、上記画面を手動でも難読化可能ですが、VisualStudio のビルドがDLL作成の次にAPKを作成してAndroid端末にリリースしてしまいますので、難読化自体をビルドプロセスの中に組み込む必要がありました。それが手順2のcsprojファイルの編集です。

※もしもビルドエラーが発生する場合は、一度手順2で編集したcsprojファイルを元に戻し、リリースビルドしてから、プロジェクト名\Binフォルダ内にあるDLLをDotfuscatorをGUIで起動後にビルドしたものがDotfuscatorフォルダに存在すればOKです。手順としては自動化できませんが、難読化は可能です。他に良い方法があれば良いのですが、またわかり次第追記します。



4.ILSpyで逆コンパイルして確認する

図の赤線・赤枠の部分がアルファベットに置き換えられていることがわかります。アルファベットに置き換えられていることで第三者による目視での解読が難しくなるというカラクリですね。

dotfuscator_07.png


ILSpyは逆コンパイルする有名なツールです。以下のサイトからダウンロード可能です。サイト右上の「Download Binaries」ボタンを押下します。
http://ilspy.net/



当ブログの内容をまとめた Xamarin逆引きメニュー は以下のURLからご覧になれます。
https://itblog.dynaspo.com/blog-entry-81.html


関連記事

コメント

コメントの投稿

※名前とタイトルが入力されていないコメントでは他のコメントとの区別ができません。

 入力されていないコメントには返信しませんのであらかじめご了承くださいませ。

※ニックネームでも良いので必ずご入力ください。

    

※必ずご入力ください。

    
    

※必ずご入力ください。

※技術的な質問には環境やエラーについて正確かつ詳細にお教えください。

・正確なエラーの内容

・Windowsのバージョン番号

・Visual Studioのバージョン

・機器の型番

・アプリやソフトのバージョン

    

カテゴリ別記事一覧

広告

プロフィール

石河 純


著者名 :石河 純
自己紹介:素人上がりのIT技術者。趣味は卓球・車・ボウリング

IT関連の知識はざっくりとこんな感じです。
【OS関連】
WindowsServer: 2012/2008R2/2003/2000/NT4
Windows: 10/8/7/XP/2000/me/NT4/98
Linux: CentOS RedHatLinux9
Mac: macOS Catalina 10.15 / Mojave 10.14 / High Sierra 10.13 / Sierra 10.12 / OSX Lion 10.7.5 / OSX Snow Leopard 10.6.8
【言語】
VB.net ASP.NET C#.net Java VBA
Xamarin.Forms
【データベース】
Oracle 10g/9i
SQLServer 2016/2008R2/2005/2000
SQLAnywhere 16/11/8
【BI/レポートツール】
Cognos ReportNet (IBM)
Microsoft PowerBI
ActiveReport (GrapeCity)
CrystalReport
【OCX関連】
GrapeCity InputMan SPREAD MultiRow GridView
【ネットワーク関連】
CCNP シスコ技術者認定
Cisco Catalyst シリーズ
Yamaha RTXシリーズ
FireWall関連
【WEB関連】
SEO SEM CSS jQuery IIS6/7 apache2

休みの日は卓球をやっています。
現在、卓球用品通販ショップは休業中です。