1

質問はちょっとわかりにくいですが、私がやろうとしていることは、プログラムを起動して、そのプログラムにシステムクロックが「他の日付と時刻」であると認識させ、実際にシステム時刻を変更しないようにすることです。C# を使用してプログラムでこれを行うにはどうすればよいですか?

PS: 起動したプログラムを変更することはできません。

編集: プログラムは、起動から 4 ~ 6 秒後に 1 回だけ時間をチェックすることに気付きました。したがって、システム クロックを 10 秒間変更して元に戻します。助けてくれてありがとう!

4

3 に答える 3

1

アプリケーションが使用する日付/時刻関数がわかっている場合は、それらの CLR メソッドがどのシステム コールを使用しているかを調べることができます。これがわかれば、これらの呼び出しが傍受される環境でソフトウェアをテストできます。おそらくDateTime.Now、.NET などで「偽の」応答が返されます。

これを行うユーティリティがあります。たとえば、http://www.nirsoft.net/utils/run_as_date.html

そのユーティリティによって傍受された特定のシステムコールが、たとえばフレームワークによって使用されるものであるかどうかはわかりませんDateTime.Now

于 2013-03-24T18:45:43.330 に答える
1

のような winAPI への呼び出しをインターセプトする必要がありますGetSystemTime。C# はそのようなことを行うのに最適なツールではありませんが、不可能なことは何もありません。C# をサポートする迂回ライブラリを使用します。プログラムのアドレス空間を変更する方法を考えてください (リモート スレッドWriteProcessMemory、フィルタ DLL)。

これは、どこで解決策を見つけることができるかについての非常に一般的な考え方です。

OS へのプログラム呼び出しをインターセプトする方法を尋ねられても、少なくとも自分の努力を示さない限り、ここではほとんど答えが得られません。

于 2013-03-24T18:38:28.553 に答える