Firefox Cookies

Ich habe vor längerer Zeit ein kleines Programm entwickelt, was sich unter Verwendung von Sitzungscookies auf einer bestimmten anmeldepflichtigen Seite automatisch einloggt und bestimmte Transaktionen durchführt.
Nun sieht es so aus, dass durch die Session ID lediglich einer eingeloggt sein kann (d.h. ich werde aus der Seite herausgeworfen, wenn sich das Programm anmeldet).

Ich wünsche mir nun ein Programm oder einfach einen Lösungsweg, wie ich die Session IDs für meinen Browser (Firefox) und den Bot austauschen kann, sodass beide gleichzeitig eingeloggt sein können.

Manuell ist es mir zwar gelungen, die SID der Cookies des Bots in Firefox zu importieren und gleichzeitig online zu sein, doch ist das sehr langwierig (FF-Addon SQLite Manager öffnen -> Eintrag heraussuchen -> SID des Bots heraussuchen -> editieren).

Die SID des Bots kann ich dann z.B. bei jedem Login auf einem Webspace hochladen (als Datei) und Firefox, oder irgendein externes Programm, sollte sich dann diese Datei herunterladen und importieren.

Habt ihr Lösungsvorschläge dafür?


Lg, acdc


PS: Bot liegt auf einem externen Server

Edit: Ich weiß, das ist ein ziemlich schwieriges Problem, doch ich hoffe, dass ich hier Hilfe bekomme :)
 
Also eigentlich ist das ja irrelevant. So ein Problem kann man bei jeder beliebigen Seite bemerken, sofern diese eine Cookie-gestützte Anmeldung besitzt.

Auch hackerboard.de
 
Also wie ich das verstehe ist dein einziges Problem, die SID vom Bot auf deinen Rechner zu bekommen und in Firefox zu implementieren.

Das du rausgeschmißen wirst, liegt wahrscheinlich daran das deinem Account, bei einer einwahl, eine neue SID zugewiesen wird, und der Webserver, immer nur eine für einen Account zulässt.

Du könntest denn Bot die SessionID als ne Textdatei auf dem jeweiligen Webspace hinterlegen,(muss dir wahrscheinlich nicht sagen das du dafür sorgen musst das kein anderer da ran kommt..^^).
oder was auch möglich wär du schreibst dir nen Server für deinen Pc, sprich der bei dir aufm Computer Zuhause läuft und der sich die SID vom Bot schicken lässt. Ist eigtl relativ einfach, zur Sicherheit könntest du dann ne Art authentifizierung hinzufügen, und beispielweise nur Verbindungen vom Server deines Bots zulassen.
(Kommt natürlich drauf an ob dein Bot nur auf nem normalen Webserver oder so läuft, und wenn ja was er da alles an Rechten hat),
Wenn der Server die SID erhalten hat, öffnet er die .mozilla/.../cookie Datei, und fügt dort denn Cookie ein.
Wie Firefox die cookie Datei parst kann ich dir leider nicht sagen, aber darüber findest du sicher was im Netz.

Falls du C Socket-Programming , oder halt ne andere Sprache soweit beherrschst ist das sicher umsetzbar, ob sich das dann für dein Vorhaben lohnt ist die andere Sache.

Oder du schreibst einen Client der sich die Datei vom Webserver/bot hollt, ist auch relativ einfach, weil der Name der Datei mit der SID sich ja nicht ändert und der Client ja nur nen einfachen HTTP GET machen muss.

EDIT:
Falls du nicht weist wie man automatisiert was von nem Webserver herunterlädt, mach zB Wireshark an dann Verbinde dich auf denn Webserver und lad die datei runter, dann suchst du bei Wireshark nach dem TCP/SYN zum Webserver und machst "follow in tcp-stream(oder so ähnlich)"
und versuchst dann einfach genau das gleiche mit deinem Client.

EDIT:
Oder du implementierst dir was mit wget.
 
Das sind schon gute Ansätze, aber ich weiß eben nicht, wie ich schnell (bestenfalls einfach) die Cookie Datenbank von Firefox parsen und editieren kann.

Im Internet habe ich zu den neuen sqlite Datenbanken von Firefox 3.x nichts gefunden

Edit: mein bot ist nur aus wget und sed aufggebaut :D
 
Hab jetzt mal zum Spass nen Client geschrieben der Die SID_datei runterlädt, und bei dir speichert.
Musst die addresse und denn pfad in der shell angeben, oder du kompillst es mit gesetzten Makros.

Code:
#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <unistd.h>
#include <netdb.h>
#include <arpa/inet.h>
#include <string.h>
#include <netinet/in.h>

#define SERVER_OF_BOT "not set"
#define PATH_TO_SIDFILE "not set"

int recvstring(int sockfd, char *buffer, int size){
    int recvd = 1, max;
    max = size;
    while(recvd != 0 && max > 0){
        if((recvd = recv(sockfd, buffer, 1024, 0))==-1)
            return -1;
        max -= recvd;
    }
    return size-max;
}

int sendstring(int sockfd, char *msg){
    int send_n_bytes = strlen(msg), sent;
    while(send_n_bytes != 0){
        if((sent = send(sockfd, msg, strlen(msg), 0))==-1)
            return -1;
        send_n_bytes -= sent;
    }
    return strlen(msg);
}

void usage(char *name){
    printf("usage:%s <HOST> <PATH>\n", name);
    exit(0);
}

void err_quit(char *err){
    printf("ERROR: %s\n", err);
    exit(0);
}


int main(int argc, char **argv){
    int sockfd, status;
    struct addrinfo hints, *res;
    char *server, recvbuffer[40000], *path;
    short flag = 0;
    char query[128];
    FILE *fp;

    if(argc != 3)
        flag++;
    bzero(&hints, sizeof(hints));
    hints.ai_family = AF_INET;
    hints.ai_socktype = SOCK_STREAM;
    
    if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
        err_quit("in socket()\n");
                                         
    if(!strcmp(SERVER_OF_BOT, "not set")){
            server = argv[1];
    }else
        server = SERVER_OF_BOT;
    if((status = getaddrinfo(server, "80", &hints, &res)) != 0){
        printf("%s\n", gai_strerror(status));
        exit(0);
    }

    if((status = connect(sockfd, res->ai_addr, res->ai_addrlen)) == -1)
       err_quit("while connecting");

    if(!strcmp(PATH_TO_SIDFILE, "not set")){
            if(flag)
                usage(argv[0]);
            path = argv[2];
    }else
       path = PATH_TO_SIDFILE; 


    strcat(query, "GET /");
    strcat(query, path);
    strcat(query, " HTTP/1.0\n");
    strcat(query, "Host: "); 
    strcat(query, server);
    strcat(query, "\r\n\r\n");
    if((sendstring(sockfd, query)) == -1)
       err_quit("sendstring");

    if((status = recvstring(sockfd, recvbuffer, sizeof(recvbuffer)))==-1)
        err_quit("recvstring");

    printf("recved %d bytes\n", status);
    fp = fopen("SID_FILE", "w+");
    fwrite(recvbuffer, status, 1, fp);
    fclose(fp);
    close(sockfd);
    return 0;
}
Bei mir läufts aber wenn irgendwas nicht geht sagen ^^.
Glaub nicht das es dir viel bringen wird aber da kann man leichter denn Parser drauf aufbauen.
 
Original von jemo.
Und dein Bot ist illegal, da ich dieses Spiel auch spiele und die Regeln durchgelesen hab.

Es geht hier nicht um den bot, sondern um die SID Uebergabe.

@prEs: Vielen Dank fuer deine Muehe. Ich werds mir mal anschauen :)

Jetzt habe ich nurnoch das Problem mit dem Parsen der Cookiedatei..
 
Hmm
also hab mir jetzt über SQLite3 mal diese Datenbank (.mozilla/firefox/*/cookie.sqlite angschaut.
Man braucht nicht nur die SID sondern auch die noch ein paar andere Werte, was aber relativ einfach ist, weils nur Namen und Verfallsdatum etc sind.

Gibt den entsprechenden Header . sqlite3.h , dannach muss man wenn ich mich nicht irre eigtl nur paar INSERTS in denn table cookies machen.
Vielleicht versuch ich morgen mal das in C umzusetzen.
 
Das wäre großartig, wenn du die Zeit dazu hast. Ich glaube meine C++ Kenntnisse reichen da im Moment noch nicht dafür aus
 
Ich habe vor längerer Zeit ein kleines Programm entwickelt, was sich unter Verwendung von Sitzungscookies auf einer bestimmten anmeldepflichtigen Seite automatisch einloggt und bestimmte Transaktionen durchführt.
Also gut ich gebe euch die URL

das nennt sich bot und ist nach den Regeln NICHT ERLAUBT

du forderst hilfe an die die funktionalität des bots verbessert/die benutzung des bots einfacher macht.

das is illegal
falsches board
 
Um mal eins klarzustellen: einen Bot für "die Stämme" oder irgendein anderes Spiel zu progammieren ist nicht illegal. Illegal bedeutet "gegen das Gesetz" und das wäre ja noch schöner, wenn einfach irgendwelche Webseiten durch ihre AGB die Gesetzgebung beeinflussen könnten. Schlimmstenfalls wird dein Account gesperrt, das wars aber auch schon.

Edit: Verdammt, da war der CDW schneller :)

Edit2: Mal ontopic, könntest du nicht eine Art Proxy in den Bot einbauen? Also so, dass der Bot quasi ständig verbunden ist, und immer wenn du spielen willst, verbindest du dich nicht mit die-staemme.de oder sonstwas, sondern mit dem Proxy, der dann eine Befehle an die-staemme.de weiterleitet.
 
Ausserdem muss man das ganze mal von dem Aspekt betrachten:

Er fragt ja nicht nach Hifle um einen Bot zu coden, sondern nur eine Datei von nem Webserver zu ziehen und die dann per SQL in eine Datei zu parsen.

Würd das gerne coden, weils mir Spass macht Probleme zu lösen, hab im Moment leider nicht soviel Zeit , und vorallem bin ich mit sqlite nicht so bewandert.
Also wenn jemand bisschen Ahnung hat wie man die cookie.sqlite per sqlite am besten manipuliert ..
->melden ^^.

mfg prEs
 
Original von farhaven
Edit2: Mal ontopic, könntest du nicht eine Art Proxy in den Bot einbauen? Also so, dass der Bot quasi ständig verbunden ist, und immer wenn du spielen willst, verbindest du dich nicht mit die-staemme.de oder sonstwas, sondern mit dem Proxy, der dann eine Befehle an die-staemme.de weiterleitet.

Naja, das wäre ziemlich umständlich, denn dem Bot habe ich nur das Nötigste implementiert, damit er schnell ist und nicht soviel Traffic verbraucht.
Ich habe ihn auf einem Freeshell Anbieter gehostet, deswegen muss ich vorsichtig mit den Ressourcen umgehen.
Er lädt deshalb auch nur die jeweils benötigte Seite herunter und z.B. keine Bilder (ohne die, unter anderem, Stämme nicht wirklich Spaß macht)
 
Zurück
Oben