実行中のアプリケーション (C#、C、C++、Java などで構築されているかどうか) には、メモリ内に要素が公開されることがわかっています。何をどのようにメモリに公開するかを制御する方法に興味がありますか?
多くのゲームが、ユーザーがゲームのメモリ内のコンテンツを表示して変更することによってハッキングまたは変更されることを知っているので、私は興味があります。これがどのように機能するかについての詳細を知りたいだけです。メモリに飛び込むには特別なプログラムを使用する必要があることを知っています。また、メモリを読みやすくするためには、変換などを行う必要があります。
非常に単純な例を取り上げて、それについていくつか質問します。
using System.Security;
static class Program2
{
private static SecureString fSecureString;
public static string fPublicString = "Test123";
private static string fPrivateString = "321tesT";
static void Main2()
{
}
}
class TestClass
{
private string fInstancedPrivateString;
public TestClass()
{
fInstancedPrivateString = "InstancedSet";
}
private string DoSomething()
{
return fInstancedPrivateString.ToLower();
}
}
}
上記のコードを考えると、fPublicString はかなり見やすいと思います。記憶を読んでいる人はどのような要素を見ることができますか? 変数名を読み取ることができますか、それともメモリ アドレスと割り当てられた値 (Test123) を見るだけですか。インスタンス化されたクラス内にある DoSomething のような関数はどうですか? 誰かがメモリ内でそれを見て、意のままに実行する悪意のあるコードを書くことができますか?
アプリケーション (またはゲーム) を作成する際に、このことをどれだけ心に留めておく必要があるかについて、私はただ興味があります。アクセサー プロパティ (public/private/etc) の一般的な考え方と、それに対する可視性を持つ他のコードとの関係は理解していますが、それらがメモリ内での表現方法に関係があるかどうかに興味があります。
私の最後の質問は非常に具体的です.EverQuest(ゲーム)にはMacroQuestと呼ばれるハックがあり、私の理解では、適切なオフセットを持つことでメモリを読み取り、EQクライアント側からコードを実行したり、クライアントのメモリに保存されている値を変更したりできます. EQはどうやってこれを間違ったのですか?彼らの側のプログラミングは貧弱でしたか?現在は解決されているテクノロジーの制限ですか?それとも、適切な量の知識で作成されたほぼすべてのソフトウェアで、技術的にこれを行うことができますか?
全体として、コードがメモリ内でどのように見えるかなどの詳細を提供する優れたチュートリアル、記事、または本を使用できると思います。