シェルコードとNOPで詰め込み、以下のコードの変数serial_buffでリターンアドレスを置き換えたいです。
コードを実行したのですが、Segmentation Faultが起きてしまいます。
このコードが書いてある本によると、serial_buff変数は0x7fffffffe480にあり、0x7fffffffe4d80x7fffffffe4dfに格納されているアドレスが関数のリターンアドレスと書いてありました。0x7fffffffe4dfにあるとあり、なぜここにあるのか分かるのか、全くわかりませんでした。
ここでserial_buff変数の先頭アドレスからリターンアドレスが格納されている先頭アドレスまで88バイトあります。
そして、以下の画像のように、NOPの次に先頭アドレスを入れると
/root/ohm/code_exec
となるらしいのですが、Segmentation Faultとなってしまいできません。
また、別の疑問点なのですが、本には当然のようにリターンアドレスが0x7fffffffe4d8
もしよろしければ、なぜSegmentation Faultが起きるのか、そしてリターンアドレスがどこにあるのか教えていただけると幸いです。
#include <stdio.h> #include <stdlib.h> #include <string.h> int check_serial(char *serial) { int flag = 0; char serial_buff[64]; strcpy(serial_buff, serial); if (strcmp(serial_buff, "SN123456") == 0) flag = 1; return flag; } int main(int argc, char *argv[]) { if (argc < 2) { printf("Enter serial number!\n", argv[0]); exit(0); } if (check_serial(argv[1])) { printf("Serial number is correct.\n"); } else { printf("Serial number is wrong.\n");; } }
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/11/30 07:21
2020/11/30 07:26