louisabraham / LaBot

Bot Dofus 2 en Python 3
MIT License
79 stars 37 forks source link

Question frida / proxifier #25

Closed krm35 closed 4 years ago

krm35 commented 4 years ago

Hello,

J'essaye de faire un mitm pour retro du coup j'utilise le script fourni. Le client est bien redirigé vers mon serveur mais il envoie seulement : "CONNECT 54.194.75.38:443 HTTP/1.0", du coup j'ouvre une connexion vers cette addresse et j'envoie ce message puis je recois le "HC" que je transmet au client mais après plus rien ne se passe. Je comprend pas pourquoi.

louisabraham commented 4 years ago

Il ne faut pas envoyer le CONNECT, juste ouvrir la connexion et forwarder les paquets dans les deux sens

krm35 commented 4 years ago

D'acc du coup j'ai modifié et j'envoie plus le CONNECT mais même résultat dans la console j'obtiens ça :

node index.js connected with server 54.194.75.38 443 from server HCdoxxxxxxxxxxxxxxxxxxxxxxxxxx

je pige pas pourtant c'est un code simple :(

const net = require('net'),
    server = new net.Server().listen(5555);

server.on('connection', function (socket) {
    handleSocket(socket);
});

function handleSocket(socket) {
    socket.on('data', function (data) {
        const str = data.toString();
        if (str.includes('CONNECT')) {
            const splitted = str.split(' ')[1].split(':');
            const ip = splitted[0], port = splitted[1];
            connectClient(socket, ip, port);
        } else {
            console.log("from client", str);
            socket['myclient'].write(data);
        }
    });
}

function connectClient(socket, ip, port) {
    socket['myclient'] = new net.Socket();

    socket['myclient'].connect({
        host: ip,
        port: port
    });

    socket['myclient'].on('connect', function () {
        console.log("connected with server", ip, port);
    });

    socket['myclient'].on('data', function (data) {
        const str = data.toString();
        console.log("from server", str);
        socket.write(data);
    });
}
louisabraham commented 4 years ago

Je ne comprends pas non plus, mais je ne pense pas que ça vienne de fritm / labot. Tu peux obtenir de l'aide ici : https://discord.gg/U4GMrAW

krm35 commented 4 years ago

Assez bizarre car quand je rajoute ça dans le config.xml :

< connserver name="prox" ip="127.0.0.1" port="5555"/ >

le mitm fonctionne bien :(

Peut-être que le script https://github.com/louisabraham/LaBot/blob/master/proxifier/script.js est uniquement adapté à 2.0 et pas à 1.29 ? Possible que l'architecture 32 bits est un impact sur le pb car ma vm est en 32 bits ?

const net = require('net'),
    authServer = new net.Server().listen(5555);

authServer.on('connection', function (socket) {
    connectClient(socket, "54.194.75.38", 443);
    handleSocket(socket);
});

function handleSocket(socket) {
    socket.on('data', function (chunk) {
    console.log('from client', chunk.toString());
        socket['myclient'].write(chunk);
    });

    socket.on('end', function () {
    });

    socket.on('error', function (err) {
    });
}

function connectClient(socket, ip, port) {
    socket['myclient'] = new net.Socket();

    socket['myclient'].connect({
        host: ip,
        port: port
    });

    socket['myclient'].on('connect', function () {
    });

    socket['myclient'].on('data', function (data) {
    console.log('from server', data.toString());
        socket.write(data);
    });

    socket['myclient'].on('close', function () {
    });

    socket['myclient'].on('error', function (err) {
    });
}
krm35 commented 4 years ago

Bon bonne nouvelle, il suffit de supprimer cette partie du script et ça tourne :

    onLeave: function (retval) {
        console.log("retval:", retval.toInt32());
        var connect_request = "CONNECT " + this.addr + ":" + this.port + " HTTP/1.0\n\n";
        var buf_send = Memory.allocUtf8String(connect_request);
        socket_send(this.sockfd.toInt32(), buf_send, connect_request.length, 0);
        var buf_recv = Memory.alloc(512);
        var recv_return = socket_recv(this.sockfd.toInt32(), buf_recv, 512, 0);
        while (recv_return == -1) {
            Thread.sleep(0.05);
            recv_return = socket_recv(this.sockfd.toInt32(), buf_recv, 512, 0);
        }
        console.log(buf_recv.readCString().split('\n')[0], '\n');
    }