以下のコードは、バイナリ ファイルを想定しています。
#include <stdio.h>
#include <string.h>
#define bufsz 100
const char msg[] = "Usage: %s <shellcode file>\n";
static char buffer1[bufsz];
static char buffer2[bufsz];
void usage(char *self) {
printf(msg, self);
exit(1);
}
int main(int argc, char *argv[]) {
FILE *fp;
void (*funcptr)();
if (argc != 2)
usage(argv[0]);
if ((fp = fopen(argv[1], "rb")) == NULL ) {
printf("fail to open file: %s\n", argv[1]);
exit(1);
};
fgets(buffer1, bufsz, fp);
fclose(fp);
strcpy(buffer2, buffer1);
if (strlen(buffer2) >= 40)
printf("your shellcode is too long! \n");
if (strlen(buffer2) < 30)
printf("your shellcode is less than 30 bytes!\n");
if (strstr(buffer2, "/bin/sh"))
printf("Malicious code detected!\n");
funcptr = (void *) buffer2;
(*funcptr)(); /* execute your shell code */
return 0;
}
したがって、shellfile.c
上記のアプリをテストするために、19バイトを含む以下を作成しました
int main(){
/* push trick */
__asm__("push $0;\n\
push $2;\n\
movl %esp, %ebx;\n\
xorl %ecx, %ecx;\n\
mov $162, %al;\n\
int $0x80;\n\
xorl %ebx, %ebx;\n\
leal 0x1(%ebx), %eax;\n\
int $0x80;\n\
");
return 0;
}
コンパイルしましたが、コードは以下のエラーを取得しています:
gcc -o codetest -g -ggdb codetest.c
./runshell testcode
your shellcode is less than 30 bytes!
Illegal Instruction
問題は正確にはどこにありますか?