첫 번째 쉘 코드 예제의 작동 방식이 약간 혼란 스럽습니다. 나는 GDB를 통해 그것을 실행했고, 그것이 옳았다는 것을 확인했지만, 그것이 처음부터 어떻게 끝나는지 확실하지 않습니다. 다음과 같은 코드가 모습입니다 : (. 내가 실제로 하나의 인쇄에 "Hello World"에 처음 쉘을 생성합니다 쉘 코드를 교체했지만, 그 많은 차이를해서는 안)Shellcoder 's Handbook : 첫 번째 쉘 코드 예
char shellcode[] =
"\xeb\x13\x59\x31\xc0\xb0\x04\x31\xdb\x43\x31\xd2\xb2\x0f\xcd\x80"
"\xb0\x01\x4b\xcd\x80\xe8\xe8\xff\xff\xff\x48\x65\x6c\x6c\x6f"
"\x20\x77\x6f\x72\x6c\x64\x0a\x0d";
int main()
{
int *ret;
ret = (int *)&ret + 2;
(*ret) = (int)shellcode;
return 0;
}
ret
은 정수 포인터 일 경우 어떻게 작동합니까? 4 바이트 길이 여야합니다. 셸 코드 자체는 대략 40 바이트 길이입니다! 무엇이든간에, 모든 ret
은 쉘 코드의 처음 4 바이트이며 모든 것을 실행하지 않아야합니다!
누군가가 설명해 주실 수 있습니까?