1

EIP を変更して別のプログラムをハッキングしようとしています。2 つのプログラムが実行されています。1 つはターゲットで、「コア関数」である関数 (たとえば、パスワード文字列をパラメーターとして受け取り、true または false を返す関数) がメモリ内のどこにあるかを示します。次に、コア関数がどこにあるかがわかったので、他のプログラムで EIP を変更して、ターゲット プログラムが関数を呼び出して、単に true を取得し、美しい「アクセス許可」を出力できるようにします。

私のコードは次のようになりました:

対象プログラム:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>


int checkPwd(char *pwd)
{
    printf("\nstill in the function\n");
    if(strcmp(pwd, "patrick") == 0) return true;
    else return false;
}


int main()
{
    char pwd[16];

    printf("%d", checkPwd);
    scanf("%s", &pwd);
    system("pause");
    if(checkPwd(pwd)) printf("Granted!\n");
    else printf("Not granted\n");
    system("pause");
}

攻撃プログラム:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <memory.h>

int returnTrue()
{
    return true;
}
int main()
{
    int hex;
    scanf("%d", &hex);
    memcpy((void*)hex, (void*)returnTrue, sizeof(char)*8);
    system("pause");
}

16 進コードを直接 (scanf 部分なしで) 攻撃者プログラムに入れようとしたが、機能せず、クラッシュしたことを付け加えておきます。

したがって、ここでは理論の一部が欠けていると思います。どんなものか教えていただけると幸いです。

前もって感謝します。

4

2 に答える 2

5

これはうまくいきません — プロセスは異なるメモリ空間を占有します!

最新のオペレーティング システムは、まさにこの種の攻撃からユーザー プログラムを保護するように設計されています。あるプロセスは別のプロセスのメモリにアクセスできません。実際、データのアドレスはそのプロセス内でのみ有効です。

プログラムが実行されているとき、プログラムは独自のメモリ ビューを持ち、カーネルがメモリ管理ユニット (MMU)にマップするように指示したメモリのみを「見る」ことができます。

参考文献:

于 2012-07-13T03:07:21.553 に答える
2

関数を別のプロセスに注入することは可能ですが、それはあなたが思っているよりも少し複雑です。まず、2つの関数を作成することで、適切な長さの関数を作成する必要があります。

static int realFunction() { ... }
static void realFunctionEnd() {}

関数をコピーすると、次の長さになります。

realFunctionEnd - realFunction

これはあなたにサイズを与えるでしょう。述べたように、他のプロセスで同じアドレスにあることが保証されていないため、他の関数を呼び出すことはできませんが、実際にできるように、kernal32.dllが同じアドレスにあると仮定できます。リモートスレッドを作成するときに、それをrealFunctionに渡します。

さて、あなたの本当の問題について。必要なのは、dllを挿入するか、関数を他のプロセスにコピーしてから、変更する必要のある関数をフックすることです。これを行うには、別の関数をコピーしてそのコードを実行可能にし、ターゲット関数の最初の5バイトを挿入したコードにジャンプして上書きするか、適切な迂回タイプのフックを実行します。どちらの場合でも動作するはずです。または、関数へのオフセットを見つけて、trueの戻りなど、実際のコードの代わりに適切なopコードを記述することにより、自分でパッチを適用することもできます。

これを完了するには、何らかの注入またはパッチが必要です。基本的な考え方はありますが、現時点で考えているよりも少し多くのことがあります。関数を別のプロセスにコピーするためのWindows用の作業コードがありますが、それは良い学習体験だと思います。

于 2012-07-13T03:24:12.913 に答える