Closed Greenlamp2 closed 5 years ago
J'ai réussi à comprendre qu'il fallait utiliser proxychains4 :p Alors déja, j'ai du export LD_Preload=/usr/lib/i386-linux-gnu/libproxychains.so.3 la version 32-bits car dofus est en 32-bits. sadly, même en donnant mon fichier de configuration, ça ne marche toujours pas comme voulu, en effet, je vois ça: alors que dans mon proxychains.conf je dis bien d'utiliser le port 8000, hors, ici j'ai l'impression qu'il utilise le port 9050. Je perd espoir :p
(Ma supposition est que wine marche pas bien avec proxychains)
Bonjour, j'aurai plus de temps dans 2 semaines. Je suis inscrit sur le discord de Cadernis, j'y passe quelques fois par mois.
Je n'ai pas utilisé mon code depuis plusieurs mois.
Le sniffeur fonctionne (à l'exception de certains paquets), mais le MITM est encore en phase de développement. Le mieux est donc de lire le code. Il y a des instructions à la fin du README.md
.
https://github.com/louisabraham/LaBot/blob/master/labot/mitm/proxychains.py est codé pour macos, il faut donc légèrement modifier la commande pour que ça fonctionne. Il y a une config proxychain qui est fournie https://github.com/louisabraham/LaBot/blob/master/labot/mitm/proxychains.conf
Toutes les connexions du jeu sont redirigées pour passer par un proxy http sur le port 8000, lequel est codé dans https://github.com/louisabraham/LaBot/blob/master/labot/mitm/proxy.py. Il faut donc lancer à la fois le jeu et le proxy pour que cela fonctionne. C'est ce que fait le module https://github.com/louisabraham/LaBot/blob/master/labot/mitm/launch.py
yep merci, au final mon probleme venait du fait que wine marchait pas correctement avec proxychains, j'ai donc installer le launcher ankama et là c'est bon j'ai l'impression qu'il y a un début de communication J'arrive toujours pas à passer la connection, mais je pense que je suis sur la bonne voie :D
voici pour linux ce qu'il faut mettre:
newenv = {**os.environ,
'LD_PRELOAD':
'/usr/lib/libproxychains4.so'}
Est-ce que tu utilises bien launch.py ?
Tu peux essayer de vérifier si proxychains marche en lançant proxychains.py (donc sans serveur proxy http) avec un serveur bidon ncat -lk 8000
qui affichera les requêtes CONNECT.
oui, et proxychains fonctionne bien, car je vois bien la connection http s'établir, mais je vois que
data = r.recv(8192)
reçois tjrs ceci:
data: b''
ncat -lk 8000
CONNECT 127.0.0.1:0 HTTP/1.0
Host: 127.0.0.1:0
CONNECT dl.ak.ankama.com:80 HTTP/1.0
Host: dl.ak.ankama.com:80
CONNECT ankama.akamaized.net:443 HTTP/1.0
Host: ankama.akamaized.net:443
CONNECT sentry.io:443 HTTP/1.0
Host: sentry.io:443
CONNECT api.ankama.com:443 HTTP/1.0
Host: api.ankama.com:443
CONNECT haapi.ankama.com:443 HTTP/1.0
Host: haapi.ankama.com:443
CONNECT www.dofus.com:443 HTTP/1.0
Host: www.dofus.com:443
CONNECT sentry.io:443 HTTP/1.0
Host: sentry.io:443
CONNECT dl.ak.ankama.com:80 HTTP/1.0
Host: dl.ak.ankama.com:80
CONNECT ankama.akamaized.net:443 HTTP/1.0
Host: ankama.akamaized.net:443
CONNECT sentry.io:443 HTTP/1.0
Host: sentry.io:443
CONNECT dl.ak.ankama.com:80 HTTP/1.0
Host: dl.ak.ankama.com:80
CONNECT www.dofus.com:443 HTTP/1.0
Host: www.dofus.com:443
CONNECT 34.252.21.81:5555 HTTP/1.0
Host: 34.252.21.81:5555
CONNECT api.ankama.com:443 HTTP/1.0
Host: api.ankama.com:443
CONNECT 34.252.21.81:5555 HTTP/1.0
Host: 34.252.21.81:5555
CONNECT api.ankama.com:443 HTTP/1.0
Host: api.ankama.com:443
CONNECT 52.17.231.202:5555 HTTP/1.0
Host: 52.17.231.202:5555
oui, et proxychains fonctionne bien, car je vois bien la connection http s'établir, mais je vois que
data = r.recv(8192)
reçois tjrs ceci:data: b''
quelle ligne du code ?
et voici ce que j'ai quand je print coJeu et data:
coJeu:
<socket.socket fd=5, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 8000), raddr=('127.0.0.1', 51572)>
data: b''
coJeu:
<socket.socket fd=5, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 8000), raddr=('127.0.0.1', 51576)>
data: b''
coJeu:
<socket.socket fd=5, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 8000), raddr=('127.0.0.1', 51580)>
data: b''
coJeu:
<socket.socket fd=5, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 8000), raddr=('127.0.0.1', 51584)>
data: b''
coJeu:
<socket.socket fd=5, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 8000), raddr=('127.0.0.1', 51588)>
data: b''
coJeu:
<socket.socket fd=5, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 8000), raddr=('127.0.0.1', 51592)>
data: b''
coJeu:
<socket.socket fd=5, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 8000), raddr=('127.0.0.1', 51596)>
data: b''
coJeu:
<socket.socket fd=5, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 8000), raddr=('127.0.0.1', 51600)>
data: b''
Lorsque je fais coSer.recv(8192), je reçois bien quelque chose on dirait.
/home/username/anaconda2/envs/py3/bin/python /home/username/Github/LaBot/launchMitm.py
server started
data: b'\x00\x05\x08\x00\x00\x07c\x00\x00\x07v'
20:36:09.403 DEBUG: Thread-2 - msg.fromRaw(): Trying to parse message from raw buffer...
20:36:09.403 DEBUG: Thread-2 - msg.fromRaw(): Message has id 1
20:36:09.404 DEBUG: Thread-2 - msg.fromRaw(): Could not parse message: Not complete
20:36:09.438 DEBUG: Thread-2 - msg.fromRaw(): Trying to parse message from raw buffer...
20:36:09.438 DEBUG: Thread-2 - msg.fromRaw(): Message has id 1
20:36:09.438 DEBUG: Thread-2 - msg.fromRaw(): Parsed message with ID 1
20:36:09.438 DEBUG: Thread-2 - msg.__init__(): Initialized Msg with id 1
----------------------------------------
Exception happened during processing of request from ('127.0.0.1', 51630)
Traceback (most recent call last):
File "/home/username/anaconda2/envs/py3/lib/python3.6/socketserver.py", line 654, in process_request_thread
self.finish_request(request, client_address)
File "/home/username/anaconda2/envs/py3/lib/python3.6/socketserver.py", line 364, in finish_request
self.RequestHandlerClass(request, client_address, self)
data: b'\x00\x0e\x01U\x00 jr5aybou%Q\\q<_h]^t`\'8CXQbrfv@Y/j\xb1\x02\x1aT\xda\x0b*\x1dU\xfb~}\x0e\xda\xbe\xa1\xe7P\xbb\xcbF \xdc\x13\x99Th\xd1[\xff\x00\x0eQ\'T\x10\x01HnG\x08}\x18JD\n\x8d\xf5\xa9\xdc\xca\x14\xc4\xcb\x94\xdf&\xcf\xa5+?F\x07\xb8\xd4H\xe5]\xf45\xda\xdca\xf8\xf8\xd7?\xce\xb0\'\x89\xf0/I\xab\xa9O\x1f\x97\x84$x\t{.l)\xf4q\xc8\xa1\xe7*\xf7\xdf\xdce\x7f\xffd5\x19\xa7\xde|W*\xdd\x0b{zu\x1d\x11\xa8(x\x06PE\xaf"\xd3T\x9f\xa3\xf5\x9c\x04D\xd8\xdc\xa0\xd2\x83\xe9Y\x08\xe4\xf3\xf3\xe8~\x1bI\xa7\x98\x1c\xf7\x82\x0e@NB\xd5eU\xaa)v\xbb\xfcC\xc7m\xe1\xc4\x8c\x820\xc6O\x1c\x86"a\xf9@\xa6\xcf\x9a$\xb9\xb2\x1a@j\x10\xa5\x19\xc4;}_jy\x1b\xd8e\xb4\xe2\xbd\xc00\x13\xcd\xd8\xf4m\xccN\xbc\x16gp\xf3\x82\n|1\xa3\x93Scj\xe6$\xf4\x08\xbd\x99\xaa\xe1\x82\x05\xe6\x83{~\xf5Y\xe8\xa3~\xe2\xe3\xe1\xc9\x905[\x97z\xa0\xb5e\x8fA\xa0N\xffe\x02c\x99\xc1\xfcj\xd0\xfcf|\xdc\xb5\x8fe6\x9f\xff\xc4\xfc\xdbi.\xcc\xce\xbbb\xabUU4\xcbD\'\x15\x9c'
File "/home/username/anaconda2/envs/py3/lib/python3.6/socketserver.py", line 724, in __init__
self.handle()
File "/home/username/anaconda2/envs/py3/lib/python3.6/http/server.py", line 418, in handle
self.handle_one_request()
File "/home/username/anaconda2/envs/py3/lib/python3.6/http/server.py", line 406, in handle_one_request
method()
File "/home/username/Github/LaBot/labot/mitm/proxy.py", line 33, in do_CONNECT
Bridge(self.connection, coServ, MsgBridgeHandler).run()
File "/home/username/Github/LaBot/labot/mitm/bridge.py", line 128, in run
self.bridge_handler.handle(data, origin=r)
File "/home/username/Github/LaBot/labot/mitm/bridge.py", line 82, in handle
% (msgType, parsedMsg, msg.data)
AssertionError: All content of {'name': 'ProtocolRequired', 'path': PosixPath('/home/username/Github/LaBot/sources/scripts/com/ankamagames/dofus/network/messages/handshake/ProtocolRequired.as'), 'parent': None, 'protocolId': 1, 'vars': [{'name': 'requiredVersion', 'length': None, 'type': 'Int'}, {'name': 'currentVersion', 'length': None, 'type': 'Int'}], 'boolVars': []} have not been read into {'__type__': 'ProtocolRequired', 'requiredVersion': 1910, 'currentVersion': 917845}:
Data(bytearray.fromhex('00000776000e015500206a72356179626f7525515c713c5f685d5e746027384358516272667640592f6ab1021a54da0b2a1d55fb7e7d0edabea1e750bbcb4620dc13995468d15bff000e5127541001486e47087d184a440a8df5a9dcca14c4cb94df26'))
----------------------------------------
oui, et proxychains fonctionne bien, car je vois bien la connection http s'établir, mais je vois que
data = r.recv(8192)
reçois tjrs ceci:data: b''
quelle ligne du code ?
J'ai juste rajouter un petit print('data: %s' % str(data)) en dessous
Normalement PrintingMsgBridgeHandler est utilisé donc il devrait afficher tous les messages.
Ici, l'erreur déclenchée servait à s'assurer que j'arrivais bien à lire les messages. ProtocolRequired est le premier message donc il n'arrive à rien lire.
Est-ce que tu as pu regénérer le protocole en utilisant une version récente des sources décompilées et en lançant protocolBuilder.py
?
Oui j'ai bien générer protocol.pk.
J'ai modifier un peu ce code: https://github.com/louisabraham/LaBot/blob/7301bfc66ec50b206c153744b577b384865c920f/labot/mitm/bridge.py#L115
En ceci:
Et j'utilise à la place le bridge DummyBridgeHandler,
Mais maintenance j'obtiens ces erreurs:
File "/home/gknuts/Github/LaBot/labot/mitm/bridge.py", line 44, in handle self.other[origin].sendall(data) BrokenPipeError: [Errno 32] Broken pipe
je suis maudis à rien réussir du premier coup ahah
Coucou, J'ai lu +- tout ce que tu as écrit sur un certain forum, mais je suis toujours bloqué à cette étape, je n'arrive pas à faire en sorte que lorsque je lance le client dofus, le traffic passe par le serveur local.
Je suis sous linux, donc ton code ne marche pas dans mon cas, sauf si j'ai mal compris quelque chose.
Merci !
PS: as-tu un Discord sur lequel je pourrais éventuellement te poser directement mes questions ? ou préfères-tu que je le fasse ici comme ça si quelqu'un d'autre est intéressé par les réponses, il peut les voir ?