18

これは、ある時点で私たち全員が考慮しなければならない問題です。

何年にもわたって多くのアプローチを経て、私は一般的にこの声明に同意する傾向があります。「数百人以上が使用する保護されたソフトウェアについては、ひびの入ったバージョンを見つけることができます。これまでのところ、すべての保護スキームが改ざんされる可能性があります。」 あなたの雇用主は著作権侵害対策ソフトウェアの使用を強制していますか?

さらに、私がこの主題について投稿するたびに、誰かが私に思い出させます。「まず第一に、どのような種類の保護を採用する場合でも、真に専用のクラッカーは、最終的にはすべての保護障壁を通り抜けます。」 単一の開発者のためのお金のc#コード保護のための最高の価値は何ですか

したがって、これら2つの広く真の免責事項に耐えることなく、「保護」について話しましょう。

熟練したクラッカーの時間と注意を払う可能性が低い小さなアプリの場合、保護は価値のある演習だと今でも感じています。

何をしても、クラッカーがアプリケーションにパッチを適用してIFステートメント(jmp)の結果を切り替えることができれば、世界中のすべてのパスワードとドングルが役に立たないことは明らかです。

したがって、私のアプローチは、次のような製品を使用して仮想化でコードを難読化すること でした。http ://www.oreans.com/codevirtualizer.php この製品に非常に満足しています。私の知る限り、それは打ち負かされました。PEcompactを使用して実行可能ファイルを圧縮することもできます。他の誰かがそれを使用した経験がありますか?

EXEcryptor http://www.strongbit.com/news.aspに問題があっただけ で、サイトでさえ使用するのが頭痛の種です。コンパイルされたアプリは、WMI呼び出しを行うとクラッシュします。

このアプローチにより、コードの小さなセクションを難読化で囲み、セキュリティチェックなどを保護できます。

アプリケーションはサーバーからのデータを定期的に必要とするため、ユーザーがオフラインで長期間使用しても意味がないため、オンライン認証アプローチを使用します。定義上、アプリはひびが入っていても、その時点では価値がありません。

したがって、単純な暗号化されたハンドシェイクは十分に優れています。難読化保護の範囲内で時々チェックします。ユーザーがアプリを別のマシンにインストールすると、起動時に新しいIDがアップロードされ、サーバーは古いIDを無効にして、新しい認証を返します。

また、コンパイルされたアプリのハッシュを使用し、起動時に1ビットが変更されているかどうかを確認してから、アプリ内からアプリをファイルとして(読み取りLOCKを使用して)開いて、起動後に変更されないようにします。

すべての静的文字列は.exeファイルに明確に表示されるため、エラーメッセージなどを使用して一般的なものにしようとしています。「認証に失敗しました」という文字列はどこにもありません。

メモリダンプから保護するために、単純なテキスト難読化手法(すべての文字のXORなど)を使用します。これにより、メモリ内のプレーンテキストデータを変数などと区別するのが難しくなります。

そしてもちろん、本当に機密性の高いデータにはAESがあります。テキストのカウンターモードが好きです。これにより、シーケンスが繰り返されず、空白のシーケンスのような基になるデータが表示されます。

しかし、これらすべての手法で、キーまたは初期化ベクトルをメモリからダンプできる場合、またはIFステートメントをバイパスできる場合は、すべてが無駄になります。

私は条件文ではなくswitch文を使う傾向があります。次に、実際に目的のタスクを実行する関数ではなく、基本的に行き止まりの2番目の関数を作成します。

もう1つのアイデアは、変数を追加してポインターをコーディングすることです。変数は承認の結果です(通常はゼロ)。これは、ある時点で必然的にGPFにつながります。私はこれを最後の手段として使用するのは、いくつかの下位レベルの認証が失敗した後です。そうしないと、実際のユーザーがこれに遭遇する可能性があります。次に、ソフトウェアの評判が低下します。

どのようなテクニックを使用していますか?

(これは、何かを実装することのメリットを議論するスレッドではありません。何かをすることに決めた人のために設計されています)

4

7 に答える 7

12

ソフトウェアをクラックするのに数百人のユーザーは必要ありません。シェアウェアに何度もクラックが発生することに悩まされたので、実験として、Magic Textbox(テキストボックスを含むフォーム)というプログラムを作成し、シェアウェアサイトにリリースしました(独自のPADファイルとすべてが含まれていました)。 )。1日後、MagicTextboxのクラックバージョンが利用可能になりました。

この経験により、私は基本的なコピー防止以上のものでソフトウェアを保護しようとすることをほとんど諦めました。

于 2008-12-05T14:07:40.620 に答える
12

私はxslに同意しません。

私たちがコードを保護するのは、収益を保護したいからではありません。

代わりに、お客様が当社のソフトウェアに行っ投資を保護するために行っています。当社のソフトウェアを使用することで、市場での競争力が高まり、他の企業が料金を支払わずにアクセスできるようになると、不当な優位性が得られると考えています。

私たちは、自社開発の保護が有効なユーザーにとって可能な限り邪魔にならないように細心の注意を払っており、この目的のために、これに影響を与える可能性のある既製のソリューションを「購入」することは決して考えていません.

于 2008-12-05T12:21:13.283 に答える
9

私はここで説明したコード手法を個人的に使用しています。これらのトリックには、正当なエンドユーザーの生活をより困難にすることなく、海賊に不便を与えるという利点があります。

しかし、もっと興味深い質問は、「何を」ではなく、「なぜ」です。ソフトウェア ベンダーがこの種の演習に着手する前に、脅威モデルを構築することが非常に重要です。たとえば、低価格の B2C ゲームの脅威は、高価値の B2B アプリの脅威とはまったく異なります。

Patrick Mackenzie は、潜在的な顧客の 4 種類の分析を含む、いくつかの脅威について論じた優れたエッセイを書いています。ビジネス モデルの保護に関する選択を行う前に、独自のアプリに対してこの脅威分析を行うことをお勧めします。

于 2008-12-05T12:08:53.650 に答える
7

私は以前にハードウェア キーイング (ドングル) を実装したことがあるので、この問題に完全に精通しているわけではありません。実際、私はそれについて多くのことを考えてきました。あなたのクラッカーがやっているように、著作権法に違反する人には同意しません。あなたのソフトウェアのコピーを合法的に入手したくない人は誰でも、それなしで済ませるべきです。私自身、ソフトウェアの著作権を侵害したことはありません。そうは言っても…

ここで使われている「守る」という言葉が本当に、本当に嫌いです。あなたが守ろうとしているのは、あなたのコントロールだけです。ソフトウェアを保護していません。ユーザーと同様に、ソフトウェアはどちらの方法でも問題ありません。

人々があなたのソフトウェアをコピーしたり共有したりできないようにすることが、これほど不浄な PITA である理由は、そのような活動を防止することが不自然だからです。コンピュータの全体的な概念はデータのコピーを中心に展開しており、有用なものを共有したいと思うのは単純な人間の本性です。あなたが本当に主張すれば、これらの事実と戦うことができますが、それは生涯にわたる戦いになるでしょう. 神は人間を違う形で作っているわけではありませんし、コピーできないコンピューターを買っているわけでもありません。おそらく、常にコンピュータと戦うよりも、コンピュータや人々と協力する方法を見つけたほうがよいのではないでしょうか?

私は、プロのソフトウェア開発者の大部分と同様に、ユーザーに「販売」するための人為的な希少性を備えた「ソフトウェア製品」を持つためではなく、ビジネスを遂行できるように開発されたソフトウェアを必要とする会社にフルタイムで雇用されています。私が一般的に有用なもの (ここでは「競争上の優位性」とは見なされません) を書いた場合、それをフリー ソフトウェアとしてリリースできます。「保護」は必要ありません。

于 2008-12-05T15:08:06.237 に答える
4

いくつかのリンクから:

私が説明しようとした概念は、私が「亀裂の広がり」と呼んでいるものです。アプリケーションにクラック (または keygen、海賊版シリアルなど) が存在するかどうかは問題ではありません。重要なのは、何人の人がクラックにアクセスできるかです。

シリアル番号を確認する場所/時期: 起動時に一度確認します。多くの人が「あらゆる場所にチェックを入れてください」と言います。これは、誰かがチェックを外してクラックするのを難しくするためです。クラッカーに特に嫌われたい場合は、インライン コードを使用してあらゆる場所をチェックインし (つまり、すべてを SerialNumberVerifier.class に外部化しないでください)、可能であればマルチスレッド化して、失敗したときに認識しにくくします。 、 それも。しかし、これはクラックを作るのを難しくするだけであり、不可能ではありません。あなたの目標は一般的にクラッカーを倒すことではないことを覚えておいてください. クラッカーを倒しても、かなりの金額にはなりません。ほとんどの場合、カジュアル ユーザーを無効にするだけでよく、カジュアル ユーザーはデバッガーにアクセスできず、デバッガーの使い方も知りません。

自宅に電話する場合は、シリアル番号を自宅に電話してブール値などを出力として受け入れるのではなく、ユーザー情報を使用して自宅に電話し、サーバーのスクリプトの出力としてシリアル番号を受け入れる必要があります。つまり、鍵の検証ではなく、鍵の注入を行う必要があります。キーの検証は、最終的にはアプリケーション内で行う必要があります。そのため、公開キー暗号化が最適な方法です。その理由は、インターネット接続も敵の手中にあるためです:)ソフトウェアがインターネットからブール値を読み取ることを期待している場合、ホストファイルの変更は一度だけ、どこでも壊れるエクスプロイトから離れています。

「興味深い」または「挑戦的な」保護を作成しないでください。多くのクラッカーは、知的な挑戦のためだけにクラックします。保護をクラックしにくく、できるだけ退屈なものにします。

パッチする場所を探してバイトパターンを探すクラックがいくつかあります。それらは通常、再コンパイルでは無効になりませんが、.EXE が (ASProtect、Armadillo などによって) パックされている場合、この種のクラックはまず .EXE をアンパックする必要があります。ASProtect などの優れたパッカーを使用すると、クラッカーはSoftICE などのアセンブリ レベルのデバッガーを使用して手動で EXE を解凍することはできますが、(後でバイト パッチを適用するために) .EXE を自動的に解凍するツールを作成することはできません。

于 2008-12-06T16:29:00.583 に答える
3

xsl、これは非常に狭い視点であり、多くの前提条件が組み込まれています。

あなたの管理下にあるサーバーから何かを配信することに依存しているアプリは、有効なアカウントを持っている私たちを把握するのにかなり良い仕事をすることができるはずです!

私はまた、定期的な更新(異なる場所にコードが含まれる新しくコンパイルされたアプリを意味する)によって、ひびの入ったバージョンがすぐに時代遅れになると信じています。アプリがサーバーと通信する場合、メインの実行可能ファイルを毎週置き換えるためのセカンダリプロセスを起動するのは簡単です。

そうです、ひび割れのないものは何もありませんが、いくつかの巧妙な本質的な設計では、それは論点になります。重要な唯一の要因は、クラッカーがそれに費やす時間と、毎週または毎日の努力の成果を見つけるために潜在的な顧客がどれだけの努力を払うかです!

あなたのアプリが有用で価値のある機能を提供するなら、彼らはそれに対して公正な価格を喜んで支払うだろうと私は思う。そうでなければ、競争力のある製品が市場に参入し、あなたの問題は解決しました。

于 2008-12-06T15:41:50.163 に答える
3

私は過去に.NETReactorを使用しましたが、良い結果が得られました-http ://www.eziriz.com/

この製品について私が気に入ったのは、かなり優れた保護を行うためにコードを難読化する必要がなかったことです。

于 2008-12-05T14:23:17.170 に答える