AKB48の推しメンをセンターにできちゃうかもしれない!? >>

exeファイルの中身のソースを確認する方法、つまりC++などの言語に戻す方法はありますか?
あるいはバイナリエディタでexeファイルの中身のソースを知る方法はありますか?

自作したexeファイルの中身のソースを勝手に解読されて、同じようなソフトを複製される可能性はありますか?

このQ&Aに関連する最新のQ&A

A 回答 (4件)

こんにちは


>exeファイルの中身のソースを確認する方法、つまりC++などの言語に戻す方法はありますか?
 exe ファイルは、マイクロソフト製OSの規約による手順で機械語に変換されたバイナリファイルです。
 従って、バイナリファイルを逆アセンブラなどの手法でニーモニックに戻して、パターンマッチングをするような(超めんどー)プログラム書かれたなら、ある程度は戻せるでしょう。 ある程度とは、exeファイル状態の時デバッグ情報は含まれ無いので定数名、変数名、関数名、その他マクロ、インクルードファイル名、クラス名、インスタンス名..など元のソースを復元するために必要な情報が決定的にありませんので、構文などの雰囲気だけひょっとしたら復元できるかも知れないという意味です。

>自作したexeファイルの中身のソースを勝手に解読されて、同じようなソフトを複製される可能性はありますか?
 exeファイルからWindowsのソースを復元するよりも動作しているプログラムから、要求事項を読みとって設計仕様書を書けば、著名なOS上で動くものなら、exeファイルの中身を参考にせずとも新たに開発できてしまいます。
 例えれば、小説であらすじが判れば、似たようなエピソードの物語を書くのは、元の小説を変にいじるより簡単ということです。 しかし、単にクローンを作っただけでは、当然オリジナリティがないのですぐに判ってしまいます(そんなもの恥ずかしいです)。 また同じOS上で動くものは、その機能の組み立て方も無限のバリエーションがあるわけでもないので似てきてしまいソースを比べたら同じ部分があったということはあり得ます。

 独創的なアイデアであって、著作物(プログラム)を守りたいなら著作権法で守られるように考えておくべきでしょう。
    • good
    • 7

アセンブラ・レベルでなら完全に読み取れます。


Cの場合は基本的にはソースがないと、exeだけではどうにもなりませんが、
関数名などは容易に想像できる形で埋め込まれているので、
ある程度わかります。

C++は基本的に関数名が変更される(パラメータの情報等が埋め込まれる)ので、Cほど容易には解析できません。(extern "C"を除く)
関数名変更のルールは規定されておらず、完全にベンダーに任せられています。ベンダーによっては、同じベンダーのコンパイラでもバージョンが違うと変更のルールが変わるものもあります。

よってC++の場合、解析は決してたやすくはないと思います。
完全に不可能とはいえませんが...
アセンブラとC++の両方に通じていて、使用されたコンパイラにも通じている人なら、完全に復元することは不可能にしても、ある程度の理解はされてしまう可能性は十分にあると考えます。
    • good
    • 5

exeファイルの中にソースの情報がすべて入っているわけではないので、完全には無理だと思います。


ある程度なら、逆コンパイルなどのソフトがあると思います(私はやったことがないので詳しくは分かりません)。
また、exeファイルと別にソースを公開しているオープンソースのソフトもあります。

ただ、普通は、オープンソースでない場合は、元のソースを調べようとするような行為は、作者が禁止していることが多いようです(リバース・エンジニアリング禁止、などの言葉がマニュアルや利用規則などに書かれているなど)。

他人や会社のソフトを使う場合は、取り合えず、そこらへんをチェックしておいた方がよいと思われます。
また自作ソフトの場合は、完全には無理だが、ある程度は可能、ということで、公表する場合は利用条件としてそこは禁止と明記した方が良いと思われます。
    • good
    • 3

逆コンパイラ用のツールはいくつかあります。


完璧に元に戻せるわけではありませんが、大まかな流れは掴むことができます。
 ただ、私はプログラムは、有償無償に関わらず、フリー(日本でのフリーではなく、自由のフリー)で開発しますから、ソースも含めて公開してます。
 フリーソフトウェアの定義 - GNU プロジェクト - フリーソフトウェア財団 (FSF) ( http://www.gnu.org/philosophy/free-sw.ja.html )

 
    • good
    • 4

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q拡張子exeのファイルの開き方を教えてください

会社のPCで、拡張子「ex_」のファイルを受信しました。
送り主に確認すると、エクセルファイルらしく、拡張子をexeに変更すると開けるといわれたので変更しました。すると、エクセルのアイコンが「AM」と書かれたアイコンに変わりました。
そのアイコンをクリックすると、「指定されたデパイス、パス、またはファイルにアクセスできません。アクセス許可がない可能性があります」というエラーになりました。
プロパティを見るとファイルの種類はアプリケーション、説明はArcmanager SelfExtractorとなっています。
先月も同様のファイルが届いて、同じエラーがでたのですが、PCに詳しい社員に開いてもらいましたが、その社員が病気で長期休暇に入ってしまい、開き方を聞いていなかったので開けなくて困っています。
分かる方いらっしゃれば教えてください。
よろしくお願いします。

Aベストアンサー

たぶんこちらの内容で問題ないかと。

「指定されたデバイス、パス、またはファイルにアクセスできません。アクセス許可がない可能性があります。」

まずこのファイルが安全か、取得元から確認してください。もし安全であることが確認できたら、ファイルを右クリックして、「プロパティ」を選択します。「全般」タブ内の「ブロックボタン」をクリックします。これでこのファイルのブロックを解除します。

http://tooljp.com/qa/E4CA9B9B6E70D84F49257356005A75A5.html


くれぐれもウイルス対策をしているパソコンで、信頼できる相手からのメールであることを確認してから実行してくださいね。

Q実行ファイル(.exeファイル)の作り方を教えて!

コマンドファイル(.bat)を作成しているのですが、見知らぬ方に簡単に変更される困っています。
そこで、(変更されないようにするにはと)思いついたのが実行ファイル(.exeファイル)です。
しかし、作り方が分かりません・・・

誰か教えて下さい。

Aベストアンサー

念のために、通常BATファイル等で作成したコマンドファイルをそのままEXEファイルには変換できません。
(そのようなtoolでもあれば別ですが)

通常、VBやCなどといったコンパイラ言語が必要になってきます。

そのような言語で書かれたソースファイルをコンパイラによってコンパイルするとOBJファイルなる物が作成され、それをLINK(リンカ)と呼ばれる物でOSに必要なファイルをくっつけてEXEファイル等にします。
(通常の物であれば一括してEXEファイルまで作ってはくれますが)

EXEファイルを作成するより適正なOSの元でファイルのアクセス管理を行った方が安全かつ簡単かもしれません。

それでも挑戦なさるのであればまず無償で手に入るコンパイラの入手をしましょう
BCC32が一番手頃ではないでしょうか。

参考URL:http://www.borland.co.jp/cppbuilder/freecompiler/

Qexeファイルを作ったり改造したりするのは?

exeファイルを作ったり、
(たとえば 竹馬って書いた文字を画面に出させるとか) 改造したりする説明が書いたおすすめのサイトはないでしょうか?
さっきから exe作成や exe改造で調べているのですけど、見つかりません。
知ってらっしゃる方いたらお願いします。
できれば初心者にわかりやすいのがいいです。

Aベストアンサー

exe作成とexe改造は、全く別の事だと考えてください。

Exe(というかexeはWindowsの実行ファイル)を作成しexe単体で動くものを
作成するには基本的にはC/C++のコンパイラを使います。
(javaで作ったものはexeにはなりません。)

フリーのものだと下記のものが有名です。
http://www.borland.co.jp/cppbuilder/freecompiler/

C/C++言語を勉強するならここ
http://www.kumei.ne.jp/c_lang/

一方exeの改造はバイナリエディタを使うのが一般的です。
バイナリエディタは下記のものが有名
http://www.zob.ne.jp/~c.mos/soft/bz.html

QEXEファイルからの抽出

EXEファイルからEXEファイルを抽出すくことって出来ますでしょうか?

自己解凍形式ではなく一応プログラム内に入っているexeファイルです。

フリーウェアでもシェアウェアでもかまいません。

解答お待ちしております。

Aベストアンサー

一番抽出できる可能性が高いのは「Universal Extractor」を使うこと.
http://www.forest.impress.co.jp/article/2006/10/24/universalextractor.html
http://legroom.net/software/uniextract

exeファイルの圧縮形式を自動的に判断して解凍してくれる優れものなんだけど,失敗することもあります.まあ,とりあえずやってみてください.

それと参考URLも注意してほどほどに….

参考URL:http://okwave.jp/qa1261380.html

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。

QアプリケーションのDLLファイルを開いたり、編集したりすることは技術的に可能ですか?

プログラミングの知識も経験もほとんどないのですが、教えてください。パソコンにインストールしたアプリケーションのDLLファイルですが、これは何らかの言語で書かれたプログラムですか?特定の言語ではないのでしょうか?それを開いたり、編集したりすることは技術的に可能ですか。どんな言語で書かれたファイルなのか確認したり、編集したりするのに必要な環境はどのようなものなのでしょうか。

Aベストアンサー

Q/パソコンにインストールしたアプリケーションのDLLファイルですが、これは何らかの言語で書かれたプログラムですか?

A/そうです。プログラミング言語でソースは書かれています。既に解答があるとおりそれをコンパイル(機械語翻訳)します。

Q/それを開いたり、編集したりすることは技術的に可能ですか。
A/理論的には可能ですよ。逆コンパイル作業をすることで、だいたいのソースを抽出することができます。ただし、プログラミングをしたこともない方が、逆コンパイルして編集するのははっきり言って通常は無理です。まずはプログラミングの知識と十分な経験をつける必要があります。

Q/編集したりするのに必要な環境はどのようなものなのでしょうか。
A/環境だけでは、無理です。経験の問題が大きいです。後は、編集する許諾を得ているかどうかの問題ですね。ソフトは、経験があれば必然的にご自身で選択するようになりますし、不足があれば作るでしょう・・・
逆コンパイルだけであれば、逆コンパイラソフトで可能ですが・・・基本的に元の状態に100%の抽出はできないですし、編集も経験が少なければ無理です。
(逆コンパイルすると、元々の復元ができないため、下手に触るだけで、予期しない処理となることもある)

重要なのは、メーカーやDLLの配布元から編集・逆コンパイル許諾を得ているかどうか、そのソフトを扱うだけの十分な経験があるかどうかは別の問題です。

ちなみに、あなたが作成したものではないDLLファイルは、全てあなた以外の開発者に、著作権があります。このDLLファイルを添付したソフトを買ったからといって、編集の許諾を得たことにはなりません。編集する場合は、制作者の許可を得て編集することになります。

もし制作者の許諾なしに改変する、ソースを見るなどの措置を執れば、機密コードを持つ場合もありますので、不正コピーより厳しい罰則を受けることになりますよ。
(これがWindowsの一部なら、最悪では個人でも半端ではない請求があるはずです)
これは、市販ソフトはもちろんフリーソフトでも勝手に編集はできません。フリーソフトは無料ではなく、著作権は作者(メーカー)にあり、作者が意図した目的以外に流用したり、作者の許可なく改変したものを使うことはできません。(もちろんメーカー製のDLLなら、一般のユーザーに編集や逆コンパイルの許諾を与えることはほとんどありません)

ということです。急ぎであっても、逆コンパイルは制作者でないとできないものも多いですし、制作経験が浅いなら難しいです。

ちなみに、どうしてもやりたいならインターネット逆コンパイルで検索すればある程度情報が集まるはずです。
ただし、行う場合は必ず著作者の許可を得てください。

Q/パソコンにインストールしたアプリケーションのDLLファイルですが、これは何らかの言語で書かれたプログラムですか?

A/そうです。プログラミング言語でソースは書かれています。既に解答があるとおりそれをコンパイル(機械語翻訳)します。

Q/それを開いたり、編集したりすることは技術的に可能ですか。
A/理論的には可能ですよ。逆コンパイル作業をすることで、だいたいのソースを抽出することができます。ただし、プログラミングをしたこともない方が、逆コンパイルして編集するのははっきり...続きを読む

QEXCELファイルのカレントフォルダを取得するには?

EXCELファイルのカレントフォルダを取得するには?

C:\経理\予算.xls

D:\2005年度\予算.xls

EXCEL97ファイルがあります。

VBAで
  カレントフォルダ名
(C:\経理\,D:\2005年度\)
を取得する事は可能でしょうか?

CURDIRでは上手い方法が見つかりませんでした。

Aベストアンサー

こんばんは。
Excel97 でも、同じですね。以下で試してみてください。

Sub test()
'このブックのパス
a = ThisWorkbook.Path
'アクティブブックのパス
b = ActiveWorkbook.Path
'Excelで設定されたデフォルトパス
c = Application.DefaultFilePath
'カレントディレクトリ
d = CurDir
MsgBox "このブックのパス   : " & a & Chr(13) & _
   "アクティブブックのパス: " & b & Chr(13) & _
   "デフォルトパス    : " & c & Chr(13) & _
   "カレントディレクトリ : " & d & Chr(13)
End Sub

Qpingでポートの指定

pingでIPアドレスを指定して、通信できるかどうかというのは
よく使いますが、pingでポートを指定して応答するかどうかは調べられるのでしょうか?

よろしくお願いします

Aベストアンサー

pingを含むICMPというプロトコルは、OSIの7レイヤで言うところのL2(同一セグメント内通信)とL3(IPルーティングされた通信)の両方にまたがる、ちょっと珍しいプロトコルです。

IPアドレスは指定できますが、別サブネットに属するIPアドレスに到達できればL3通信、できなければゲートウェイと呼ばれる同一サブネットに属する中継装置からの回答を得るという点でL2(MAC通信ではなく、同一セグメント内通信という意味)通信です。

ポート番号はL4で使用されるアドレスですから、L4機能の疎通確認はping(を含むICMP)ではできません。

FTPの疎通確認であれば、クライアントからサーバに対するTCP/21通信(FTP-CMD)が可能であること(サーバからクライアントへのTCP/21からの応答を含む)+サーバからクライアントに対するTCP/20通信(FTP-DATA)が可能であること(クライアントからサーバへのTCP/21からの応答を含む)が必要でしょう。

監視ソフトによるものであれば、
・クライアントからサーバへのログイン(TCP/21)
・クライアントからサーバへのlsの結果(TCP/20)
で確認すればよいでしょう。

pingを含むICMPというプロトコルは、OSIの7レイヤで言うところのL2(同一セグメント内通信)とL3(IPルーティングされた通信)の両方にまたがる、ちょっと珍しいプロトコルです。

IPアドレスは指定できますが、別サブネットに属するIPアドレスに到達できればL3通信、できなければゲートウェイと呼ばれる同一サブネットに属する中継装置からの回答を得るという点でL2(MAC通信ではなく、同一セグメント内通信という意味)通信です。

ポート番号はL4で使用されるアドレスですから、L4機能の疎通確認はping(を含む...続きを読む

Q別のシートから値を取得するとき

Worksheets("シート名").Activate
上記のを行ってから別シートの値を取得するのですが、
この処理を行うと指定したシートへ強制的にとんでしまいます。。。

※イメージ
For ~ To ~
  Worksheets("シートA").Activate
  シートAの値取得
       :
  Worksheets("シートB").Activate
  シートBの値取得
Next

このイメージ処理を行うとものすごい勢いで画面がチカチカします。。。
シートを変えずに他のシートから値を取得する方法はないのでしょうか。
教えてください!

Aベストアンサー

Worksheets("シートA").Range("A1")

みたいな感じでできませんか?

QEXCEL VBAマクロ作成で、他のEXCELからデータを取り込みたい

メインプログラム(EXCEL VBA)より、
他のフォルダーにあるEXCELの項目の内容を取り込みたいです。
たとえば他のフォルダーのEXCELのRange("A2:A3").ValueをメインプログラムのRange("C2:C3").Valueにセットしたい時です。

・コマンドボタン押したら、どこのEXCELから取り込むかのポップアップ(?)は、表示はできてます。
・作業者が選んだパスとブックもMsgBoxで表示できてるので、もらう相手の場所も取得できてます。

・となると次はOPEN,INPUTですか?
テキストデータの取り込みですと、Inputでそのバッファを定義してるのですが、なんか違うような。。。

よろしくお願いします!

Aベストアンサー

私がやる方法です。

Dim writeSheet As Worksheet ' 自分自身の書き出し先シート
Set writeSheet = ThisWorkbook.Worksheets(1) ' Sheet1 を参照

Dim readBook As Workbook ' 相手ブック
Set readBook = Workbooks.Open(filename) ' 相手ブックを開いて参照
Dim readSheet As WorkSheet ' 相手シート
Set readSheet = readBook.Worksheets("sheetName") ' 相手シートを参照
' または Set readSheet = readBook.Worksheets(sheetIndex)

' 例えば
writeSheet.Cells(1, 1).Value = readSheet.Cells(2, 2).Value ' 相手シートの B2 の値を自分自身の A1 に書き込む

readBook.Close False ' 相手ブックを閉じる
Set readSheet = Nothing
Set readBook = Nothing

私がやる方法です。

Dim writeSheet As Worksheet ' 自分自身の書き出し先シート
Set writeSheet = ThisWorkbook.Worksheets(1) ' Sheet1 を参照

Dim readBook As Workbook ' 相手ブック
Set readBook = Workbooks.Open(filename) ' 相手ブックを開いて参照
Dim readSheet As WorkSheet ' 相手シート
Set readSheet = readBook.Worksheets("sheetName") ' 相手シートを参照
' または Set readSheet = readBook.Worksheets(sheetIndex)

' 例えば
writeSheet.Cells(1, 1).Value = readSheet.Ce...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング