2

私は次のことを試してみたい:

ファイルを入力として受け取り、これら 5 つの MD5 の MD5 アルゴリズムを計算する C# プログラムがあります。私のアルゴリズムは、ファイルごとに一意の値を持っています。この値は 128 ビット値であるため、この手法を使用して、md5 アルゴリズムの出力値を PE ファイルに保存することでプログラムを保護したいと考えています (値を X としましょう)。PE は、MD5 値を (それ自体に対して) 再度計算し (値が Y であるとしましょう)、X と Y を比較します。同じ値である場合は、問題なく実行されます。それ以外の場合は終了します。

私の質問は: PE ファイルに値を書き込むにはどうすればよいですか? 重要なお知らせ: 私のアルゴリズムは C# で書かれているので、C# 言語を使用して PE ファイルに書き込む方法が必要です。

4

3 に答える 3

4

埋め込まれ、コード/データ セグメントの最後にある空の文字列リソース データを作成し、リソースの場所がある空の場所に値を書き込むオフセットを計算します。

しかし、繰り返しになりますが、プログラムを自分で保護することに何の意味がありますか?

私はその道をたどりません。代わりに、PE ファイル (ネイティブ C/C++ コード/ライブラリおよび .NET) の商用保護スキームを採用します...たとえば、PE ファイルでもある .NET 実行可能ファイルであり、それらは簡単にリバース エンジニアリング (リフレクターのことを考えてください)...保護スキームがクラックされ、シリアル番号が使用された、これらのいわゆるウェアーズの多くを見てください...どう思いますか? それでも自分でやりたいと主張する場合は、上記の私の回答の最初の段落が役に立ちます。

私の 2 セントはここで考えました... よろしくお願いします。あなたの保護計画に幸運を祈ります、トム。

于 2009-11-22T23:08:15.823 に答える
4

1 つのオプションは、ファイルの末尾に値を単純に追加することです。Windows は、任意のデータが実行可能ファイルに追加されることに非常に満足しています。たとえば、自己解凍型の zip ファイルがどのように機能するかです。

Hany のコメントに応じて編集します。例として cmd.exe を使用すると、私にとってはうまくいきます。

C:\WINDOWS\system32>copy con rjh
This is a test!
^Z
        1 file(s) copied.

C:\WINDOWS\system32>copy /b cmd.exe + rjh cmdrjh.exe
cmd.exe
rjh
        1 file(s) copied.

C:\WINDOWS\system32>od -cv cmdrjh.exe | tail -4
1367760  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0
1370000   T   h   i   s       i   s       a       t   e   s   t   !  \r
1370020  \n
1370021

C:\WINDOWS\system32>cmdrjh
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:\WINDOWS\system32>

(ファイル操作はバイナリモードでしたよね?)

于 2009-11-22T22:43:50.570 に答える