今回の質問では、具体的な説明はしていませんでしたが、私が暗号化を行おうとしているのは、サーバークライアント方式の
通信プログラムで、通信のプロトコルだけ暗号化しようと考えています。暗号化はある程度勉強していてopensslで実装しています

簡単に説明すると
サーバ側
�A「Hello」を受信すると、そのクライアントにクライアントから受け取った公開鍵で暗号化したプロトコルを送信

クライアント側
�@サーバーに通信開始の文字列を暗号化をしないで送る「Hello」など
 同時に公開鍵も送る
�A公開鍵暗号方式の秘密鍵で暗号化したプロトコルを復号化する

通常はデータを共通鍵暗号方式で暗号化し、共通鍵暗号方式の鍵を公開鍵暗号方式で、暗号化するらしいのですが、今回はプロトコルのサイズが小さいので
公開鍵暗号方式だけで暗号化しようと考えています

今回質問した経緯は、上記の勉強している過程で、通信の暗号化は場合によっては無意味になると思ったので、質問しました
※例えばリバースエンジニアリングやP2Pのプログラムなど(P2Pはサーバがない為、確実に安全な通信は不可能ではないかと思ってます)

> 暗号化、というのはたとえばA と B が暗号通信しているときに、第三者が通信中のログを除いて解読することを防ぐことですよね。
> プログラムに鍵がうめこんであり、そのプログラムが広く入手可能である場合には、バイナリハックして鍵をとりだすことで、
> 暗号化は無意味になりますね。
そうですよね。
ただ全く暗号化していないよりは安全性はあると思います
(一般の素人にはバイナリハックはできないので)
>
> でも、 AとBが、通信の都度に鍵を変えて通信すれば、(第三者がいくらプログラムを解析しても)鍵は通信の都度つくられて AB 以外の第三者には
> わかりようがないですから、暗号通信は意味があることですよね。
この方法だと、バイナリハックしても暗号通信は意味があると思います。

だた、気になる点があってVCなどでデバッグしているときにメモリの内容を見ることができますが
実行プログラムに、VCのデバッグ機能のようなものを実行プログラムに埋め込むツールがあれば
暗号化したプロトコルも復号化することができるのではと思い質問しました