コンパイル時に暗号!?

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
しん

コンパイル時に暗号!?

#1

投稿記事 by しん » 15年前

コンパイルするときに暗号化ってできますか?

開発環境
VC++ 2008
Windows XP SP3
C言語使用

VC++のコマンドプロントで
cl ○○.c
とやるとコンパイルが実行されて
○○.exe
という実行ファイルが作成されます。
※いつもCUIでコンパイルしてるので
 GUIの方はわかりません。

作成された実行ファイルを逆アセンブラすると
簡単にソースがわかりました。
これを回避するにはソースの暗号化しか
ないと思うのですが、どのように暗号化したら
よろしいのでしょうか?

よろしくお願いします。

御津凪

Re:コンパイル時に暗号!?

#2

投稿記事 by 御津凪 » 15年前

> 作成された実行ファイルを逆アセンブラすると
> 簡単にソースがわかりました。

デバッグ実行時の逆アセンブラ表示でのことでしょうか?
そうなのであればデバッグを助ける為にアセンブラコードと共にソースコードも一緒に表示されているだけです。

配布が行えるリリース版でビルドすれば、逆アセンブラしても元のソースコードは(ソースコードも一緒に配布していない限り)現れません。

しん

Re:コンパイル時に暗号!?

#3

投稿記事 by しん » 15年前

すみません。。
配布が行えるリリース版というのはなんでしょうか?
VC++ 2008に付属していますか?

Dixq (管理人)

Re:コンパイル時に暗号!?

#4

投稿記事 by Dixq (管理人) » 15年前

メニューバーのとこに「Debug」か「Release」か選択出来るところがありますからそれをReleaseにしてください

しん

Re:コンパイル時に暗号!?

#5

投稿記事 by しん » 15年前

普段VC++のコマンドプロントでコンパイルしているので
GUIの方のコンパイルがちょっと・・・・

コマンドプロントではできませんか?

御津凪

Re:コンパイル時に暗号!?

#6

投稿記事 by 御津凪 » 15年前

コマンドプロンプトではデバッグ・リリースの区別がありませんでしたね。すみません。
デバッグ情報を含めた実行ファイルにはビルドしたディレクトリなどの個人情報が紛れ込むことがあるため、
上記の記事のように書きました。(他にも理由がありますが)

通常のコマンド(cl main.c とか)では、デバッグ情報無し、最適化無しなどの状態でコンパイルします。
つまりこのような形で作られた実行ファイルにはデバッグ情報は入っていません。

dumpbin /all /out:dump.txt ○○.exe
で実行ファイルの中身を見れますが、元のソースコードの記述はどこにも無いはずです。

しんさんの仰る「ソース」が機械語(実行ファイル内のデータ)から逆アセンブルして現れるアセンブラコードのことであれば、
それを暗号化するようなことは出来ません。
(OS が理解できないコードになるため)

符号化するプログラムを含めれば実現できなくもないですが、結局そのプログラムは暗号化できないコードになるので、
突き詰めれば結局元のコードが解ってしまいます。

簡単にコードを見れないように、ということであればそのようにしてもいいのですが、
変なことをやるとセキュリティソフトにウイルスと誤認されてしまいます。

しん

Re:コンパイル時に暗号!?

#7

投稿記事 by しん » 15年前

なるほど。
そうだったんですか・・・

私が言ったソースとは
アセンブラコードもそうですが
たまにprintfので出力する文字列が
そのまま逆アセンブルで表示されることが
あるので、そういうのをなくしたかったです。

逆を言えばどんなソフトでも
アセンブラを理解していれば
Cのソースはバレてしまうということですね。

ありがとうございました。

しん

Re:コンパイル時に暗号!?

#8

投稿記事 by しん » 15年前

なるほど。
そうだったんですか・・・

私が言ったソースとは
アセンブラコードもそうですが
たまにprintfので出力する文字列が
そのまま逆アセンブルで表示されることが
あるので、そういうのをなくしたかったです。

逆を言えばどんなソフトでも
アセンブラを理解していれば
Cのソースはバレてしまうということですね。

ありがとうございました。

Dixq (管理人)

Re:コンパイル時に暗号!?

#9

投稿記事 by Dixq (管理人) » 15年前

文字列を発見されないようにするだけなら文字コードをあるキーで排他的論理和をとった数値とキーで表示するなどしてみたらどうでしょう?
もっと簡単にいえば、文字コード+1しただけでパッと見はわからくなると思います。

閉鎖

“C言語何でも質問掲示板” へ戻る