0

LockBytes()/UnlockBytes()そのような目的のために、WinAPI(* nixの代替の正確な名前についてはわかりません)のような関数を使用できることを聞いています。

私は興味があります: 「実行中に一部の *.exe の内容を変更することは可能ですか?」

Semaphore、Spinlock などのようなスレッド ロッカー モデルのため、それは不可能だと思います。

しかし、何らかの方法は存在しますか?

おそらく、リソースをEXEに埋め込み、準備された独自のスレッドモデルと実行時にロックしてから、そのバイトの領域をロック解除し、必要な値を変更する場合。

私がこの質問に興味を持った理由は次のとおりです。

  • セキュリティ オンライン チェック。オンラインキーチェッカーに使用されるいくつかの値を変更したい(チェックサムとセッションをそのようなバイト領域に書き込み、オンラインでチェックするなど...)

  • ファイルシステムスペースまたはシステムレジストリへのアクセスを妨げないようにUAC / chmodを渡したいので、別のファイルやレジストリなどに書き込みたくありません。

PS

私はウイルスを作りたくありません。自分のプログラムをトライアルチェック/分解のハッキングから保護するだけです。

4

1 に答える 1

1

考えられる解決策の 1 つ:

  1. 保護したいコードの大部分を EXE に保持するのではなく、独自の DLL に移動します。
  2. メインの実行可能ファイルで、DLL をメモリに読み込み、https://github.com/fancycode/MemoryModuleを使用してロードします。

その後、DLL はロックされず、必要に応じてそのリソースを更新できます (アクセス許可がある場合)。

上記は Windows システム用で、MemoryModule は PE 形式用です。UNIX では、次の 2 つの点が異なります。

  1. 実行中に実行可能ファイルの名前を変更して置き換えることができるため、同じファイルに書き込む必要はありませんが、
  2. 通常のユーザーがプログラムの実行可能ファイルまたはディレクトリに書き込むことを許可するアクセス許可を使用して、システム全体にプログラムをインストールすることは、正気ではありません (ところで、Windows ではそれほど違いますか? UAC があなたを妨げないことを確信しているようです)可能であれば独自の実行可能ファイルを作成しますが、そうではない可能性があります)。
于 2013-01-11T12:42:57.520 に答える