sigalor / whatsapp-web-reveng Goto Github PK
View Code? Open in Web Editor NEWReverse engineering WhatsApp Web.
License: MIT License
Reverse engineering WhatsApp Web.
License: MIT License
I'm trying to implement the messaging part, but my knowledge regarding this type of project is very small, do you have alpha idea of how does the way data encryption work? after encrypted just send via websoket send? Do you have any idea of the structure of sending the message?
I'll just assume the code is right. I was a bit surprised to see ECB mentioned there as that alone would allow a few nefarious attacks on the ciphertext.
Hey
After getting annoyed of always having to scan the QR code I tried myself implementing the authentication after the initial one.
Sadly I was unable to do so. I am currently sending the exact same message as the web client does.
message = messageTag + ',["admin","login","' + clientToken + '","' + serverToken + '","' + self.loginInfo["clientId"] + '",takeover]';
self.activeWs.send(message);
Is there a way to contact you @sigalor ? Would like to work together.
Good afternoon!
I made the installation on a ubuntu 16.04 LTS server and when I click connect the following ERR_CONNECTION_REFUSED error appears:
Has anyone gone through this?
Thank you.
wtf, how did I create this issue
The value of BINARY_32 and PACKED_MAX in whatsapp_defines.py is both 254. I'm not sure if it's supposed to be like that but I figured someone who actually knows what this means should probably judge that.
Hi,
Just need a clarification here: your "Terms and Conditions" section can be interpreted to be part of the software's license, but the repository contains a LICENSE
file without these terms. So:
Are the terms in "Terms and Conditions" additional software license terms on top of the MIT License; or
Are the terms in "Terms and Conditions" just a disclaimer against supporting users who use the software for those purposes?
Note that the first option makes this software non-free and possibly GPL-incompatible, which could cause some interoperability problems.
On whatsapp web I can find any person is online with below code.
Store.Precense.find("[email protected]").then(function (d) { console.log(d.isOnline) })
but since few days it's not returning correct data until I open that contact's chat screen on my android.
Can I do then same thing with this or there is an other way?
I'm trying to follow Dealing with E2E media documentation, recently incorporated in pull request 42 by @valga and @sigalor
My implementation is on NodeJs but I believe I'm following everything step by step. However the decoded file is too small and cannot be opened. This a sample file you can run directly, documented step by step:
// How to install dependencies and run this index.js file:
// npm init
// npm install hkdf
// npm install atob
// npm install btoa
// node index.js
const crypto = require('crypto');
const HKDF = require('hkdf');
const atob = require('atob');
const btoa = require('btoa');
start();
function start()
{
// encodedHex is a very small encoded jpeg file downloaded as a .enc file from WhatsApp servers, and converted to an hex string. The decoded image itself shows a 4x4 pixel dark orange gradient. From here we'll try to decode the image.
var encodedHex = "15a15b57f8fe2cd238089b5d7cf021f3a870e70843b4267294e244d5868e14355810175c1657ff9e0d5b461a60c986a8bac76531566e7c46a986369f902ff695cd667294acb4dd7daf1f71b4f31444d1838c858ce0257f56c90ebf1b7ee9401d99c7f79c162b5a2eed4324b3d106dbfa99a3070c2c9e7a3b1f2e924b184e7c9557adc3a61b427963081b15a6146f13161cdd3d0aeccd58640fd3cd5f0fdfcc4f158ae8bdaf15e5587b5088bc6bec78091ebddae9ffcb651e3099102f9fd57ea9a88efc15547d49a9720c53fe839d11c4536c806c500462f4da53312ddd799c86f698f55d5330f1b8e344b4ba08193a052baf5d4092322a4c739b22dbe40103b286893c3d922c6b0e0dfdcb466ce6ecb3fc9b424eeed8e08ca01ec4f42515ecae6b99a7d69fdcac269c6e914268036bdb1e7623ae219b552a27e88be0eabaa532c0edbb222ecb186e8647";
var encodedBytes = hexToBytes(encodedHex);
console.log("encodedHex: " + encodedHex + " (" + encodedBytes.length + " bytes)");
// STEP 1: obtain mediaKey and decode it from Base64
var mediaKeyBase64 = "gd5RDqKHBi846u5UA3I5hMjgy5ygwPw6+4RttFbGP+M=";
var mediaKeyBytes = base64ToBytes(mediaKeyBase64);
// STEP 2: Expand it to 112 bytes using HKDF with "WhatsApp Image Keys" as input key material
var hkdf = new HKDF("sha256", new Uint8Array(32), mediaKeyBytes);
hkdf.derive("WhatsApp Image Keys", 112, function (mediaKeyExpanded)
{
console.log("mediaKeyExpanded: " + mediaKeyExpanded.toString("hex") + " (" + mediaKeyExpanded.length + " bytes)");
// STEP 3: Split mediaKeyExpanded into iv and cipherKey (macKey and refKey are not needed for decoding)
var iv = mediaKeyExpanded.slice(0, 16);
var cipherKey = mediaKeyExpanded.slice(16, 48);
console.log("iv: " + iv.toString("hex") + " (" + iv.length + " bytes)");
console.log("cipherKey: " + cipherKey.toString("hex") + " (" + cipherKey.length + " bytes)");
// STEP 4: Download .enc file (already loaded in encodedBytes) and discard the last 10 bytes (mac is not needed for decoding)
encodedBytes = encodedBytes.slice(0, -10);
// STEP 5: Validate media data. Skipping because it's not needed for decoding.
// STEP 6: Decrypt file with AES-CBC using cipherKey and iv, and unpad it.
var decipher = crypto.createDecipheriv("aes-256-cbc", cipherKey, iv);
decipher.update(encodedBytes);
var decoded = decipher.final();
console.log("decodedHex: " + decoded.toString("hex") + " (" + decoded.length + " bytes)");
//Output decodedHex is wrong, it should be = "ffd8ffe000104a46494600010100000100010000ffdb00430001010101010101010101010101020203020202020204030302030504050505040404050607060505070604040609060708080808080506090a09080a07080808ffdb00430101010102020204020204080504050808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808ffc00011080004000403012200021101031101ffc4001500010100000000000000000000000000000009ffc4001d1000020201050000000000000000000000000102030406071112b1ffc40014010100000000000000000000000000000009ffc40017110100030000000000000000000000000000010231ffda000c03010002110311003f00999bb55ab35ae7ca4e5cf55eb0005ed320ac3fffd9";
});
}
// Utils
function hexToBytes(hexStr)
{
var intArray = [];
for (var i = 0; i < hexStr.length; i+=2)
{
intArray.push(parseInt(hexStr.substr(i, 2), 16));
}
return new Uint8Array(intArray);
}
function base64ToBytes(base64Str)
{
var binaryStr = atob(base64Str);
var byteArray = new Uint8Array(binaryStr.length);
for (var i = 0; i < binaryStr.length; i++)
{
byteArray[i] = binaryStr.charCodeAt(i);
}
return byteArray;
}
And this is the output:
encodedHex: 15a15b57f8fe2cd238089b5d7cf021f3a870e70843b4267294e244d5868e14355810175c1657ff9e0d5b461a60c986a8bac76531566e7c46a986369f902ff695cd667294acb4dd7daf1f71b4f31444d1838c858ce0257f56c90ebf1b7ee9401d99c7f79c162b5a2eed4324b3d106dbfa99a3070c2c9e7a3b1f2e924b184e7c9557adc3a61b427963081b15a6146f13161cdd3d0aeccd58640fd3cd5f0fdfcc4f158ae8bdaf15e5587b5088bc6bec78091ebddae9ffcb651e3099102f9fd57ea9a88efc15547d49a9720c53fe839d11c4536c806c500462f4da53312ddd799c86f698f55d5330f1b8e344b4ba08193a052baf5d4092322a4c739b22dbe40103b286893c3d922c6b0e0dfdcb466ce6ecb3fc9b424eeed8e08ca01ec4f42515ecae6b99a7d69fdcac269c6e914268036bdb1e7623ae219b552a27e88be0eabaa532c0edbb222ecb186e8647 (330 bytes)
mediaKeyExpanded: b3326e24e192940b8f16ed6ce7f4bf536bb285165def426beb6379f5b1c5ea337fdf1dd5cbfb46c958e0ea2a9c149b102e5c5268b809f54244c0358a254cbacfefff07e27626983e8599c6ff2cf4f092a1ae646aac9658052cf0d0b06292ca6be05764485c7148866513fcf5eef5b500 (112 bytes)
iv: b3326e24e192940b8f16ed6ce7f4bf53 (16 bytes)
cipherKey: 6bb285165def426beb6379f5b1c5ea337fdf1dd5cbfb46c958e0ea2a9c149b10 (32 bytes)
decodedHex: b0005ed320ac3fffd9 (9 bytes)
The output (decodedHex) is wrong, it should be a much bigger 313 byte file. Any hint on what I'm doing wrong? I don't know the value of AES.block_size but I'm using "aes-256-cbc" as per link and because the key length is wrong for 128.
It would be great if someone could try to reproduce this in Python with the same input data provided and be able to generate the output small .jpeg file.
solve it
Hi, are you guys interested in having a logo for your app? Tell me what kind of logo you would like and I send you some ideas.
Hi today erro
window.Store.Wap.profilePicFind("[email protected]").then(res => console.log(res));
VM1372:1 Uncaught TypeError: Cannot read property 'Wap' of undefined
at :1:14
(anonymous) @ VM1372:1
Hey,
First, congrats it looks great!!!
One question, how can I send a message to a specific contact?
Regards,
Hi,
I've been using this project for a while without problems but since the last 2 days I've not been able to connect.
I get every time the following message on Chrome console while trying to connect to he API:
got message {from: "meta", type: "closed"}
Above I get the following message:
WebSocket connection to 'ws://localhost:2019/' failed: Connection closed before receiving a handshake response
This happens every time I click on the Click to connect to API button.
Backend, API server and HTTP server seems to be running fine.
Have you already tried to figure out what parameters are used for the "login" command? Here is a screenshot from Chrome DevTools:
This command is sent by the WhatsApp web application when an already authenticated client reopens a web socket connection (for example after page reloading or browser reopening).
Hint: I noticed that after sending a "login" command, a server "Conn" response no longer contains a "secret" along with other parameters. It confirms that the server implies that the client is already authenticated and has all required credentials (which is a perfectly valid assumption).
Tell me please. How can I get a message history with a contact? Thank you!
I wanted to know how this is different from Whatsapp Web and what is the significance of it in terms of extended capabilities?
Hello sigalor,
i started my panel and login successfully .
but how can find my image and send message. please guide me
thank Manoj Rao
Hi, and thanks for this titanic work!
It seems there is some inaccuracy in the description of the step #12:
Encode a message containing 32 null bytes with the shared secret using HMAC SHA256. Take this value and extend it to 80 bytes using HKDF. Call this value sharedSecretExpanded. This is done with HKDF(HmacSha256("\0"*32, sharedSecret), 80).
According to the code 32 null bytes
here is used as a key and not as a message.
I'm implementing the described algorithm for iOS and still cannot pass the HMAC validation, just trying to find where I could be wrong.
@sigalor
for subscribe iv add to
backend
whatapp-web-backend.py
with
elif cmd == "backend-subscribe": currWhatsAppInstance.subscribe(callback); self.sendJSON({ "type": "resource_subscribe", "resource": "whatsapp", "resource_instance_id": obj["whatsapp_instance_id"] }, tag);
and
add to
whatsapp.py
def subscribe(self): messageTag = str(getTimestamp()); self.activeWs.send(messageTag+',["action","presence","subscribe","number"]');
it's work greet it's subscribe but how can I edit it get parameter number like
def subscribe(number)
I need to send messages to numbers I have not yet saved to my contacts through WhatsApp. WhatsApp officially said that they provide an API, click to chat, that responds to an open-xdg native application, chats to a new number and creates a new room for that.
Is it possible to create a new chat with a new number without opening the native app or staying on the website of whatsapp-web_reveng? Alternatively, does an API exist to do this in a humanly way?
The pushname is the name the user configure after he creates his account in the app.
I tried to check on WA WEB but i couldn't find anything.
Hi,
Receiving the error
ValueError: unknown msg message type: contactMessage
in backend/decoder.py, line 342, in readMsgMessage
right after QR code recognition.
Hi,
Simple question how do you keep your WA account/s online? I mean WA app must be always online to be able to access WA web?
Hi there,
we are trying to send messages over the websocket connection, but WhatsApp always responds with a 401 stastus code. Our message object looks like this:
[
"action",
{
"type": "relay",
"epoch": "17"
},
[
[
"message",
null,
{
"key": {
"remoteJid": "[email protected]",
"fromMe": true,
"id": "01234567890ABCDEF0123"
},
"message": {
"conversation": "Your message"
},
"messageTimestamp": 1526455013,
"status": 1
}
]
]
]
Our workflow looks like this:
We implemented our own parser in golang and just wanted to check if you have more information on message sending. Our parser seems to be working, at least we can parse messages back and forth between the binary format and json with protobuf inside
If you set a breakpoint in the app.js in line 43808 you can check out the messages sent through WhatsAppWeb (see e.binaryOpts.debugObj.pb / xml for the data and e.serialize() for the ArrayBuffer).
We are unable to determine how the id is generated and don´t know if it´s relevant for the message we are sending.
We also don´t know if epoch is relevant, but it seems to be incremental.
Hello
I am a newbie I followed the instructions and successfully started the project, but I dont understand how to login in the system, Can somebody please elaborate the login steps
Thanks in advance
I'm using project demonstration.
got message {type: "error", reason: "Timeout", from: "api2client"}
When the client receives video, I get an exception:
File: "whatsapp.py", line 181, in onMessage
[1] {"message_type": messageType});
[1] File "./backend/whatsapp-web-backend.py", line 73, in <lambda>
[1] getAttr(cbSelf, "args")), moreArgs), getAttr(cbSelf, "tag")),
[1] File "./backend/whatsapp-web-backend.py", line 35, in sendJSON
[1] eprint("sending " + json.dumps(obj).encode('ascii'));
[1] File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 243, in dumps
[1] return _default_encoder.encode(obj)
[1] File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/encoder.py", line 207, in encode
[1] chunks = self.iterencode(o, _one_shot=True)
[1] File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/encoder.py", line 270, in iterencode
[1] return _iterencode(o, 0)
[1] UnicodeDecodeError: 'utf8' codec can't decode byte 0x96 in position 4: invalid start byte
And I cant get the encoded video
Message receiving works fine. But million dollar question :) HOW TO SEND MESSAGE BACK TO CONTACT ??
Hi guys, i'm storing the conn and login infos using pickle:
`
with open('conninfo', 'wb') as handle:
pickle.dump(self.connInfo, handle, protocol=pickle.HIGHEST_PROTOCOL)
with open('logininfo', 'wb') as handle:
pickle.dump(self.loginInfo, handle, protocol=pickle.HIGHEST_PROTOCOL) `
I restore those variables and then i can reconnect sucessfully, but only once! in the third try i receive a challenge message:
message:s1,["Cmd",{"type":"challenge","challenge":"wmpflh6NMtwbbjHgQ0iVpI9LNchZlIAwiOVauqmkGb4="}]
I tried to simulate that in the web client but no success, i didn't find any way to receive this challenge in the client.
Any ideias @sigalor ?
Hello!
I saw that we return from this amazing project when I get a file it returns me to mediaKey, I would like to know if this return is done by whatsapp server or has some way of generating it based on media_enc_hash and media_enc.
Connection of backend to WhatsApp failed: Timeout. Click to try again.
got message { command: 'backend-connectWhatsApp',
[0] from: 'client',
[0] type: 'call' }
[1] 1519677652386,{"command":"backend-connectWhatsApp","from":"api2backend","type":"call"}
[1] {u'from': u'api2backend', u'command': u'backend-connectWhatsApp', u'type': u'call'}
[1] [Errno -2] Name or service not known
[1] sending {"type": "resource_gone", "resource": "whatsapp", "resource_instance_id": "2d983339402140a39327621250975637", "from": "backend"}
[1] WhatsApp backend Websocket closed.
[0] got message { type: 'resource_gone',
[0] resource: 'whatsapp',
[0] resource_instance_id: '2d983339402140a39327621250975637',
[0] from: 'backend' }
Hi Guys,
reading the readme of this project made me wonder. The text says:
The keysDecrypted variable is 64 bytes long and contains two keys, each 32 bytes long. The encKey is used for decrypting binary messages sent to you by the WhatsApp Web server or encrypting binary messages you send to the server. The macKey is needed to validate the messages sent to you: encKey: keysDecrypted[:32] macKey: keysDecrypted[32:64]
When I use the official web client, would these be keys that are stored in my browsers local storrage? there is a variable there called WASecretBundle
...
And... I read:
AESDecrypt(encKey, messageContent[32:])
Which AESDecrypt function is this? I can't seem to find the source of a AESDecrypt function.. and, doesn't this need a IV parameter (initialization vector)?
window.Store == undefined
When I try to connect to the server
[0] got message { command: 'api-connectBackend', from: 'client', type: 'call' }
[1] sending {"type": "connected", "from": "backend"}
[1] ('127.0.0.1', 50372) connected to backend
[0] got message { from: 'meta', type: 'opened' }
[0] got message { type: 'connected', from: 'backend' }
[0] got message { command: 'backend-connectWhatsApp',
[0] from: 'client',
[0] type: 'call' }
[1] 1529099960012,{"command":"backend-connectWhatsApp","from":"api2backend","type":"call"}
[1] {u'from': u'api2backend', u'command': u'backend-connectWhatsApp', u'type': u'call'}
[1] [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:579)
[1] sending {"type": "resource_gone", "resource": "whatsapp", "resource_instance_id": "1c30db64f3d64f6b92469685d17c4910", "from": "backend"}
[1] WhatsApp backend Websocket closed.
This is the object tree I get when I receive an image, how do I convert this to normal file?
{
"actionKey": "msg",
"meta": {
"add": "relay"
},
"node": [{
"chat": "[email protected]",
"meta": {
"add": "relay"
},
"msg": {
"ack": 0,
"body": "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",
"broadcast": false,
"clientUrl": "https://mmg-fna.whatsapp.net/d/f/xxx.enc",
"filehash": "fn5nPoGofeP3lKvY0TUVfQBPEMZk9XaOq3vFNwgi1qc=",
"from": "[email protected]",
"id": {
"fromMe": false,
"id": "xxx",
"remote": "[email protected]"
},
"invis": false,
"mediaKey": "s9Fmwi/40YdCvkG3Gh5U8QcMdCfdFXV1U5hOJ+8uzis=",
"mimetype": "image/jpeg",
"protocolMessageKey": {},
"size": 140046,
"star": false,
"subtype": "unknown",
"t": 1525430894,
"to": "[email protected]",
"type": "image"
}
}]
}
This issue came from #45.
I have recompiled the WhatsApp APK without changing its source code, but it's not working after the recompilation process, because they are validating their APK signature.
I have also tried the same with GBWhatAapp; here, I don't get any errors and generally, it's working fine, but there is an issue with the network connection.
So I asked how to bypass this signature validation and @sigalor commented as he has already recompiled the WhatsApp APK and it's working fine. I'd appreciate if he would share how he did it.
EDIT: I have enabled logs for WhatsApp APK and I'm getting a bad-token error when I try to do registration or request-sms.
Hi, short question regarding encryption: Is WhatsApp-Web properly end-to-end encrypted? If i understood right, the phone needs to be online at all times in order to encrypt messages. So the chain of communication works like this(?): 1. Sending message via Whatsapp Web --> 2. message sent to WhatsApp server (websocket) -->3. server forwards message to phone --> phone encrypts message and sends it out to the server again?
Did I understand that right? Is the communication from step 1 - 3 readable by WhatsApp?
Also: In WhatsApp-Web, you can enable push notifications. In order for them to work, the messages need to be routed through a chrome/mozilla push-service. Does that mean that Google/Mozilla can read all the messages?
Thanks in advance!
Hello, I'm getting an error when trying to run for the first time.
npm start
[email protected] start /home/jnadinh/whatsapp-web-reveng-master
npm run dev
[email protected] dev /home/jnadinh/whatsapp-web-reveng-master
concurrently --kill-others "./node_modules/.bin/nodemon index.js -i client -e js" "./node_modules/.bin/nodemon --exec python ./backend/whatsapp_web_backend.py -i client -e py" "sass --sourcemap=none --watch `client/css/main.scss:client/css/main.css"
[2] /bin/sh: sass: no se encontró la orden
[2] sass --sourcemap=none --watch client/css/main.scss:client/css/main.css exited with code 127
--> Sending SIGTERM to other processes..
[1] ./node_modules/.bin/nodemon --exec python ./backend/whatsapp_web_backend.py -i client -e py exited with code null
[0] ./node_modules/.bin/nodemon index.js -i client -e js exited with code null
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] dev: `concurrently --kill-others "./node_modules/.bin/nodemon index.js -i client -e js" "./node_modules/.bin/nodemon --exec python ./backend/whatsapp_web_backend.py -i client -e py" "sass --sourcemap=none --watch client/css/main.scss:client/css/main.css"`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] dev script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /root/.npm/_logs/2018-06-13T02_11_45_386Z-debug.log
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] start: `npm run dev`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] start script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /root/.npm/_logs/2018-06-13T02_11_45_439Z-debug.log
Logfile:
0 info it worked if it ends with ok
1 verbose cli [ '/usr/bin/node', '/bin/npm', 'start' ]
2 info using [email protected]
3 info using [email protected]
4 verbose run-script [ 'prestart', 'start', 'poststart' ]
5 info lifecycle [email protected]~prestart: [email protected]
6 info lifecycle [email protected]~start: [email protected]
7 verbose lifecycle [email protected]~start: unsafe-perm in lifecycle true
8 verbose lifecycle [email protected]~start: PATH: /usr/lib/node_modules/npm/node_modules/npm-lifecycle/node-gyp-bin:/home/jnadinh/whatsapp-web-reveng-master/node_modules/.bin:/sbin:/bin:/usr/sbin:/usr/bin
9 verbose lifecycle [email protected]~start: CWD: /home/jnadinh/whatsapp-web-reveng-master
10 silly lifecycle [email protected]~start: Args: [ '-c', 'npm run dev' ]
11 silly lifecycle [email protected]~start: Returned: code: 1 signal: null
12 info lifecycle [email protected]~start: Failed to exec start script
13 verbose stack Error: [email protected] start: `npm run dev`
13 verbose stack Exit status 1
13 verbose stack at EventEmitter.emit (events.js:214:7)
13 verbose stack at ChildProcess.<anonymous> (/usr/lib/node_modules/npm/node_modules/npm-lifecycle/lib/spawn.js:55:14)
13 verbose stack at emitTwo (events.js:126:13)
13 verbose stack at ChildProcess.emit (events.js:214:7)
13 verbose stack at maybeClose (internal/child_process.js:925:16)
13 verbose stack at Process.ChildProcess._handle.onexit (internal/child_process.js:209:5)
14 verbose pkgid [email protected]
15 verbose cwd /home/jnadinh/whatsapp-web-reveng-master
16 verbose Linux 3.10.0-514.el7.x86_64
17 verbose argv "/usr/bin/node" "/bin/npm" "start"
18 verbose node v8.11.2
19 verbose npm v5.6.0
20 error code ELIFECYCLE
21 error errno 1
22 error [email protected] start: `npm run dev`
22 error Exit status 1
23 error Failed at the [email protected] start script.
23 error This is probably not a problem with npm. There is likely additional logging output above.
24 verbose exit [ 1, true ]
Hey man, great work! It's working perfectly!
Do you have any plans on adding a way to send messages in this project?
I'm not be able to generate QR code, it is running out of time. What could be reason for this?
Good afternoon people!
I did the installation and can start with npm start, but when access I'm with this rro, could someone help me?
WebSocket connection to 'ws://localhost:2019/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED
First, thanks a lot by this extensive documentation
In this section of the documentation:
Validating and decrypting messages
Now that you have the two keys, validating and decrypting messages the server sent to you is quite easy. Note that this is only needed for binary messages, all JSON you receive stays plain. The binary messages always have 32 bytes at the beginning that specify the HMAC checksum.
Took me a while to realize that the binary message comes with a tag that should be discarted.
I had to look in the implementation to understand that. I guess that this section could describe this too.
node -v
v10.2.1
npm -v
5.10.0
gem -v
2.5.2.1
python -v 2.7
pip -V pip 10.0.1 from /usr/local/lib/python2.7/dist-packages/pip (python 2.7)
OS Ubuntu 16.04 LTS
node index_jsdemo.js
whatsapp-web-reveng jsdemo server listening on port 2021
Browser Chrome
Version 66.0.3359.181 (Official Build) (64-bit)
try open
http://localhost:2021/
Upgrade Required
console browser
:2021/favicon.ico:1 Failed to load resource: the server responded with a status of 426 (Upgrade Required)
localhost/:1 Failed to load resource: the server responded with a status of 426 (Upgrade Required)
It took quite some time to get all the depencies, but I managed to do it, and this is what happens when I try to run the project. (Sorry for the poor formatting) fixed thanks to @SuperSandro2000!
I guess it seems like a Windows issue?
> [email protected] start C:\Users\User\Documents\Whatsapp\Web\whatsapp-web-reveng
> npm run dev
> [email protected] dev C:\Users\User\Documents\Whatsapp\Web\whatsapp-web-reveng
> concurrently --kill-others "./node_modules/.bin/nodemon index.js -i client -e js" "./node_modules/.bin/nodemon --exec python ./backend/whatsapp-web-backend.py -i client -e py" "sass --sourcemap=none --watch client/css/main.scss:client/css/main.css"
[0] '.' is not recognized as an internal or external command,
[0] operable program or batch file.
[1] '.' is not recognized as an internal or external command,
[1] operable program or batch file.
[1] ./node_modules/.bin/nodemon --exec python ./backend/whatsapp-web-backend.py -i client -e py exited with code 1
--> Sending SIGTERM to other processes..
[0] ./node_modules/.bin/nodemon index.js -i client -e js exited with code 1
[2] sass --sourcemap=none --watch client/css/main.scss:client/css/main.css exited with code 1
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] dev: `concurrently --kill-others "./node_modules/.bin/nodemon index.js -i client -e js" "./node_modules/.bin/nodemon --exec python ./backend/whatsapp-web-backend.py -i client -e py" "sass --sourcemap=none --watch client/css/main.scss:client/css/main.css"`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] dev script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! C:\Users\User\AppData\Roaming\npm-cache\_logs\2018-04-10T17_58_26_327Z-debug.log
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] start: `npm run dev`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] start script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! C:\Users\User\AppData\Roaming\npm-cache\_logs\2018-04-10T17_58_26_501Z-debug.log````
Hello
First of all, excellent project friend, I have been using yowsup for some time and I found out that your project existed and I want to try it.
My question is, what version of Windows works? I have Windows 10 and the truth is giving me many errors, I have installed the Node 8, python 2.7.15 64 bits.
The error that most presents is:
gcc exited with status 1
Thank you.
Hello, I'm getting an error when trying to run for the first time.
npm start
> [email protected] start D:\sourcesadg\Whatsapp
> npm run dev
> [email protected] dev D:\sourcesadg\Whatsapp
> concurrently --kill-others "./node_modules/.bin/nodemon index.js -i client -e js" "./node_modules/.bin/nodemon --exec python ./backend/whatsapp-web-backend.py -i client -e py" "sass --sourcemap=none --watch client/css/main.scss:client/css/main.css"
[0] '.' is not recognized as an internal or external command,
[0] operable program or batch file.
[0] ./node_modules/.bin/nodemon index.js -i client -e js exited with code 1
--> Sending SIGTERM to other processes..
[1] '.' is not recognized as an internal or external command,
[1] operable program or batch file.
[1] ./node_modules/.bin/nodemon --exec python ./backend/whatsapp-web-backend.py -i client -e py exited with code 1
[2] sass --sourcemap=none --watch client/css/main.scss:client/css/main.css exited with code 1
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] dev: `concurrently --kill-others "./node_modules/.bin/nodemon index.js -i client -e js" "./node_modules/.bin/nodemon --exec python ./backend/whatsapp-web-backend.py -i client -e py" "sass --sourcemap=none --watch client/css/main.scss:client/css/main.css"`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] dev script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! C:\Users\Alejandro\AppData\Roaming\npm-cache\_logs\2018-04-13T14_19_31_443Z-debug.log
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] start: `npm run dev`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] start script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! C:\Users\Alejandro\AppData\Roaming\npm-cache\_logs\2018-04-13T14_19_31_487Z-debug.log
Logfile:
0 info it worked if it ends with ok
1 verbose cli [ 'C:\\Program Files\\nodejs\\node.exe',
1 verbose cli 'D:\\SourcesADG\\Whatsapp\\node_modules\\npm\\bin\\npm-cli.js',
1 verbose cli 'run',
1 verbose cli 'dev' ]
2 info using [email protected]
3 info using [email protected]
4 verbose run-script [ 'predev', 'dev', 'postdev' ]
5 info lifecycle [email protected]~predev: [email protected]
6 info lifecycle [email protected]~dev: [email protected]
7 verbose lifecycle [email protected]~dev: unsafe-perm in lifecycle true
8 verbose lifecycle [email protected]~dev: PATH: D:\SourcesADG\Whatsapp\node_modules\npm\node_modules\npm-lifecycle\node-gyp-bin;D:\sourcesadg\Whatsapp\node_modules\.bin;C:\Program Files\nodejs\node_modules\npm\node_modules\npm-lifecycle\node-gyp-bin;D:\sourcesadg\Whatsapp\node_modules\.bin;C:\Python27\;C:\Python27\Scripts;C:\Program Files\Microsoft MPI\Bin\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\Microsoft SQL Server\110\Tools\Binn\ManagementStudio\;C:\Program Files (x86)\Microsoft SQL Server\110\Tools\Binn\;C:\Program Files\Microsoft SQL Server\110\Tools\Binn\;C:\Program Files (x86)\Microsoft SQL Server\110\DTS\Binn\;C:\Program Files\Microsoft SQL Server\110\DTS\Binn\;C:\Users\Alejandro\.dnx\bin;C:\Program Files\Microsoft DNX\Dnvm\;C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\110\Tools\Binn\;C:\Program Files (x86)\Microsoft SQL Server\120\Tools\Binn\;C:\Program Files\Microsoft SQL Server\120\Tools\Binn\;C:\Program Files\Microsoft SQL Server\120\DTS\Binn\;C:\Program Files (x86)\Skype\Phone\;C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\130\Tools\Binn\;C:\Program Files\7-Zip;C:\Program Files\TortoiseSVN\bin;C:\Program Files\Microsoft\Web Platform Installer\;C:\openssl;C:\Program Files\Java\jdk1.8.0_131\bin;D:\Drivers y programas\ngrok;C:\Program Files\nodejs\;C:\Program Files\MongoDB\Server\3.6\bin\;C:\Program Files\Git\cmd;C:\Program Files (x86)\Microsoft SQL Server\130\Tools\Binn\;C:\Program Files\Microsoft SQL Server\130\Tools\Binn\;C:\Program Files (x86)\Microsoft SQL Server\130\DTS\Binn\;C:\Program Files\Microsoft SQL Server\130\DTS\Binn\;C:\Program Files (x86)\Microsoft SQL Server\Client SDK\ODBC\130\Tools\Binn\;C:\Program Files (x86)\Microsoft SQL Server\140\Tools\Binn\;C:\Program Files (x86)\Microsoft SQL Server\140\DTS\Binn\;C:\Program Files (x86)\Microsoft SQL Server\140\Tools\Binn\ManagementStudio\;C:\Users\Alejandro\AppData\Local\Programs\Python\Python36-32\Scripts\;C:\Users\Alejandro\AppData\Local\Programs\Python\Python36-32\;C:\Users\Alejandro\AppData\Local\Microsoft\WindowsApps;C:\Program Files (x86)\Microsoft VS Code\bin;C:\Users\Alejandro\AppData\Roaming\npm
9 verbose lifecycle [email protected]~dev: CWD: D:\sourcesadg\Whatsapp
10 silly lifecycle [email protected]~dev: Args: [ '/d /s /c',
10 silly lifecycle 'concurrently --kill-others "./node_modules/.bin/nodemon index_jsdemo.js -i client -e js" "./node_modules/.bin/nodemon --exec python ./backend/whatsapp-web-backend.py -i client -e py" "sass --sourcemap=none --watch client/css/main.scss:client/css/main.css"' ]
11 silly lifecycle [email protected]~dev: Returned: code: 1 signal: null
12 info lifecycle [email protected]~dev: Failed to exec dev script
13 verbose stack Error: [email protected] dev: `concurrently --kill-others "./node_modules/.bin/nodemon index_jsdemo.js -i client -e js" "./node_modules/.bin/nodemon --exec python ./backend/whatsapp-web-backend.py -i client -e py" "sass --sourcemap=none --watch client/css/main.scss:client/css/main.css"`
13 verbose stack Exit status 1
13 verbose stack at EventEmitter.<anonymous> (D:\SourcesADG\Whatsapp\node_modules\npm\node_modules\npm-lifecycle\index.js:283:16)
13 verbose stack at emitTwo (events.js:126:13)
13 verbose stack at EventEmitter.emit (events.js:214:7)
13 verbose stack at ChildProcess.<anonymous> (D:\SourcesADG\Whatsapp\node_modules\npm\node_modules\npm-lifecycle\lib\spawn.js:55:14)
13 verbose stack at emitTwo (events.js:126:13)
13 verbose stack at ChildProcess.emit (events.js:214:7)
13 verbose stack at maybeClose (internal/child_process.js:925:16)
13 verbose stack at Process.ChildProcess._handle.onexit (internal/child_process.js:209:5)
14 verbose pkgid [email protected]
15 verbose cwd D:\sourcesadg\Whatsapp
16 verbose Windows_NT 10.0.16299
17 verbose argv "C:\\Program Files\\nodejs\\node.exe" "D:\\SourcesADG\\Whatsapp\\node_modules\\npm\\bin\\npm-cli.js" "run" "dev"
18 verbose node v8.9.4
19 verbose npm v5.8.0
20 error code ELIFECYCLE
21 error errno 1
22 error [email protected] dev: `concurrently --kill-others "./node_modules/.bin/nodemon index_jsdemo.js -i client -e js" "./node_modules/.bin/nodemon --exec python ./backend/whatsapp-web-backend.py -i client -e py" "sass --sourcemap=none --watch client/css/main.scss:client/css/main.css"`
22 error Exit status 1
23 error Failed at the [email protected] dev script.
23 error This is probably not a problem with npm. There is likely additional logging output above.
24 verbose exit [ 1, true ]
Hi there, thanks for doing all the hard work finding this out and putting it all in this repo!
I'm having an issue sending a message and am unable to find out what I'm doing wrong.
I used this: #63 (comment) and the golang library from @Rhymen as a reference (https://github.com/Rhymen/go-whatsapp).
The serialization I'm using is the whatsapp_binary_writer.py
included in this project.
These are the steps I'm taking:
key.fromMe = true
key.remoteJid = remoteJid
key.id = 10 byte hex code
(I've also tried 32 bytes)messageTimestamp = unix time now
status = 1
message.conversation = content of message
["action", { "type": "relay", "epoch": "1" }, [ [ "message", None, <serializedWebMessageInfo> ] ]]
and pass it through whatsappWriteBinary
getTimeStamp
macKey
encKey
<tag>,<0x16><0x00><hashed><encrypted>
I don't get any response from WA, so it's hard for me to find out what exactly goes wrong. @Rhymen or @sigalor have you encountered this? And if so; could you help me in the right direction?
Thanks so much!
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.