0

実行中のアプリケーション (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はどうやってこれを間違ったのですか?彼らの側のプログラミングは貧弱でしたか?現在は解決されているテクノロジーの制限ですか?それとも、適切な量の知識で作成されたほぼすべてのソフトウェアで、技術的にこれを行うことができますか?

全体として、コードがメモリ内でどのように見えるかなどの詳細を提供する優れたチュートリアル、記事、または本を使用できると思います。

4

1 に答える 1

1

アプリケーションのメモリを読み取ることができることを知っていることは、「通常の」開発者が心配する必要のあることではありません。これを便利な方法で利用できるユーザーの数は非常に少なく(壮大なスキームでは)、とにかくアプリケーションの機密部分(ライセンス、パスワード、およびその他の個人を特定できる情報)にのみ重要です。そうでなければ、リスクは本当に無視できます。

それを保護する努力がそうすることの費用によって正当化できないならば、なぜそれを構築させるためにお金を払っている人/グループ/その他が心配する必要があります。他の方法で時間の投資を使用する可能性のあるものが常にたくさんある場合は、時間をかけて気にする価値はありません。

メモ帳またはMSWordは、入力されている内容を聞くためのスニファを作成できることに注意する必要がありますか?おそらくそうではなく、なぜですか?それは実際には収益に影響を与えたり、現実的なリスクをもたらしたりしないからです。

于 2013-03-07T05:22:04.897 に答える