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 部分なしで) 攻撃者プログラムに入れようとしたが、機能せず、クラッシュしたことを付け加えておきます。
したがって、ここでは理論の一部が欠けていると思います。どんなものか教えていただけると幸いです。
前もって感謝します。