0

私がやりたいことは、Python プログラムがコンピューターの知識のない人に盗まれるのを防ぐことです。私は、プログラムが海賊版になるのは避けられないことを受け入れます。私がしたいのは、平均的なユーザーからプログラムを保護することだけです。

私は2つのアイデアを思いつきました。1.) オンラインで日付と時刻を確認して、時間制限を設定します。IE ダウンロード時から 10 日。2.) ダウンロードしたコンピューターの IP または名前を確認し、そのコンピューターでのみプログラムを実行します。(友人が単にファイルを共有するのを防ぐため)。

これらの両方の問題は、ユーザーが Python をインストールする必要がないように、.py ファイルを「その場で」作成し、pytoexe などを使用して .exe にする必要があることです。

2番目の問題は、私の理解では、IPの変更とコンピューター名の取得はセキュリティ上のリスクであり、ユーザーを怖がらせる可能性があることです.

要約すると、ここに私の 2 つの質問があります。2.) exe の「オンザフライ」作成を実装する最良の方法は何ですか? (自分のコンピューターで Web サイトをホストし、php(?)/servers を学習するつもりでした。

中程度の c/c++ と基本的な html/css、Java、および python の経験があります。

お時間をいただきありがとうございます!

4

4 に答える 4

5

厄介なビジネス。コンパイル済みが暗号化されたという意味ではないことは、おそらくすでに理解しているでしょう。

ただし、あなたの上司が C コンパイルで十分だと考えている場合は、cythonを使用して Python コードを C コードにコンパイルし、次に gcc を使用して C コードをコンパイルできます。

setup.py スクリプトの作成方法については、こちらをご覧ください。

http://docs.cython.org/src/reference/compilation.html#compiling-with-distutils

--embedまた、次のオプションを使用して、結果の c コードに python を埋め込むことができます。

# will generate the target.c 
$ cython target.py --embed
于 2013-03-01T08:15:12.340 に答える
1

一意のキーを持つカスタマイズされたインストーラーを各ユーザーに提供します。実行されると、サーバーに (キーを使用して) 接続し、実際のプログラムを要求します。サーバー側では、キーが有効かどうかを確認し、有効な場合は、キーでカスタマイズされたプログラムを提供し、キーを使用済みとしてマークします。インストーラーは、ユーザーがアクセスできる場所にプログラムを保存し、「平均的なユーザー」が見ようとも思わない、コンピューターの腸の奥深くにキーを含む隠しファイルを作成します。プログラムが実行されると、最初に隠しファイルが存在するかどうか、正しいキーが含まれているかどうかがチェックされ、含まれていない場合は実行が拒否されます。

(実行可能ファイルを解凍してソースコードを読むことは、「平均的なユーザー」(「おばあちゃん」と読む)の能力を超えていると想定しているため、py2exeを使用しても問題ありません。)

于 2013-03-01T07:51:33.147 に答える
0

ここでは物事の組み合わせのようです。他の人が示唆しているようにPythonをカプセル化することは、バンドルするための良い方法です。別のStackOverflowスレッドでここで説明されているように、難読化を検討することもできます。

Pythonコードの難読化

どの参照:

http://freecode.com/projects/pyobfuscate

誰かがあなたのプログラムをダウンロードして他の場所で実行したり配布したりできないようにすることに関して、エンドユーザーにどの程度不便をかけますか?:)

他の人が上で述べたように、ユーザーに固有のIDを使用して、コンパイルおよびバンドルされたコードを生成できます。そうすれば、アプリケーションが自宅に電話をかけた場合に、使用状況を追跡できます。

エンドユーザー/顧客が次の要件を満たしている場合:

  • ログインしてサブスクリプション/アカウントのステータスを確認できるあなたのアカウント
  • プログラムを実行しているマシンからのインターネット接続

インストールプロセスに次のことを実行させることができます。

  • インストーラーは完全なプログラムではありません。マシンのプロファイルを生成します。
  • このプロファイルがバンドルされ、ハッシュが生成されます。両方ともサーバーにアップロードされます。
  • エンドユーザーがオンラインWebアカウントにサインインすると、ハッシュが表示されて入力できるようになります。
  • アプリケーションをインストールするユーザーはハッシュを送信し、ダウンロードリンクとロック解除キーを取得します。キーは、動的に生成されたダウンロードにのみ有効であり、そのマシンでのみ有効です。ただし、ダウンロードされたプログラムは、それ自体に固有の一連のキー(反復的に生成されるなど)を受け入れます。
  • その後、ユーザーはインストールを完了してプログラムを実行できます。プログラムは、ハッシュが逸脱していないことを確認するために、それが置かれているマシンのプロファイルを定期的にチェックします。その場合、プログラムは、新しいキーを生成するためにWebアカウントにログインするようにユーザーに促すことができます。次に、新しいキーを使用してアプリケーションを更新します。これはアプリケーションによって自動化できますが、インターネット法などを使用すると、ユーザーが自分のアカウントにサインインし、おそらくEULAの更新に同意する方がよいでしょう。

プログラムをVMバンドルで共有することにした場合でも、キーを取得するにはアクティブなアカウントが必要です。

これは、誰かがハッシュチェックをバイパスすることを妨げるものではないことに注意してください。しかし、平均的なユーザーにとって、これはあなたがあなたのプログラムを譲ったり転売したりする人々を思いとどまらせる良い方法として役立つでしょう。

念頭に置いておいてください。絶対確実なシステムはありません。

于 2013-03-09T00:53:16.843 に答える
0

インターネット上の何かに連絡する必要を避けるために、次の方法を使用してプログラムを「ドングル」できます。

  • プログラムの重要な部分 (それがなければ、残りの部分が役に立たないもの) を取り、
  • それを文字列に入れ、
  • その文字列を実行するコンピューターのMAC アドレスと対称的に暗号化します。
  • 次に、プログラムでこれを行います:
    • その文字列を、それが実行されている現在のマシンの MAC アドレスで復号化し、
    • を使用して復号化された文字列を呼び出しますexec

重要な部分が次の例print "hello world":

def getMyMac():
  return 123456789L  # for testing now
  return uuid.getnode()  # this would be the real thing

def strxor(s, key):
  key *= len(s) / len(key) + 1
  return ''.join(chr(ord(key[i]) ^ ord(s[i])) for i in range(len(s)))

def performVitalCode():
  code = 'A@ZZA\x16\x15P\\]^\\\x14BYET]\x13'
  # I found that code by entering:
  # strxor('print "hello world"', str(getMyMac()))
  realCode = strxor(code, str(getMyMac()))
  exec realCode
  • ここでは、暗号化のために文字列に単純な xor を使用しました (解読するのが難しい暗号ではありません)。
  • もちろん、「許可された」コンピュータのユーザーは、自分の MAC アドレスを次のユーザーに渡すことができます。
    • getMyMac()または_
    • 自分の MAC アドレスを偽装する。ほとんどのネットワーク カードでこれが可能です。

したがって、これは問題に対する「安全な」解決策ではありません。

しかし、コンピューターの知識がほとんどない人が、それ以上の情報なしに他の人にあなたのコードを渡した場合 (フォーラムなどでオンラインに公開するなどして)、受信者はそれをすぐに実行することはできません。

最後に、特定のコンピューターへのコードのチェーン化はすべて、コードの正当なユーザーにとって面倒になる可能性があることを指摘する必要があります。別のハードウェアに切り替えたという理由だけで (おそらく新しいラップトップを入手したという理由だけで) 動作を停止するプログラムを使用している場合、私はたいてい腹を立てて、そのコードの作成者を呪います。お客様に迷惑をかけたくないのかもしれません。

于 2013-03-01T09:18:24.607 に答える