web-dev-qa-db-ja.com

主要なソフトウェアはどのように保護されていますか?

私は新しいソフトウェア開発者であり、自分のソフトウェアを販売したいと考えています。私は最近、C++コードから、スクリプトまたはシステムコマンドに関連するコードの部分をユーザーに表示することを止めることができないことに気付きました。

C++/Javaで記述されたソフトウェア(CD-ROMで配布またはダウンロードで入手可能)がリバースエンジニアリング、コードがメモリにある場合のスキャナー、および(システムコマンドとして)パーツの直接コピーから保護される方法について、コメントしていただけませんか。

ソフトウェアの製造を始めたばかりの小さなソフトウェア会社は、製品を技術的な観点から保護するために何をすべきですか(法的手数料を支払うことができないはずです...)?

26
user3054451

私は長年と20年前にソフトウェアを作成してきましたが、私はあなたが説明している線に沿って考え、私のソフトウェアを保護する方法を試し、試していました。

質問への回答:ソフトウェア保護は、データ保護と同様に暗号化と難読化によって行われます。あなたが説明したように、多くのコードは保護するのが非常に難しく、通常リバースエンジニアリングが比較的簡単です。

(逆コンパイルから)コードを保護する1つの方法は、コードのコンパイルされたバージョンを決してリリースせず、常にサーバーから実行し、コンシューマーがブラウザーなどのクライアントを使用することです。ただし、リバースエンジニアリングからは保護されません。

私の意見では、防御は、コードを保護しようとするサイクル(時間/お金)を無駄にするのではなく、継続的に革新し、時間の経過とともに製品により多くの価値を追加することです。競合他社があなたのコードを手に入れ、(たとえば)1か月かけてそれを逆コンパイルして競合製品をリリースした場合、その時点で次の機能または次の製品で一歩先を行く必要があります。

すべてを秘密にして競争を阻止するために時間と労力を費やして、チームが革新的で競争に勝ち抜くことを奨励することで、より良い時間を費やすことができます。

95
Guy

私の意見では、方法を尋ねる前に、それが必要か、価値があるかどうかを尋ねるべきです。

多くの場合、そうではないと思います。

人々は(当然のことながら)他の人々が自分のcodezを盗むことに非常に偏執的です。しかし、この恐怖は合理的でしょうか?私は通常そうではないと思います。

あなたのアプリは本当に素晴らしいので、誰かがそれをリバースエンジニアリングする手間をかけますか? (申し訳ありませんが、おそらくそうではありません-あなたが言ったように、あなたはnew開発者です。あなたがそうでなくても...そこには非常に才能のある開発者がたくさんいます)

(使用可能で完全なソースコードを取得するまでの)リバースエンジニアリングは、競合製品を作成するよりもはるかに簡単でしょうか。 (おそらくそうではない)

そのようなプログラムはどの程度保守可能だと思いますか? (おそらくそれほどではない)

ぼったくりのアーティストからの保護について心配する必要がある前に心配するべき多くの、多くの事柄があります。何よりもまず、実行可能で魅力的な製品を市場に投入することです。

完全を期すために、特定の種類のソフトウェア、または多くの一般的なソフトウェアの特定の部分を保護しようとするのには明らかに良い理由があることを付け加えておきますが、一般的に、コードを保護しようとすることは、多くの場合、時間を無駄に費やした方がよいと思います製品をより良くすることについて。

42
fzwo

あなたのソフトウェアが内部でかなり悪質なものでない限り、私はあなたがそれを書いたのと同じくらいの時間であなたのプログラムの振る舞いをどんな有能なプログラマーも複製できると確信しています!

したがって、コードを秘密にしておくことに多くの労力を費やすことは、通常、時間と労力を無駄にしているだけです。

いくつかのアルゴリズムは秘密にしておく必要があります。たとえば、Googleのページランクアルゴリズムが役立つのは、詐欺師がごみのページを検索の上部に宣伝する方法を知らない場合や、競合他社が操作できる自動取引システムの場合のみです。しかし、この状況はかなりまれです。

SAPやOracleのような巨大なソフトウェアは、誰もが自分の仕事を正確に知っているという事実に基づいて、多くのパッケージを販売しています。マーケティングにおける「GAAPコンプライアンス」または「Embodiesベストビジネスプラクティス」が語られます。

しかし、心を失わないでください。テストはプログラミングの努力の少なくとも50%であり、おそらく価値の80%を追加します。適切な一連のテストをリバースエンジニアリングすることはできません。

10
James Anderson

ソフトウェアがクライアントマシンにある場合、避けられないのは遅延させることだけです。

難読化と暗号化は、逆アセンブルのタスクを難しくするだけです。もしあなたがその道を進んでいるなら、おそらく彼らが「わかりました、これを台無しにしてください、それはより少ない時間しかかからないので最初から実装します」と決定するであろう点に到達したいと思うでしょう。しかし、実際にはその点に到達することは(可能な場合)非常に困難です...他の人が指摘したように、ほとんどの市長企業はその点に到達していません。

一方、攻撃者は代替製品を作成したくないのかもしれません。 (彼らが望んでいたのがあなたと競争することだったとしたら、それは、 競争に先んじて心配することをやめることです 。)

実際には、実際の武器競争は、ソフトウェアの改造と改造を防止する技術にあります。これは、ソフトウェアに制限を追加して、不要なコピーからの保護を追加する場合に発生します。それを行うと、突然、あなたはたくさんの人々があなたの製品を変更して喜んでそれらの制限を払わずに取り除くことになります。これは、ソフトウェアを複製するサードパーティよりもさらに一般的であり、ゲーム(「CDなし」パッチなど)からオペレーティングシステムの不正なアクティベーション(coughWindowscough)、ウイルス対策ソフトウェア、その他。

言われたように、これは軍拡競争です。あなたは言う:Anti-A、そして彼らはA + 1を発明し、あなたはAnti-A + Infinityを言い、彼らはBを言います。これは、もぐらたたきのゲームのようなものです。疲れた。あなたはそれをテトリスのゲームと考えることもできます、あなたは穴のない完璧な壁を構築しようとしています...しかし、私たちは皆、テトリスのゲーム(少なくとも元のテトリス)を完了する方法があることを知っています:あなた失う。


したがって、彼らはあなたのソフトウェアを変更したいので、私たちが「クラック」と呼ぶメイクパッチまたはパッチャーソフトウェアを作ります。

あなたが亀裂を作り始めると、物事は恐ろしく見えるかもしれません。ウイルス対策企業がプログラムの偽のバージョンをデータベースに追加することはよくあることです。対策として、これらのソフトウェアを配布する人がウイルス対策を無効にすることを提案します...結果:ウイルス対策を無効にしてソフトウェアを実行している多くの人々。彼らが実際の悪意のあるソフトウェアをそこに入れる機会がいつ得られるかは決してわかりません...

そして、はい、それはあなたに影響を与えます。それはあなたのためのより少ない販売を意味します。一方ではひびが使用されているため、他方ではひびが画像を損傷するためです。


このすべての問題はクライアントでコードを実行することから発生するため、一般的なアプローチはサーバーを介してコピーのアクティブ化を推進することです。しかし、クライアントはそれがアクティブ化されているかどうかを覚えておく必要があります...

攻撃者の観点から見ると、ほとんどの場合、「if」ブランチのように見えます。

   If (Software is Activated) do this Else do that.

アプリケーションのロックを解除するために彼らがしなければならないのは、検証を無効にするコードを注入することだけです。したがって、ファイルのハッシュをテストして、それらがオリジナルであるかどうかを確認するようなものは機能しません。

もちろん、これは軽減できます。 Hash-And-Decrypt と、実際に攻撃者に頭痛を与える可能性のある同様の手法を確認してください。


それで...¿あなたは決定的な解決策を望みますか? 100100%安全なもの?

2つのオプションがあります。

  1. ソフトウェアをクライアントのマシンで実行しないでください。自分のサーバーでのみ実行します。

  2. ソフトウェアを無料のオープンソースとして提供します。適切な法的ライセンスを追加すると、他のソフトウェアがコピーされていることを簡単に示すことができます。次のような何かからお金を稼ぐ:

    2.1。インストールとサポートの販売。

    2.2。追加の製品。

    2.3。リモート「クラウド」 実行 コンピューティングサービス。

すべてハードウェアとクラウドを指しています。すべての市長企業が「クラウドに移行」しているのは珍しいことではありません。

3
Theraot

この質問は、クライアントが誰であるかに大きく依存します。

企業間取引を行う場合、競合他社がコンパイル済みコードを取得することさえ防ぐのはかなり簡単なはずです。このような状況に対処する最も簡単な方法は、強力な契約上の表現です。 IBM Cognos(SAPのような主要なビジネスインテリジェンス製品)では、ライセンスキーは使用されません。彼らはコード難読化のようなことをしますが、彼らは主に製品をレイヤーで保護します。

これはビジネスから個人のタイプの状況では明らかに困難です。おそらく、ソフトウェアにアクセスできるユーザーを制御することはできません。他のポスターはこれに関していくつかの良い解決策を持っています。

2

何かを保護したいときはいつでも、防御したいスレッドについて考えなければなりません。

  1. 守りたい秘密はありますか?

  2. 個人によるソフトウェアの海賊行為から保護しますか?

  3. 競争から会社を守りたいですか?.

1.に関しては、秘密がある場合は、それを処理するソフトウェアを自分のサーバーに投稿し、SaaSを実行します。

2.に関しては、すべてのソフトウェアの保護が壊れているため、保護に投資する価値はありません。

3.までのところ、危険はコードによる単純なリバースエンジニアリングではなく、誰かがあなたのアイデアを再プログラミングすることです。あなたがそれから保護したいなら、あなたは高価な道を行き、特許を買う必要があるでしょう。

0
Christian