C程序中的Shellcode

use*_*694 14 c shellcode

链接http://hackoftheday.securitytube.net/2013/04/demystifying-execve-shellcode-stack.html 突出显示了编写execve shellcode的方法.

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

unsigned char code[] = 
"\x31\xc0\x50\x68\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69\x89\xe3\x50\x89\xe2\x53\x89\xe1\xb0\x0b\xcd\x80";

main()
{

    printf("Shellcode Length: %d\n", strlen(code));

    int (*ret)() = (int(*)())code;

    ret();
}
Run Code Online (Sandbox Code Playgroud)

line int有int (*ret)() = (int(*)())code;什么作用?

mas*_*oud 17

  int (*ret)() = (int(*)())code;
  ~~~~~~~~~~~~   ~~~~~~~~~~~~~~
        1              2

  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
               3
Run Code Online (Sandbox Code Playgroud)
  1. 它定义ret为一个指向函数的指针,该函数没有参数()并返回int.所以,那些()表示函数参数的定义.

  2. 它用于转换code为指向函数的指针,该函数没有参数()并返回int.

  3. 施放code的功能,并指定它ret.之后你可以打电话ret();.

 

unsigned char code[] =  "\x31\xc0\x50\x68\x6e\x2f\...
Run Code Online (Sandbox Code Playgroud)

它是由十六进制值表示的一系列机器指令.它将作为函数注入代码.