忘れる前に覚書。優しい文章を目指します。
ザ・覚書 ザ・覚書
出来るだけ子供にも、わかりやすいように書いて行きたいと思います。

PCバージョンでサイトを表示しています。
【ザ・覚書 3クリックアンケート実施中】
暑さの一番の原因はなんだと思いますか?
あなたの支持する政党はどの党ですか?

C#のEXEは、中のソースコードのロジックを簡単に見られてしまうかも知れない

☆C#のEXEは、中のソースコードのロジックを簡単に見られてしまうかも知れない
今のページの関連ページのリストへ
ザ・覚書のトップページに戻る

C#のプログラム(Microsoft Visual Studio 2012 ExpressのC#)で試しに遊んでみて、
問題を感じた事を書いておきます。

C言語とかでプログラムソースコードをコンパイルして、
EXEになると、機械語になって、処理を表示するにもアセンブラコードみたいなをダンプする事になり、
容易にリバースエンジニアリング(再プログラムソース化)できないと私は思っていました。

逆コンパイル自体も、ほとんどプログラム商品やフリーソフトのEXEも禁止されていると思います。

今回、C#のプログラムでちょっと遊んでみて、
どうやら今までの私の常識とは違う事を知りました。
丁度、他の事で逆コンパイルについて調べていて良かったです。

C#は作成したEXEから簡単にソースコードをリバースエンジニアリング・逆コンパイルされてしまうような。
C#は、どうやらEXEにするとき、機械語にはならなくて、マルチプラットホームを意識しているのか、
中間状態・中間言語のものになるだけらしいです。
(少なくてもMicrosoft Visual Studio 2012 Expressで普通に作ったC#プログラムは。)

逆コンパイルで有名なフリーソフトがあるらしく(触っていませんが、商用ソフトもあるらしい)、
試しに”自分が”作成したC#のEXE
(内容はフォームにボタンが1つあり、そのボタンを押すとファイルオープンとかする)
を読ませ、逆コンパイルすると、プログラムコードのロジックがあらわになってしまいました。

通常のAPIを用いてビシバシ書くC言語で作ったEXEは、そのツールでは
逆コンパイルされませんでした。


C#の例:


・コンパイルする前のEXEになる前のソースの一部

// 一応BACKUP
System.IO.File.Copy(@"list.txt", @"バックアップlist.txt", true);

//--------------------------
//--- オープンと読み込み ---
//--------------------------
int icounter = 0;               // 何行目を読んでいるか?
string stZenbu = string.Empty;  // 出力内容を格納
string stBuffer;                // バッファ

// 一応BACKUP
System.IO.File.Copy(@"list.txt", @"バックアップlist.txt", true);

// ファイルオープン 今回はUTF-8で
StreamReader srFILE = new StreamReader(
     @"list.txt", Encoding.GetEncoding("UTF-8"));
・・・・
if (icounter == 7) // たとえば7行目の後
・・・・

こんな感じのソース



・逆コンパイル後のソースの一部

int num = 0;
string text = string.Empty;
File.Copy("list.txt", "バックアップlist.txt", true);
StreamReader streamReader = new StreamReader("list.txt", Encoding.GetEncoding("UTF-8"));
・・・・
if (num == 7)
・・・・





変数名こそ変わるが、コードのロジックは、ほぼ再現されてしまいました。
ファイル名とかも。
ロジック丸見え・・・。


これだと、C#で遊びで自分用のプログラムを作成するのは、問題ないですが、
ソースコードはあげたくないけど、EXEだけ公開するという事が、
ちょっと出来ないなあと思いました。

こういう事が簡単に出来てしまうと、
C#で作ったEXEを商品として売るとか、納品するのも、どうなんだろうなと思います。

やっぱり通常通りC言語でWindowsAPIを使ってビシバシ書くのが良いのかなあ。


記述:2015年08月頃






Twitter Facebook Google+ はてな Pocket LINE




一言掲示板です。なにかありましたら以下に書いて書き込みボタンを押して下さい。
管理人による書き込みの確認後、荒らし書き込みでない場合に表示させていただきます。
悪意ある書き込みや挑発的な書き込みと思われる内容は、表示させません。
その為、ちょっと書き込みから表示までに時間がかかってしまいます。ご了承下さい。

お名前

コメント




ファイル関連
C言語 ファイルオープン・クローズ
乱数
C言語 乱数発生関数例
Bitで遊ぶ
C言語 1バイトの数値内の何ビット目に1があるか返す関数例
C言語 1バイトの数値内の指定ビットの値を返す関数例
C言語 1バイトの数値内の指定ビットの値を1にする関数例
C言語 1バイトの数値内の指定ビットの値を0にする関数例
C言語 1バイトにいろいろな状態を入れてみる例
文字列操作
C言語 整数値を文字列に変換する関数例
C言語 ”ダブルコーテーションを文字列として扱う場合
C言語 CSVファイル形式のファイル内容を読み込む関数例
C言語 strtokでは連続トークンを正しく読み込まない
VisualC
C言語 とにかく自力でウィンドウ
C言語 UTF-8のファイル操作
その他
メモリリーク GDI関連のチェック方法
作ってみたアプリ
BMPの部分保存をするアプリ「ビットマップファイル部分取得」
16進数を自動加算してテキスト出力するアプリ
テキストファイル(txt)を字幕ファイル(srt)に変換するアプリ
C#
C# ファイルオープン・1行ずつ読み込み・書き込み・クローズ
C#のEXEは、中のソースコードのロジックを簡単に見られてしまうかも知れない
【ザ・覚書 3クリックアンケート実施中】
暑さの一番の原因はなんだと思いますか?
あなたの支持する政党はどの党ですか?

今のページの関連ページのリストへ
ザ・覚書のトップページに戻る
全ページのリストへ