Esempio n. 1
0
int SV_AddTestClient() {
	char buffer[1024];
	int botport = 1;
	int protocolVersion = ((int(*)())&ParseAddr(0x28FE40))(); //GetProtocolVersion
	int checksum = ((int(*)())&ParseAddr(0x2093C))(); //BG_NetDataChecksum
	int PersistentDataDefVersion = ((int(*)())&ParseAddr(0x1EA710))(); //LiveStorage_GetPersistentDataDefVersion
	unsigned int PersistentDataDefVersionChecksum = ((int(*)())&ParseAddr(0x1EA740))(); //LiveStorage_GetPersistentDataDefFormatChecksum

	//0x236084 - client->dropReason, causing issue, source: unknown. (SV_SendMessageToClient)
	uint32_t patchData[] = { 0x38800005 };
	write_process(0x22E55C, &patchData, 4);
	Sprintf(buffer, "connect bot%d \"\\cg_predictItems\\1\\cl_anonymous\\0\\color\\4\\head\\default\\model\\multi\\snaps\\20\\rate\\5000\\name\\bot%d\\protocol\\%d\\checksum\\%d\\statver\\%d %u\\qport\\%d\"", botport, botport, protocolVersion, checksum, PersistentDataDefVersion, PersistentDataDefVersionChecksum, botport);
	Memset((void*)ThreadStorage_a, 0, sizeof(netadr_s));
	netadr_s* newConnection = (netadr_s*)(ThreadStorage_a);
	newConnection->port = botport;

	((void(*)(const char*))&ParseAddr(0x1DBA20))(buffer); //SV_CmdTokenizeString(const char* string)
	((void(*)(netadr_s*))&ParseAddr(0x226074))(newConnection); //SV_DirectConnect(netadr_s* connectionInfo)
	((void(*)())&ParseAddr(0x1DB524))(); //SV_CmdEndTokenizeString()

	*(short*)(getClient_t(botport) + 0x352EA) = 0x3FF; //Set Stat Flags
	*(short*)(getClient_t(botport) + 0x30) = botport; //botPort

	((void(*)(int client))&ParseAddr(0x2284F8))(getClient_t(botport)); //SV_SendClientGameState(client_t* client)
	((void(*)(int client, int usercmd))&ParseAddr(0x2272DC))(getClient_t(botport), ThreadStorage_a); //SV_ClientEnterWorld(client_t* client, usercmd_s* lastUserCmd)
}
Esempio n. 2
0
char*
send_proc_to_local_server(struct proc_process p) {
	struct sockaddr_un them;
	int sender = socket(AF_UNIX, SOCK_STREAM, 0);
 	if (sender < 0) {
		printf("Error creating connection to server\n");
	 	return NULL;
 	}
	them.sun_family = AF_UNIX; 
	strcpy(them.sun_path,LOCAL_SERVER_SOCK);
 	if (connect(sender,(struct sockaddr *)&them,sizeof(them)) < 0) {
		printf("Error connecting to server\n");
	 	return NULL;
 	}
 	unsigned char type = 's';
 	write_to_socket(&sender,&type,sizeof(char));
 	write_process(p,&sender,write_to_socket);
	char* id = malloc(SIZE_OF_ID*sizeof(char));;
 	read_from_socket(&sender,id,SIZE_OF_ID*sizeof(char));
 	return id;
}
Esempio n. 3
0
int 
main(int argc, char** argv)
{
	program_name = argv[0];
	static char *commands[] = {
		"save",
		"restore",
		"send",
		"receive",
		"list",
		"delete"
	};
	int commands_len = sizeof(commands)/sizeof(char*);
	static struct option long_options[] = {
		{"server", 1, 0, 's'},
		{"name", 1, 0, 'n'},
		{"output", 1, 0, 'o'},
		{"nokill", 0, 0, 'K'},
		{"verbose", 0, 0, 'v'},
		{"help", 0, 0, 'h'},
		{"file-save", 0, 0, 'f'},
		{NULL, 0, NULL, 0}
	};
	int c,i,option_index = 0;
	if (argc<2) {
		usage(-1);
		exit(1);
	}
	for (i=0;i<commands_len;i++) {
		if (!strcmp(commands[i],argv[1]))
			break;
	}
	if (!strcmp(argv[1],"--help") || !strcmp(argv[1],"-h")) {
		usage(-1);
		exit(0);
	}
	if (i==commands_len) {
		usage(-1);
		exit(1);
	}
	command_index = i;
	char** real_argv = malloc(sizeof(char*)*argc-1);
	real_argv[0] = argv[0];
	for (i=1;i<argc-1;i++) {
		real_argv[i] = argv[i+1];
	}
	char *output=NULL,*host=NULL,*name=NULL;
	int nokill = FALSE;
	verbose = 0;
	flags = 0;
	while ((c = getopt_long(argc-1, real_argv, "s:vn:hKo:f", long_options, &option_index)) != -1) {
		switch (c) {
			case 's':
				host = malloc(strlen(optarg));
				strcpy(host,optarg);
				break;
			case 'v':
				verbose=TRUE;
				break;
			case 'n':
				name = malloc(strlen(optarg));
				strcpy(name,optarg);
				break;
			case 'h':
				usage(command_index);
				exit(0);
				break;
			case 'o':
				output = malloc(strlen(optarg));
				strcpy(output,optarg);
				break;
			case 'K':
				nokill = TRUE;
				break;
			case 'f':
				flags |= PROC_FLAG_SAVE_FILE;
				break;
			default:
				fprintf(stderr,"?? getopt returned character code 0%o ??\n", c);
		}
	}
	if (command_index==0) {
		//save
		if (optind >= argc-1 && name==NULL) {
			usage(command_index);
			exit(1);
		}
		pid_t pid = 0;
		if (name!=NULL) {
			char tmpproc[100];
			sprintf(tmpproc,"ps ux | awk '/%s/ && !/awk/ {print $2}'",name);
			FILE* proc = popen(tmpproc,"r");
			fscanf(proc,"%d",&pid);
			pclose(proc);
		} else {
			pid = atoi(real_argv[optind]);
		}
		struct proc_process p = save_process(pid,"test",nokill);
		if (output!=NULL) {
			FILE* proc = fopen(output,"w+");
			write_process(p,proc,write_to_file_pointer);
			fclose(proc);
		} else {
			char* id;
			if ((id = send_proc_to_local_server(p))==NULL)
				write_process(p,stdout,write_to_file_pointer);
			printf("%s\n",id);
		}
	} else if (command_index==1) {
		//restore
		if (optind >= argc-1) {
			usage(command_index);
			exit(1);
		}
		char* f_id = real_argv[optind];
		FILE* proc = fopen(f_id,"r");	
		struct proc_process *p=NULL;
		if (!proc) {
			p = receive_proc_from_local_server(f_id);
		} else {
			p = read_process(proc,read_from_file_pointer);
		}
		if (p!=NULL)
			restore_process(*p);
	} else if (command_index==2) {
		//send
		if (optind >= argc-1 && name==NULL) {
			usage(command_index);
			exit(1);
		}
		pid_t pid = 0;
		struct proc_process *p=NULL;
		if (name!=NULL) {
			char tmpproc[100];
			sprintf(tmpproc,"ps ux | awk '/%s/ && !/awk/ {print $2}'",name);
			FILE* proc = popen(tmpproc,"r");
			fscanf(proc,"%d",&pid);
			pclose(proc);
			struct proc_process tmpp = save_process(pid,"test",nokill);
			p = &tmpp;
		} else {
			char* f_id = real_argv[optind];
			FILE* proc = fopen(f_id,"r");	
			if (!proc) {
				p = receive_proc_from_local_server(f_id);
				if (!p) {
					pid = atoi(real_argv[optind]);
					struct proc_process tmpp = save_process(pid,"test",nokill);
					p = &tmpp;
				}
			} else {
				p = read_process(proc,read_from_file_pointer);
			}
		}

		char* ip=DEFAULT_HOST;
		int port=DEFAULT_PORT;
		if (host!=NULL) {
			char* pos = strchr(host,':');
			if (pos!=NULL) {
				*pos='\0';
				ip=host;
				port=*(++pos);
			} else {
				ip=host;
				port = DEFAULT_PORT;
			}
		}
		send_process(*p,ip,port);
	} else if (command_index==3) {
		//receive
		char* id = NULL;
		if (optind >= argc-1) {
			id = real_argv[optind];
		}
		struct proc_process *p= receive_proc_from_local_server(id);
		if (p!=NULL)
			restore_process(*p);
	} else if (command_index==4) {
		//list
		list_from_local_server();
	} else if (command_index==5) {
		//delete
		if (optind >= argc-1) {
			usage(command_index);
			exit(1);
		}
		char id[SIZE_OF_ID];
		strcpy(id,real_argv[optind]);
		delete_from_local_server(id);
	} 
	return 0;
}
Esempio n. 4
0
int main(int argc, char** argv)
{
    pid_t target_pid;
    struct list proc_image;
    int c;
    int flags = 0;
    int get_children = 0;
    int fd;
    long offset = 0;

    /* Parse options */
    while (1) {
	int option_index = 0;
	static struct option long_options[] = {
	    {"libraries", 0, 0, 'l'},
	    {"kill", 0, 0, 'k'},
	    {"pid", 0, 0, 'P'},
	    /*
	    {"files", 0, 0, 'f'},
	    {"children", 0, 0, 'c'},
	    {"writer", 1, 0, 'w'},
	    */
	    {0, 0, 0, 0},
	};

	c = getopt_long(argc, argv, "lkP"/*"fcw:"*/, long_options, &option_index);
	if (c == -1)
	    break;
	switch(c) {
	    case 'l':
		flags |= GET_LIBRARIES_TOO;
		break;
	    case 'f':
		flags |= GET_OPEN_FILE_CONTENTS;
		break;
	    case 'k':
		flags |= KILL_ORIGINAL_PROCESS;
		break;
	    case 'P':
		flags |= REFRESH_PID;
		break;
	    case 'c':
		get_children = 1;
		break;
	    /*
	    case 'w':
		set_writer(optarg);
		break;
		*/
	    case '?':
		/* invalid option */
		usage(argv[0]);
		break;
	}
    }

    if (argc - optind != 2) {
	usage(argv[0]);
	return 1;
    }

    assert(stream_ops != NULL);

    target_pid = atoi(argv[optind+1]);
    if (target_pid <= 1) {
	fprintf(stderr, "Invalid pid: %d\n", target_pid);
	return 1;
    }

    list_init(proc_image);
    get_process(target_pid, flags, &proc_image, &offset);

    fd = open(argv[optind], O_CREAT|O_WRONLY|O_TRUNC, 0777);
    if (fd == -1) {
	fprintf(stderr, "Couldn't open %s for writing: %s\n", argv[optind],
	    strerror(errno));
	return 1;
    }

    write_stub(fd, offset);

    write_process(fd, proc_image);

    close(fd);

    return 0;
}