You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

260 rivejä
5.5 KiB

//gcc -m32 -fno-stack-protector -z execstack -no-pie blackmarket.c -o blackmarket
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <assert.h>
#include <time.h>
#include "blackmarket.h"
#define BUFSIZE 0x1ff
int diamond;
void not_used(){
system("/bin/sh");
}
Node *Node_create(){
Node *node = malloc(sizeof(Node));
assert(node != NULL);
node->data = "";
node->next = NULL;
}
List *List_create(){
List *list = malloc(sizeof(List));
assert(list != NULL);
Node *node = Node_create();
list->first = node;
return list;
}
void List_append(List *list, char *str){
assert(list != NULL);
assert(str != NULL);
Node *node = list->first;
while(node->next != NULL){
node = node->next;
}
node->data = str;
node->next = Node_create();
}
int List_find(List *list, char *str){
assert(list != NULL);
assert(str != NULL);
int index = 0;
Node *node = list->first;
while(node->next != NULL){
int cmp = strcmp(str, node->data);
if(cmp == 0){
return index;
}
node = node->next;
index++;
}
return -1;
}
int List_length(List *list){
assert(list != NULL);
Node *node = list->first;
int length = 0;
while(node->next != NULL){
length++;
node = node->next;
}
return length;
}
void Node_destroy(Node *node){
assert(node != NULL);
free(node);
}
void List_remove(List *list, int index){
assert(list != NULL);
if(index < 0){
exit(0);
}else{
assert(index < List_length(list));
if(index == 0){
Node *node = list->first;
list->first = list->first->next;
Node_destroy(node);
}else{
Node *before = list->first;
for(int i=1; i<index; ++i){
before = before->next;
index--;
}
Node *node = before->next;
before->next = before->next->next;
Node_destroy(node);
}
}
}
void List_print(List *list){
if(list != NULL){
printf("[");
Node *node = list->first;
if(node->next == NULL){
printf("NULL");
}
while(node->next != NULL){
printf("%s", node->data);
node = node->next;
if (node->next != NULL){
printf(", ");
}
}
printf("]\n");
}
}
int sell_item(char *item){
int current_wallet = 0;
if(strcmp(item, "potatoes") == 0){
printf("You've earn 50 wallet!\n");
current_wallet = 50;
return current_wallet;
}else if(strcmp(item, "grape") == 0){
printf("You've earn 100 wallet!\n");
current_wallet = 100;
return current_wallet;
}else if(strcmp(item, "apel") == 0){
printf("You've earn 60 wallet!\n");
current_wallet = 60;
return current_wallet;
}
}
void message(){
printf("You don't have enough wallet!\n");
}
void success_msg(char *item){
printf("%s added to the list!\n", item);
}
void menu(){
printf("+-----------------------+\n");
printf("MASSIVE BLACKMARKET STORE\n");
printf("+-----------------------+\n");
printf("1. buy flag (200 Diamond)\n");
printf("2. buy potatoes (50 Wallet)\n");
printf("3. buy grape (100 Wallet)\n");
printf("4. buy apel (60 Wallet)\n");
printf("5. show items\n");
printf("6. sell items\n");
printf("7. check wallet\n");
printf("8. check diamond\n");
printf("9. get free diamond!\n");
printf("10. exit\n");
}
int main(){
List *l = List_create();
char buffer[BUFSIZE+1], ans[2];
int wallet = 300, temp, try = 0;
LOOP:while(1){
menu();
printf(">>");
fflush(stdout);
scanf("%s", &ans);
if(strcmp(ans, "1") == 0){
if(diamond < 200){
printf("Not enough diamond to buy flag!\nnothing to add.\n");
goto LOOP;
}else if(diamond >= 200){
diamond = diamond - 200;
List_append(l, "flag");
success_msg("flag");
goto LOOP;
}
}else if(strcmp(ans, "2") == 0){
if(wallet < 50){
message();
goto LOOP;
}
success_msg("potatoes");
wallet = wallet - 50;
List_append(l, "potatoes");
goto LOOP;
}else if(strcmp(ans, "3") == 0){
if(wallet < 100){
message();
goto LOOP;
}
success_msg("grape");
wallet = wallet - 100;
List_append(l, "grape");
goto LOOP;
}else if(strcmp(ans, "4") == 0){
if(wallet < 60){
message();
goto LOOP;
}
success_msg("apel");
wallet = wallet - 60;
List_append(l, "apel");
goto LOOP;
}else if(strcmp(ans, "5") == 0){
printf("\nYour Items :\n");
List_print(l);
goto LOOP;
}else if(strcmp(ans, "6") == 0){
getchar();
printf("What items you want to sell ?\n");
fflush(stdout);
fgets(buffer, sizeof(buffer), stdin);
printf("You sell : ");
printf(buffer);
strtok(buffer, "\n");
int check = List_find(l, buffer);
if(check == (-1)){
printf("Not Found!\n");
exit(1);
}else{
List_remove(l, List_find(l, buffer));
wallet = wallet + sell_item(buffer);
}
}else if(strcmp(ans, "7") == 0){
printf("\nYour Wallet : %d\n", wallet);
goto LOOP;
}else if(strcmp(ans, "8") == 0){
printf("\nYour diamond : %d\n", diamond);
goto LOOP;
}else if(strcmp(ans, "9") == 0){
try += 1;
srand(time(NULL));
int r = rand() % 10;
if(try <= 4){
printf("You get %d diamond\n", r);
diamond = diamond + r;
goto LOOP;
}
printf("No diamond for you!\n");
goto LOOP;
}else if(strcmp(ans, "10") == 0){
printf("Thankyou for visiting!");
exit(0);
}else{
fprintf(stderr, "Bad Request!\n");
exit(0);
}
}
}