実甚的な䟋を䜿甚しおサブスクリプション゜フトりェアのラむセンスを取埗するずきの非察称暗号化

それは、デスクトッププログラムの保護がどのように配眮されるか、およびラむセンスずキヌアクティベヌションの兞型的なシステムに぀いおです。 アクティベヌションは、ほずんどすべおの商甚゜フトりェアで䜿甚されおおり、それを構築する原理は非垞に興味深いので、この蚘事を曞くこずにしたした。



蚘事で読む

蚘事は玔粋に実甚的です、なぜなら スタヌトアップでも同じアむデアを䜿甚しおいたす-RentSoftプラットフォヌム 前の蚘事で説明したした。 実際、私は「フヌドの䞋」にあるものに぀いお説明し、か぀お螏んだ「熊手」に぀いおも報告したす。 蚘事の終わり近くに、実甚的なデモンストレヌションがありたす-私たちのプラットフォヌムず、私たちのパヌトナヌであるVMProtect EXEファむルのプロテクタヌずの盞互䜜甚メカニズムの実䟋です。



それでは始めたしょう。



サブスクリプションプログラムがラむセンスサヌバヌず連携する方法



なぜなら 高䟡な「ワンタむム」キヌの埓来の販売の代わりに、商甚゜フトりェアを䜿甚するために毎月のマむクロ蚘録のアむデアを掚進しおいたす。プログラムが定期的にラむセンスサヌバヌず察話しお「トリック」されないようにする方法に関心がありたす

サブスクリプションずは、毎月のサブスクリプション料金でプログラムを実行する機胜です。 支払いが受領されない堎合、プログラムはブロックされたす。逆に、お金が到着した堎合、プログラムは機胜し続けたす。
圓然のこずながら、補品はい぀でも起動できるかどうかアカりントの資金䞍足のためにサブスクリプションがブロックされたかどうかを決定する必芁がありたす。 これを行うために、圌はむンタヌネットアクセスず特別なラむセンスサヌバヌぞの定期的な呌び出したずえば、5日ごずに1回を䜿甚したす 。



プログラムの実行が蚱可されおいるかどうかを刀断するには、信頌性の䜎い方法が1぀ありたす。 圌女はラむセンスサヌバヌに尋ねるこずがありたす。「ナヌザヌが私に入力したキヌは次のずおりです。 圌ず䞀緒に仕事できたすか」 ラむセンスサヌバヌは、「はい、できたす」たたは「いいえ、サブスクリプションはブロックされおいたす」ず答えたす。 もちろん、この方法は、攻撃者がサヌバヌの応答を簡単に停るこずができるずいう点で悪いです。さらに、プログラムは起動するたびにむンタヌネットにアクセスする必芁がありたす攻撃者がこの堎所を怜出しない限り、「仕事ができる」ステヌタスを簡単に維持できないため



セキュリティを確保するために、ラむセンスサヌバヌが「はい/いいえ」の回答ではなく、短期同じ5日間の䞀時的な就劎蚱可など、倧量の情報を提䟛する堎合、別のスキヌムが䜿甚されたす。この量子に。



しかし、スキヌム党䜓を理解するために、「氞続的な」キヌず非察称暗号化のメカニズムを操䜜する埓来の方法に少し觊れおみたしょう。



キヌアクティベヌションずは䜕ですか



埓来、電子的にプログラムを賌入するず、ナヌザヌには特別に生成されたキヌたたはラむセンス、たたはシリアル番号-誰が䜕ず呌ぶか​​が送信されたす。 次に、ナヌザヌはこのキヌを起動された補品に入力し、最終的にそれをアクティブにしたす動䜜させたす。



キヌを受け入れたプログラムは、キヌが信頌できるずどのように刀断したすか これを行うには、䞻に2぀の方法がありたす。

  1. キヌがプログラムで認識されおいる特別なアルゎリズムによっお生成されたこずを確認し、生成されおいない堎合は䜜業をブロックできたす。 これは、普遍的なむンタヌネット化がただなかったずきに、圌らが叀代に行ったこずです。 圓然、この堎合、キヌは盗たれ、その埌別のコンピュヌタヌで䜿甚される可胜性があるため、この方法は信頌できたせん。
  2. プログラムは開発者に「フィヌドバック」を有効にするように䟝頌する堎合がありたす。ナヌザヌは開発者にキヌず自分に関する远加情報を通知し、開発者はこの情報に基づいおプログラムの動䜜を蚱可するかどうか 有効にするかどうかを理解したす。
2番目の方法がキヌの盗難からより適切に保護されおいるこずは明らかです。結局のずころ、開発者はアクティベヌションの回数を制埡できたす。 この堎合の「フィヌドバック」の存圚は必須です。ナヌザヌは䜕らかの方法で開発者に自分のキヌやその他の情報を知らせる必芁があり、開発者はアクティベヌション蚱可を転送する必芁がありたす。 以前は、むンタヌネットがただそれほど広く普及しおいなかったため、すべおが電話で行われおいたした 。ナヌザヌがサポヌトに電話し 、キヌず、たずえばコンピュヌタヌの機噚の識別子を口述したした。 代わりに、圌はアクティベヌションコヌド -キヌずずもにプログラムに導入され、それをアクティベヌトする特定の文字シヌケンスを通知されたした。



この䟋では、機噚識別子は「自分に関する远加情報」ずしお䜿甚されおいるこずに泚意しおください。これは、ナヌザヌのマシンを倚かれ少なかれ䞀意に識別するハッシュコヌドです。 キヌを盗む人は異なるハッシュコヌドを持っおいるので、サポヌトチヌムに電話しおも䜕も達成されたせん-圌らは再アクティブ化の詊みがなされおいるこずを理解したす。



むンタヌネットアクティベヌション



すべおの家庭でのむンタヌネットの出珟により、電話の必芁性はなくなりたした。プログラム自䜓は、いわゆる開発者ラむセンスサヌバヌに「呌び出し」、キヌず機噚コヌドを「指瀺」し、その代わりに、アクティベヌションコヌドで「通知」され、それをアクティブ化したす。 このスキヌムによるず、プログラムの倧郚分は珟圚動䜜しおおり、非垞に信頌性が高いです。



䞀般的に、次の゚ンティティを圢成しおいたす。

  1. キヌ賌入時にナヌザヌに提䟛されるもの。
  2. 機噚の識別子䞀意性の床合いが異なるナヌザヌのコンピュヌタヌを特城付ける特定の数字コンピュヌタヌによっお異なりたす。
  3. アクティベヌションコヌドナヌザヌが特定のキヌず特定の機噚識別子を手元に持っおいる堎合に起動するプログラムの゚ンコヌドされた「蚱可」。
  4. ラむセンスサヌバヌ開発者によっお制埡され、「キヌ」+「機噚識別子」のペアを䜿甚しおアクティベヌションコヌドをナヌザヌに返すこずができるむンタヌネット䞊の特定のサヌバヌ。
キヌがアクティベヌションコヌドずどのように異なるかを理解するこずは非垞に重芁です。 これらは機噚識別子を介しお盞互接続されおおり、異なるマシンで同じキヌを同時に䜿甚できないこずを保蚌したす。



公開鍵ず秘密鍵非察称デゞタル眲名



倀activationCode = md5(key + hardwareID)



蚈算できるようです。この堎合、ラむセンスサヌバヌもそれを生成でき、クラむアントのプログラムはその正確性をチェックしたす。



ただし、重倧な危険がありたす。ラむセンスサヌバヌがこの倀を蚈算できるため、攻撃者も蚈算するためです。 そのため、攻撃者は独自のラむセンスサヌバヌを䜜成し、それを元のラむセンスサヌバヌに「眮き換え」お、プログラムを無制限に制埡できたす。 どうする



耇雑な各タスクには、単玔で論理的で理解しやすい1぀の...誀った゜リュヌションがあるず蚀われおいたす。 この堎合、そのような間違った決定は匏になりたす



activationCode = md5(key + hardwareID + salt)







ここで、 salt



は、開発者ラむセンスサヌバヌのみが知っおいる「秘密の」文字列です。
䞀般に、倀S = md5(X + salt)



は「 saltを䜿甚しお X



デヌタにデゞタル眲名する」ず呌ばれたす。
S



のデゞタル眲名を怜蚌するずいうこずは、すでに反察偎でmd5(X + salt)



再床蚈算し、結果をS



ず比范するこずを意味したす。䞀臎する堎合、眲名は正しく、そうでない堎合は停です。


残念ながら、クラむアントのプログラムはmd5(key + hardwareID + salt)



の倀も蚈算できる必芁があるため、そのような「゜ルト」トリックは機胜したせん。぀たり、 salt



最初に「瞫い付ける」必芁がありたす。 もちろん、攻撃者は補品を分解しおその䞭のsalt



を芋぀け、停のラむセンスサヌバヌを敎理するこずができたす。 始めたずころに戻りたした。



しかし、解決策があり、それはDSAず呌ばれたす。 倧たかに蚀えば、単䞀のsalt0



倀でactivationCode



ハッシュコヌドを取埗し、たったく異なるsalt1



倀でこのハッシュコヌドの「正確さ」を確認できる salt1



たす。 salt0



の倀は秘密にしおsalt0



必芁がありたす-ラむセンスサヌバヌにのみ保存されたすが、 salt1



攻撃者salt1



䟡倀salt1



たせん-それを知っおいるので、 salt0



を取埗しお正しいアクティベヌションコヌドを蚈算するこずはできたせん。



したがっお、ラむセンスサヌバヌはデゞタル眲名activationCode = DSA(X, salt0)



を蚈算し、倀をクラむアントプログラムに枡し、プログラムはDSA_check(activationCode, X, salt1)



アルゎリズムDSA_check(activationCode, X, salt1)



を䜿甚しおその正確性をチェックしたす。 この堎合、 salt0



は「秘密鍵」秘密鍵ず呌ばれ、 salt1



は「公開鍵」公開鍵ず呌ばれたす。 「公開」キヌは、新聞に印刷するこずさえできるため、呌び出されたす-これはセキュリティを害したせん。

同じ原理に基づいたDSAデゞタル眲名アルゎリズムずRSAデヌタ暗号化アルゎリズムの詳现は、ロシア語版りィキペディアに蚘茉されおいたす。 芁するに、RSAの原理は、いわゆる「因数分解問題」-倚数を因数分解するこずの難しさに基づいおいたす。 実際、任意の2぀の2000桁の玠数X



ずY



を䜿甚しお、4000桁の積S = X * Y



をマむクロ秒で蚈算できたす。
ただし、この補品S



を持ち、最初にX



たたはY



知らない堎合、ナニバヌスの存圚䞭に、元のX



およびY



を元の状態に戻すこずはできたせん。
定性的なレベルでは、DSAデゞタル眲名の䜜成には数字X



ずY



秘密鍵が䜿甚S



、怜蚌にS



既知のS



れるず想定できたす。


もう䞀床サブスクリプションに戻る



圓初、サブスクリプションはラむセンスサヌバヌぞのより頻繁なアクセスであり、ラむセンスサヌバヌはたすたす倚くのアクティベヌションコヌドを返したすが、叀いアクティベヌションコヌドは廃止されるず述べたした。 このような陳腐化の堎合、アクティベヌションコヌドを䜜成するアルゎリズムはより耇雑になりたす。少なくずも、有効性の開始日ず終了日はコヌド内で「瞫い付けられ」たすナヌザヌが時蚈を遅らせすぎないように開始したす。



ラむセンスサヌバヌでの「サブスクリプション」プログラムの動䜜は次のずおりです。

  1. 定期的か぀バックグラりンドで、プログラムはラむセンスサヌバヌにアクセスしお、新しいアクティベヌションコヌドを取埗しようずしたす。 機噚のキヌず識別子がサヌバヌに転送され、簡玠化されたす-
      GET / license_serverキヌ= abcdefhwid = 1234 
  2. 詊行が倱敗した堎合、䜕も起こりたせん。メッセヌゞは発行されたせん。
  3. 成功した堎合、サヌバヌによっお発行された新しいアクティベヌションコヌドは、䜕らかの氞続的なストレヌゞレゞストリなどに蚘録されたす。それでも、攻撃者にずっおは興味がありたせん。 圌は自宅でそれを䜿甚するこずはできたせんアクティベヌションコヌドは、攻撃者が異なる機噚の識別子に䟝存したす。
  4. これに関係なく、プログラムは氞続ストレヌゞから珟圚のアクティベヌションコヌドを取埗し、キヌ、ハヌドりェア識別子、および公開パラメヌタヌsalt1を䜿甚しおデゞタル眲名を怜蚌したす。 アクティベヌションコヌドが正しい堎合、プログラムは匕き続き動䜜したすおそらく、VMProtectで行われるように、仮想マシンコヌドの暗号化パラメヌタヌなど、必芁なデヌタをコヌドから同時に抜出したす。
これで、むンタヌネットが数日間利甚できなくおも、プログラムは匕き続き動䜜したす-氞久ストレヌゞから珟圚のアクティベヌションコヌドを抜出したす。 そしお、長期間むンタヌネットにアクセスできない堎合にのみ、ブロックされたす。



぀たり サブスクリプションで䜜業するずきは、アクティベヌションコヌドが定期的に芁求されたす。キヌアクティベヌションを䜿甚する「埓来の」スキヌムの堎合は、䞀床だけ芁求されたす。 これが技術的な違いです。 もちろん、ラむセンスサヌバヌは確実に動䜜し、高負荷に耐える必芁がありたす。そのため、バランスの取れた2぀のJava Nettyで蚘述されおいたす。非同期Webサヌバヌを䜜成するためのフレヌムワヌクです。 しかし、これは別の蚘事のトピックです。



プログラムのサブスクリプションバヌゞョンを䜜成する䟋



䞊蚘では、サブスクリプションのステヌタスを確認する芁求を凊理するラむセンスサヌバヌの動䜜方法に぀いおの理論がありたした。 次に、 RentSoftプラットフォヌム甚のVMProtectプロテクタヌのサブスクリプションバヌゞョンを䜜成するずきに、プラクティスを少し芋お、VMProtect Softwareの開発者がこの理論をどのように実装したかを芋おみたしょう。



HelloWorldアプリケヌションずそのMAPファむルの䜜成



たず、「Hello、world」のようなプログラムを䜜成したす。これはVMProtectで保護したす。 MS Visual Studio 2010を䜿甚したす。「Win32アプリケヌション」のような新しいプロゞェクトを䜜成し、HelloWorldず呌びたす。 メむンファむルは次のようになりたす。

#include "stdafx.h"

...

ATOM MyRegisterClass  HINSTANCE hInstance 

{ ... }

...

LRESULT CALLBACK WndProc  HWND hWnd、UINTメッセヌゞ、WPARAM wParam、LPARAM lParam 

{ ... }

...
構成マネヌゞャヌでプロゞェクトのビルドモヌドをすぐにリリヌスに切り替えたす。 その埌、 MAPファむルの生成をオンにしたす 。これには、EXEファむル内のすべおの関数のアドレスが含たれるため、VMProtectが埌でそれらを芋぀けるこずができたす。 これはプロゞェクトプロパティで行われたす。ロシア語版では、これは次のずおりです。゜リュヌション゚クスプロヌラヌでプロゞェクト名を右クリックし、[構成プロパティ]-[リンカヌ]-[デバッグ]-[マッピングファむルの䜜成]を遞択したす。



F5を抌しお、プロゞェクトがコンパむルされお開始されたこずを確認したす。 リリヌス2ディレクトリにあるファむル、 HelloWorld.exe



ずHelloWorld.map



を入手したした。







RentSoftラむセンスサヌバヌの補品登録りィザヌド



プログラムのサブスクリプションバヌゞョンは、ラむセンスサヌバヌず密接に連携しお機胜したす。ラむセンスサヌバヌは、実際には、キヌの状態を確認し、プログラムが機胜するかどうかを刀断したす。 ラむセンスサヌバヌには、補品に関する情報RSA暗号化秘密キヌやその他のラむセンスパラメヌタなどが必芁であるため、補品を登録する必芁がありたす。



それは非垞に簡単です http ://rentsoft.ru/soft/add/で、オプション「VMProtect RentSoft EditionRentSoftのお客様は無料」 を遞択し、電子メヌルを入力したすちなみに確認する必芁はありたせん。補品登録。 その䞭に次のデヌタを入力したす

  • 補品名、短い詳现な説明HTMLを䜿甚できたす。
  • 補品ボックスたたはそのロゎの画像。
  • 月あたりの垌望のサブスクリプションコスト79ルヌブルなどを遞択したす。
この情報を保存するず、次のりィザヌド項目が開きたす。







ラむセンスファむルは、保護されたプログラムをラむセンスサヌバヌに登録したばかりの補品にバむンドするために必芁です。 プロゞェクトの゜ヌスコヌドを含むディレクトリに保存したす。この䟋では、 HelloWorld.cpp



暪にありたす。



VMProtectを起動しおサブスクリプションバヌゞョンを䜜成したす



次に、VMProtect RentSoft Editionを起動したすむンストヌラヌからダりンロヌドするためのリンクは、りィザヌドの次のステップで提䟛されたす。 これは、パヌトナヌのVMProtect Softwareによっお䜜成されたexeファむルプロテクタヌです。 ファむルから開く-プロゞェクトRelease/HelloWorld.exe



のEXEファむルを開き、スクリヌンショットのようにパラメヌタヌを蚭定したす最も重芁なこず-プロゞェクトラむセンスファむルぞのパスを指定したす。







次に、[保護の手順]タブに移動しお、VMProtectで保護する手順ず機胜を遞択したすこれらの手順のコヌドは、VMProtect仮想マシンコヌドに倉換され、ラむセンスサヌバヌに以前に登録された補品にリンクされたす。





私たちの堎合、2぀の関数を指定したした MyRegisterClass



ずMyRegisterClass



ハッカヌがそれらを「クラック」できないのはたさにその時です。 泚Ultra Compilation Type最も信頌性の高いを遞択し、「シリアル番号にバむンド」チェックボックスを「はい」に遞択する必芁がありたす。 仮想マシンは圓然「ネむティブ」プロセッサヌよりもゆっくりず実行されるため、パフォヌマンスにずっお重芁ではないプログラムの機胜を保護するようにしおください。 すべおの操䜜の埌、VMProtectプロゞェクトファむルを保存するこずを忘れないでください遞択したすべおのオプションが含たれおいるため、次の保護䞭に再床遞択する必芁はありたせんファむル-プロゞェクトを名前を付けお保存...

攻撃者が保護されたプログラムのVMProtect仮想マシンコヌドを解読できる堎合はどうなりたすかそれ自䜓は非垞に困難です。たずえば、コヌド仮想化テクノロゞヌを䜿甚するSkypeなど、解読された回数を芚えおいたすか。 これにより、他のプログラムにアクセスできなくなりたす。仮想マシンはアクティベヌションコヌドに含たれる情報を必芁ずし、プログラムごずに異なるためです。 したがっお、ラむセンスサヌバヌによっお発行されたアクティベヌションコヌドがないず、プログラムを機胜させるこずは物理的に䞍可胜です。 ラむセンスサヌバヌの停造も倱敗したす-公開/秘密キヌテクノロゞヌに぀いお芚えおいたすか
最埌に、プロゞェクト-コンパむルを遞択し、数秒埅ちたす。 その結果、 HelloWorld.exe



ファむルは、 HelloWorld.exe



その保護されたバヌゞョンの暪に衚瀺されたす。 このファむルは、補品の「サブスクリプション」バヌゞョンです。



䜕が起こったのか確認しおください



HelloWorld.vmp.exe



を実行するず、次のように衚瀺されたす。





぀たり プログラムは最初の起動時に「サブスクリプションコヌド」を入力するようナヌザヌに芁求したす。「サブスクリプションコヌド」は、補品を自分に接続したずきにRentSoftのりィンドりの1぀で受け取りたした。 圓然、RentSoftラむセンスサヌバヌはすべおのアクティブなサブスクリプションコヌドを認識しおいるため、プログラムからの芁求を凊理し、ナヌザヌが入力したコヌドを確認できたす。



次に、サブスクリプションコヌドを入力する必芁がありたす。 確認のためにどこで入手できたすか ここでは、リヌダヌを補品りィンドりに送信しお、「補品を賌読する-賌読コヌドを取埗する」ず蚀うこずができたすが、簡単に行うこずができたす。 先ほど蚪問したRentSoft補品登録りィザヌドを䜿甚するず、ラむセンスサヌバヌでテストサブスクリプションを䜜成できたす。 ぀たり 必芁なのは、フォヌムの[䜜成]ボタンをクリックするだけです。





その結果、テストサブスクリプションコヌドを受け取りたす。これは、プログラムアクティベヌションりィンドりに入力する必芁がありたす。







その埌、プログラムが起動し、アカりントにお金がある限り぀たり、サブスクリプションがアクティブな間ナヌザヌに䜕も尋ねたせん。



曎新のためのアカりントにお金がないず仮定したす...



ナヌザヌがお金を䜿い果たし、サブスクリプションがブロックされるずどうなりたすか これを確認するのに1か月埅぀必芁はありたせん。テストサブスクリプションで䜜業するのず同じ圢匏を䜿甚できたす。これは、この圢匏になりたす。





テストサブスクリプションをブロックしおから、プログラムを2回再起動したす。2回目は、アカりントの資金䞍足に関するメッセヌゞでブロックされたす。 なぜ2回ですかブロックする前に補品を䜿甚する最埌の機䌚を考慮しおください。



サブスクリプションをブロックし、むンタヌネットをオフにしおからプログラムを起動するず、どうなるかを尋ねるこずができたす。 その埌、プログラムは、もちろん、それが機胜しないこずを知らず、動䜜したす...しかし、次の5日間のみ。 5日埌、プログラムは必須のむンタヌネットアクセスを必芁ずし、接続がない堎合は開始を拒吊したす。いわゆる「蚱容期間」が終了したす。 そのため、ナヌザヌは遅かれ早かれアカりントを補充する必芁がありたす。



アカりントに資金が入金されたずきの自動ロック解陀に぀いおは、[有効にする]ボタンをクリックしおプログラムを再起動するこずで、その仕組みを確認できたす。 むンタヌネットに接続しおいる堎合、プログラムはすぐに䜜業を再開したす。



結論ずしお-販売チャネルに぀いお



高い売り䞊げを䌎わない優れた防埡は、おそらく孊問的な関心事です。 RentSoftはこれを理解しおいるため、デスクトップ゜フトりェア開発者にサブスクリプションラむセンスメカニズムだけでなく、販売チャネル 400䞇人以䞊の加入者ベヌスを持぀50の倧手むンタヌネットプロバむダヌのショヌケヌスも提䟛しおいたす。 ちなみに、 前の蚘事を公​​開したずき、それらの2぀が少なかった倧芏暡なモスクワプロバむダヌNetByNetずサンクトペテルブルクInterZetが 1週間で远加されたしたリンクがストアりィンドりに぀ながる。 平均しお、2〜3人のプロバむダヌが毎週私たちに到着し、圌らは完党に独立しお私たちに接続したす。



むンタヌネットプロバむダヌを介しお毎月のサブスクリプションスキヌムに埓っお販売する䞻な利点は、加入者が既に毎月プロバむダヌにむンタヌネットの400〜500ルヌブルの支払いをもたらすこずです。 サブスクラむバヌのアカりントから盎接、゜フトりェアこの堎合はプロバむダヌの远加サヌビスのように芋えたすの支払いを盞殺するこずができたす。 したがっお、ナヌザヌがプロバむダヌのWebサむトたたは個人アカりントでプログラムを接続するず、むンタヌネットに察しお支払うのず同じ小切手で支払いたす。 ぀たり、これは非垞に効果的なチャネルです。



そのため、デスクトップ゜フトりェアを開発しおいるが、䞻に欧米向けに販売する堎合、月単䜍のサブスクリプションスキヌムに埓っおロシアで販売しようずする無料のツヌルを提䟛したす。 私たちは、他の支払いシステムず同様に、ナヌザヌがコミットしたトランザクションでコミッションを行いたすが、 補品の月額䟡栌はご自身で決定しおください。これは問題になりたせん。



今すぐ参加しよう



All Articles