非常に一般的な意味では、それは不可能です。顧客のコンピューターに配置されるものを作成すると、最終的には、コードを解読してサービスの呼び出し方法を理解できる誰かに出くわすことになります。あなたはそれを非常識なレベルに難読化するかもしれませんが、それでもそれはプロセッサによって実行可能でなければならないので、プロセッサはそれを理解しなければなりません。もしそうなら、アセンブリを知っている人なら誰でもそれを理解できる可能性があります。重要でないゴミからコードをクリーンアップするのに非常に時間がかかるように、それを賢く難読化することができますが、それでも、ある時点で誰かがそれを読むでしょう。
一般的な防御策の1つは、*実際にサービスを使用しようとしている人を検出しようとすることです。これが、すべての「ポータル」で「登録」が必要な理由です。このように、アプリケーションIDは疎外され、ログイン、パスワード、PGPキーなどを提供するのはユーザーであり、実際にサービスを実行できるかどうかがチェックおよび検証されます。
また、OS /フレームワークレイヤーでは、顧客に「ライセンス」を選択的に提供する方法がいくつかあります。アプリケーションでは、ライセンスのキー/ハッシュを使用してサービスで認証できます。これにより、ユーザーからパスワードなどを覚える負担が部分的になくなるか、追加の認証要素が提供されるか、アプリの実行を許可するかどうかを許可するyes-noフラグになります。それでも、コードが読み取られるのを防ぐことはできません。ライセンスは、ソフトウェアコピーが合法であるかどうか、およびその特定のユーザー/コンピューターに属しているかどうかを確認するのに役立ちます。
'reflectoring'(またはdotpeeking、ildasming、または...)に対してのみ選択的に行動することができます。これらのツールは本当に逆コンパイルを容易にします(元のリフレクターは現在有料のソフトウェアですが)。したがって、最も単純な形式は、逆コンパイルを不可能または困難にする難読化ツールを使用することです。これにより、潜在的なコードリーダーの一部が削減され、スクリプトキディがなくなったと見なすことができます。難読化ツールは無視して、サービスコネクタをネイティブコード(C ++ /cliではなくC++)で記述できます。それはコードを完全に反射不可能で不穏なものにし、それは別の大部分の人々を遮断しますが、まだ残っている人もいます(私と他の何千人もいますが、それは数百万人よりはるかに少ないです)。
これは明確な答えにはなりませんが、ある程度の「ある程度の硬さ」しか得られないことを示したかったのですが、完全に安全に読めるようにすることはできません。これが、その方法でサービスにアクセスできるようにすることに集中する必要がある理由です。路上で見知らぬ人にコードを見せても、セキュリティが損なわれることはありません。
ここで、問題に気を配りましょう。重要なのは、アプリがいくつかの秘密のアルゴリズムを使用しているという事実ではなく、パスワードをハードコーディングしているという事実にあるようです。このアプローチでは、アプリを読み取る必要はありません。まったくコード。アプリがソケットを介して送信するデータをリッスンする必要があります。
もう1つの問題は、全員が同じキーフレーズを使用していることです。
ハードコーディングされたマジックストリングは、ある種の検証である可能性がありますが、認証ではありません。アプリを登録なしにしたい場合は、最初の実行時に登録をサイレントで自動にしますか?もちろん、問題を解決するだけです。誰でもコードを読んで自動登録の方法を学ぶことができ、それからクローンを作成できます。しかし、繰り返しになりますが、私が言ったように、誰が反対側にいるのかはわかりません。それはあなたのアプリですか、それとも理想的なクローンですか?それとも、独自のハッキングされたビットライブラリを使用して接続するクローンですか?それがアヒルのように見え、アヒルのように鳴くなら、それはアヒルです。