簡単な答え:はい
長い答え:
バイナリを見ると、リンクされているライブラリの名前を見つけることができます。TextPadでcmd.exeを開くと、16進オフセット0x270で次のものが簡単に見つかります:msvcrt.dll、KERNEL32.dll、NTDLL.DLL、USER32。 dllなど。msvcrtはMicrosoftの「C」ランタイムサポート関数です。KERNEL32、NTDLL、およびUSER32.dllは、クロスプラットフォーム開発環境が2つをどれだけうまく分離しているかに応じて、ターゲットプラットフォームまたはそれが構築されたプラットフォームのいずれかを通知するOS固有のライブラリです。
これらの手がかりは別として、ほとんどのc / c ++コンパイラは、関数の名前をバイナリに挿入する必要があります。テーブルに格納されているすべての関数(またはエントリポイント)のリストがあります。C ++は、関数名をマングルして引数とその型をエンコードし、オーバーロードされたメソッドをサポートします。関数名を難読化することは可能ですが、それらはまだ存在します。関数のシグニチャには、システムまたはプログラムで使用される内部呼び出しをトレースするために使用できる引数の数とタイプが含まれます。オフセット0x4190には「SetThreadUILanguage」があり、これを検索して開発環境について多くのことを知ることができます。オフセット0x1ED8Aにエントリポイントテーブルが見つかりました。printf、exit、scanfなどの名前を簡単に確認できました。__p__fmode、__ p__commode、および__initenvとともに
x86プロセッサの実行可能ファイルには、プログラムに含まれていた静的テキストを含むデータセグメントが含まれます。cmd.exe(オフセット0x42C8)に戻ると、「Software.Policies.Microsoft.Windows.System」というテキストが表示されます。文字列は、おそらく国際化のために倍幅の文字を使用して格納されているため、通常必要な2倍の文字を使用します。ここでは、エラーコードまたはメッセージが主要なソースです。
オフセットでは、B1B0は「プッシュ」され、その後にmkdir、rmdir、chdir、md、rd、およびcdが続きます。読みやすくするために、印刷できない文字は省略しました。これらはすべてcmd.exeへのコマンド引数です。
他のプログラムについては、プログラムがコンパイルされたパスを見つけることができる場合があります。
したがって、はい、バイナリからソース言語を判別することは可能です。