どうも~。こんばんは。
今日はちょっとそれっぽいブログを書きますね。
以前から開発しているツールなんですが、mdbをいじります。
ですのでDAOを使っていたんですが、.NETの特性上相互運用なんとかっていうDLL
ここでいうと、「Interop.DAO.dll」が実行上必要になります。
ただ、どうしてもこれがダサいというか、正直消したいので、いろいろと思案していたんですが、
リソースに埋め込む。
dllの中身をソースに書く
exeに抱合させる。
などなど。今回上記二つが今のスキルでは多少困難ということで三つ目の方法を取りました。
内容としては
ILMergeをMicrosoftよりダウンロードおよびインストール。
(いろいろ調べたところ商用利用可能とのことです)
コマンドラインより操作し、dllをexeにくっつける。
コマンドとしては
(ILmerge.exeの存在するフォルダと同じ階層に抱合したいexe,dllがあるとします。)
ilmerge /out:newApp.exe App.exe *.dll /wildcards /v1.1
上記のようになります。
引数[out]
抱合した新しいexe
引数[wildcards]
上記のようにすべてのdllを対象にする場合です。
引数[v1.1]
.NET Framwork 1.1 として書き出します。
ここで注意したいのは、プライマリアセンブリ(メインのプログラム)の拡張と同じ拡張子で引数[out]
を設定することです。
これで同じフォルダ階層にnewApp.exeというdllを含んだものが生成されます。
ただ僕の場合テスト的にコードに書いていたADODBのコードのせいでエラーが出ました。
ですので、不要なコードを削除することで解決しました。
ADODBもdllがあるから、それが同じ階層のフォルダにdllがないからかな?
許可されない参照:ADODB
見たいなエラーです。実際は英語です。Resolve allowなんとか。
すみません忘れました。
これでdllがexeに含まれるのですっきりしますね。
※ILMergeは現在.NET Framework 2.0上でしか動きません。
今回は1.1をターゲットにしていることと、まだ2.0が正式版でないことから、混合させるのが怖かった
ため別のパソコンに2.0をインストールして行いました。
注意:上記の内容を実行した結果のいかなる損害も筆者は補償できません。
また、今回筆者の環境でうまく言っただけで、すべての環境でうまくいく保障はありません。
実行は自己責任でお願いします。あくまで、今回筆者がこういう形式で回避したというサンプルです。
で、調べていくうちにILDSMというツールを見つけました。
おそらく.NETに詳しい方なら知っていると思います。
これには驚きました。
ILコードやCLRヘッダのせいみたいですが。
変数名やら関数名、DLLの情報など丸見えです。
詳しくは下記の@ITの記事を読んで下さい。
わかりやすく説明さています。
ちょっと怖いですね。しかもこれが.NET Framework SDKの標準装備だから驚きです。
ためしにvectorで.NETで作成されフリーウェアをDLし、開いてみたところ、丸見えでした。
そこで調べていくと実は VisualStudio.NETにコードを難読化させるソフト"Dotfuscator"がバンドル
されていました。
有償のものもあるみたいです。
難読化っていうのは、簡単な話変数の名前などややこしくしリバースエンジニアリングされたときに
読みづらくすることです。
まだ使っていませんが、仕上げ段階で使おうと思います。
参考:
Dotfuscato
ILMerge
@IT「.NET逆コンパイラとコードを難読化するDotfuscator」
まぁ今日気づいたのは、開発するということは、環境を知ることが大事だってことですね。
ドンだけすごいロジック作っても、リバースエンジニアリングとかされたら損失出るし、
どういう仕組みで動くかもわからずプログラムを組むっていうのが危険なことかというのが
思い知らせれました。
もっと勉強しなくては・・・・。
ではでは。
明日のテスト勉強します!
オラクルとC!
それでは。またの機会に。