folder Tahribat.com Forumları
linefolder C - C++
linefolder Bytescanner C Programcilari Icin API Ornegi



Bytescanner C Programcilari Icin API Ornegi

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    wh0
    wh0's avatar
    Kayıt Tarihi: 21/Temmuz/2008
    Homo

    3 Adimda Dosya Taratma Dokumantasyonu:

    http://bytescanner.com/sdk/apidoctr.txt

    Gelistiriciler Icin SDK Kök Dizini :

    http://bytescanner.com/sdk/

    Projenin Tam Kaynak Kodu:

    http://bytescanner.com/sdk/BytescannerCAPI.rar

    Kaynak Kodu:

    /*
    
      Author : Ersan YAKIT
               ersanyakit@yahoo.com.tr
               http://www.bytescanner.com
               
        DEVC++
        http://downloads.sourceforge.net/project/dev-cpp/Binaries/Dev-C%2B%2B%204.9.9.2/devcpp-4.9.9.2_setup.exe?r=http%3A%2F%2Fwww.bloodshed.net%2Fdev%2Fdevcpp.html&ts=1378681357&use_mirror=garr
        
        CURL
        http://curl.haxx.se/gknw.net/7.32.0/dist-w32/curl-7.32.0-devel-mingw32.zip
        
        Using LIBCURL in DEVC++
        http://curl.haxx.se/mail/archive-2005-10/att-0119/DevCpp-Mingw_Install___Compilation_Sept_2005.rtf
        
        PROJECT / OPTIONS / PARAMETERS / LINKER 
        C:\Dev-Cpp/lib/libcurl.a
        C:\Dev-Cpp/lib/libcurldll.a
    */
    
    #include "main.h"
    #include "cJSON.h"
    
    
    typedef struct _MemoryStruct {
    	char *memory;
    	size_t size;
    } MemoryStruct, *LPMemoryStruct;
    
    typedef struct _SCAN_FILE {
    	char *email;
    	char *password;
    	char *binaryPath;
    	char *cookiePath;
    }SCAN_FILE,*LPSCAN_FILE;
    
    
    
    void *set_memory( size_t n) {
    	void *p=( void *)malloc( n + 1 );
    	if ( p ) memset(p, 0x00, n+1);
    	return p;
    }
    int unset_memory( void *p) {
    	if ( p ) free(p);
    	return 0;
    }
    int str_merge( char **buff, char *fmt, ...) {
    	va_list ap;
    	int len, mlen;
    	char *ret = NULL;
    	mlen = strlen(fmt) + 512;
    	va_start(ap, fmt);
    	while(1) {
    		if ( !(ret = (char *) set_memory( mlen ) ) ) return -1;
    		len = vsnprintf(ret, mlen, fmt, ap);
    		if((len >= 0) && (len < mlen)) break;
    		mlen = len < 0 ? mlen+128 : len+1;
    		unset_memory(ret);
    	}
    	va_end(ap);
    	*buff = ret;
    	return len;
    }
    
    
    size_t Write2Mem( void *contents, size_t size, size_t nmemb, void *userp) {
    	size_t realsize = size * nmemb;
    	MemoryStruct  *mem = (MemoryStruct *)userp;
    	mem->memory = realloc(mem->memory, mem->size + realsize + 1);
    	if(mem->memory == NULL) {
    		/* out of memory! */ 
    		printf("not enough memory (realloc returned NULL)\n");
    		return 0;
    	}
    	memcpy(&(mem->memory[mem->size]), contents, realsize);
    	mem->size += realsize;
    	mem->memory[mem->size] = 0;
    	return realsize;
    }
    /* START*/
    
    int print_exit( const char *strMsg ) {
    	fprintf(stderr, "%s", strMsg);
    	exit(-1);
    }
    
    int _SetAuthParameters(char *out, const SCAN_FILE *s ) {
    	return str_merge( &out, "action=Auth&email=%s&password=%s", s->email, s->password );
    }
    
    int _checkSuccess(const char * data)
    {
    	char *out;
        cJSON *item;
    	item=cJSON_Parse(data);
    	cJSON *subitem=cJSON_GetArrayItem(item,0);
    	if(strstr(subitem->string,"success")){
           return subitem->valueint;                                   
        }	
    }
    
    int getScanID(const char * data)
    {
    	char *out;
        cJSON *item;
    	item=cJSON_Parse(data);
    	cJSON *subitem=cJSON_GetArrayItem(item,1);
    	if(strstr(subitem->string,"root")){
           return subitem->valueint;                                   
        }	
    }
    
    int main(int argc, char **argv ) {
    	CURL *curl;
    	CURLcode res;
    	SCAN_FILE *scan=NULL;
    	char *postData=NULL;
    	
    	
    	MemoryStruct chunk;
    	
    
    	struct curl_httppost *formpost=NULL;
    	struct curl_httppost *lastptr=NULL;
    	struct curl_slist *headerlist=NULL;
    	static const char buf[] = "Expect:";
    	chunk.memory = malloc(1);
    	chunk.size = 0;
    
    	
    	scan=set_memory( sizeof(SCAN_FILE)+1);
    	if ( scan == NULL ) {
    		fprintf( stderr, "[x] No enough memory!");
    		exit(-1);
    	}
    	str_merge( &scan->email, "demo@bytescanner.com"); // your email
    	str_merge( &scan->password, "yourpassword"); // your email
    	str_merge( &scan->binaryPath, "D:\\curlLibDerleme.txt");
    	str_merge( &scan->cookiePath, "%s.%s", __FILE__, "tmp");
    	
    	if ( DEBUG )
    		fprintf(stderr, 
                    "user: %s\npass: %s\nfile: %s\nCookie: %s\n", 
                    scan->email, scan->password, 
                    scan->binaryPath, 
                    scan->cookiePath);
                    
    	if ( str_merge( &postData, "action=Auth&email=%s&password=%s", scan->email,scan->password) == -1 ) {
    		fprintf(stderr, "[X] Auth information set Failed!");
    		exit(-1);
    	}
    	fprintf(stderr, "AuthData: %s", postData);
    	
    	curl_global_init(CURL_GLOBAL_ALL);
    	curl = curl_easy_init();
    	if(!curl) {
    		print_exit("[X] unable to start curl library!\n");
    		exit(-1);
    	}
    	
    	curl_easy_setopt(curl, CURLOPT_URL, BYTESCANNER_AUTH_URL);
    	curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postData );
    	curl_easy_setopt(curl, CURLOPT_COOKIEFILE, scan->cookiePath );
    	curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, Write2Mem );
    	curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&chunk);
    
        res = curl_easy_perform(curl);
        if(res != CURLE_OK) fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
        
    	char *out;
        cJSON *item;
        cJSON *subitem;
    	int isLoginOk;
    	
        isLoginOk=_checkSuccess(chunk.memory);    
    	item=cJSON_Parse(chunk.memory);
        out=cJSON_Print(item);
        printf("\n\nSTEP I:\n\n%s\n\n",out);
        if(isLoginOk==0) return;
        
    	chunk.memory = malloc(1);
    	chunk.size = 0;
        
        curl_formadd(&formpost, 
                     &lastptr, 
                     CURLFORM_COPYNAME, 
                     "action",  
                     CURLFORM_COPYCONTENTS, 
                     "BinaryFileTransfer", 
                     CURLFORM_END);
                     
        curl_formadd(&formpost, 
                     &lastptr, 
                     CURLFORM_COPYNAME, 
                     "binaryFile", 
                     CURLFORM_FILE, 
                     scan->binaryPath, 
                     CURLFORM_END);
                     
        //curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "submit", CURLFORM_COPYCONTENTS, "send", CURLFORM_END);
        headerlist = curl_slist_append(headerlist, buf);
        
        /* what URL that receives this POST */ 
        curl_easy_setopt(curl, CURLOPT_URL, BYTESCANNER_SCAN_URL);
        if ( (argc == 2) && (!strcmp(argv[1], "noexpectheader")) ) {
    		/* only disable 100-continue header if explicitly requested */ 
    		curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headerlist);
    	}
    	curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost);
    	res = curl_easy_perform(curl);
    	if(res != CURLE_OK) {
    		fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
    	}
    	
        int isUploadOK;
        int currentScanID;
        
    	item=cJSON_Parse(chunk.memory);
        out=cJSON_Print(item);
        printf("STEP II:\n\n%s\n\n",out);
        isUploadOK=_checkSuccess(chunk.memory);                                
        if(isUploadOK==0) return;
        currentScanID=getScanID(chunk.memory);
    	
        chunk.memory = malloc(1);
    	chunk.size = 0;
    	
        printf("\n\nCURRENT SCN ID: %d",currentScanID);
        
        printf("\n\nSTEP III:\n\n");    
        char * ScanResultURL = NULL;
        str_merge(&ScanResultURL,"%s?action=scanResult&ResultID=%d",BYTESCANNER_QUERY_URL,currentScanID);
        	
    	curl_easy_setopt(curl, CURLOPT_URL, ScanResultURL);
        res = curl_easy_perform(curl);	
    	
    	item=cJSON_Parse(chunk.memory);
        out=cJSON_Print(item);	
        
        item=cJSON_GetArrayItem(item,1); // root child = 1, success = 0, error=2
        out=cJSON_Print(item);
        
        char * AnvirusProvider=NULL;
        char * LastUpdate=NULL;
        char * ScanTime = NULL;
        char * ScanResult= NULL;
        
        int i; for (i=0;i<cJSON_GetArraySize(item);i++)
    	{
    	 
         subitem=cJSON_GetArrayItem(item,i);
         AnvirusProvider = cJSON_GetObjectItem(subitem,"malwareScanProvider")->valuestring;
         LastUpdate      = cJSON_GetObjectItem(subitem,"malwareScanProviderVer")->valuestring;
         ScanTime        = cJSON_GetObjectItem(subitem,"malwareScanProviderResultTime")->valuestring;
         ScanResult      = cJSON_GetObjectItem(subitem,"malwareScanProviderResult")->valuestring;
         
    	 printf("%d %s %s %s %s \r\n",i,AnvirusProvider,LastUpdate,ScanTime,ScanResult);
    	}
    	getch();
    	curl_easy_cleanup(curl);
    	curl_global_cleanup();
        return 0;
    }
    
    

     

     


    🏴‍☠️Hi'dan gelen varır Who'ya, Hi'da onun adıdır Who'da...
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    wh0
    wh0's avatar
    Kayıt Tarihi: 21/Temmuz/2008
    Homo

    Linux ortaminda derlemek icin;

    gcc main.c cJSON.c -lcurl -lm

     

     


    🏴‍☠️Hi'dan gelen varır Who'ya, Hi'da onun adıdır Who'da...
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    SinusX
    SinusX's avatar
    Kayıt Tarihi: 14/Aralık/2010
    Erkek

    Çok güzel görünüyor c'ye dönüş yapıcam galiba :)

     

    Hocam bu arada hangi distro o kullandığın linux ?


    Si vis pacem para bellum.
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    wh0
    wh0's avatar
    Kayıt Tarihi: 21/Temmuz/2008
    Homo
    SinusX bunu yazdı

    Çok güzel görünüyor c'ye dönüş yapıcam galiba :)

     

    Hocam bu arada hangi distro o kullandığın linux ?

    tesekkurler, arch linux


    🏴‍☠️Hi'dan gelen varır Who'ya, Hi'da onun adıdır Who'da...
Toplam Hit: 2798 Toplam Mesaj: 4