Auties00 / Cobalt

Standalone unofficial fully-featured Whatsapp Web and Mobile API for Java and Kotlin
MIT License
648 stars 188 forks source link

Session drop due to decryption error #236

Closed ZiemlichUndead closed 1 year ago

ZiemlichUndead commented 1 year ago

I have ran WhatsAppWeb4J v3.1.2 for a while (2 Weeks approx) and after that time I got these exceptions and the session dropped without reconnecting: java.lang.RuntimeException: Cannot decrypt data using AesGMC: ebe7(...) at it.auties.whatsapp.crypto.AesGmc.cipher(AesGmc.java:35) at it.auties.whatsapp.crypto.AesGmc.decrypt(AesGmc.java:48) at it.auties.whatsapp.crypto.Handshake.cipher(Handshake.java:32) at it.auties.whatsapp.socket.AuthHandler.loginSocket(AuthHandler.java:65) at it.auties.whatsapp.socket.SocketHandler.onMessage(SocketHandler.java:189) at it.auties.whatsapp.socket.SocketSession$WebSocketSession.onBinary(SocketSession.java:135) at jdk.internal.reflect.GeneratedMethodAccessor44.invoke(Unknown Source) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at org.glassfish.tyrus.core.AnnotatedEndpoint.callMethod(AnnotatedEndpoint.java:556) at org.glassfish.tyrus.core.AnnotatedEndpoint$WholeHandler$1.onMessage(AnnotatedEndpoint.java:655) at org.glassfish.tyrus.core.TyrusSession.notifyMessageHandlers(TyrusSession.java:591) at org.glassfish.tyrus.core.TyrusEndpointWrapper.onMessage(TyrusEndpointWrapper.java:806) at org.glassfish.tyrus.core.TyrusWebSocket.onMessage(TyrusWebSocket.java:183) at org.glassfish.tyrus.core.frame.BinaryFrame.respond(BinaryFrame.java:70) at org.glassfish.tyrus.core.ProtocolHandler.process(ProtocolHandler.java:819) at org.glassfish.tyrus.client.TyrusClientEngine$TyrusReadHandler.handle(TyrusClientEngine.java:726) at org.glassfish.tyrus.container.grizzly.client.GrizzlyClientFilter$ProcessTask.execute(GrizzlyClientFilter.java:452) at org.glassfish.tyrus.container.grizzly.client.TaskProcessor.processTask(TaskProcessor.java:91) at org.glassfish.tyrus.container.grizzly.client.TaskProcessor.processTask(TaskProcessor.java:68) at org.glassfish.tyrus.container.grizzly.client.GrizzlyClientFilter.handleRead(GrizzlyClientFilter.java:248) at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:88) at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:246) at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:178) at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:118) at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:96) at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:51) at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:510) at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:82) at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:83) at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:101) at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:535) at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:515) at java.base/java.lang.Thread.run(Thread.java:833) Caused by: org.bouncycastle.crypto.InvalidCipherTextException: mac check in GCM failed at org.bouncycastle.crypto.modes.GCMBlockCipher.doFinal(Unknown Source) at it.auties.whatsapp.crypto.AesGmc.cipher(AesGmc.java:32) ... 33 more java.lang.RuntimeException: Cannot decrypt data using AesGMC: 23106d(...) at it.auties.whatsapp.crypto.AesGmc.cipher(AesGmc.java:35) at it.auties.whatsapp.crypto.AesGmc.decrypt(AesGmc.java:48) at it.auties.whatsapp.crypto.Handshake.cipher(Handshake.java:32) at it.auties.whatsapp.socket.AuthHandler.loginSocket(AuthHandler.java:65) at it.auties.whatsapp.socket.SocketHandler.onMessage(SocketHandler.java:189) at it.auties.whatsapp.socket.SocketSession$WebSocketSession.onBinary(SocketSession.java:135) at jdk.internal.reflect.GeneratedMethodAccessor44.invoke(Unknown Source) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at org.glassfish.tyrus.core.AnnotatedEndpoint.callMethod(AnnotatedEndpoint.java:556) at org.glassfish.tyrus.core.AnnotatedEndpoint$WholeHandler$1.onMessage(AnnotatedEndpoint.java:655) at org.glassfish.tyrus.core.TyrusSession.notifyMessageHandlers(TyrusSession.java:591) at org.glassfish.tyrus.core.TyrusEndpointWrapper.onMessage(TyrusEndpointWrapper.java:806) at org.glassfish.tyrus.core.TyrusWebSocket.onMessage(TyrusWebSocket.java:183) at org.glassfish.tyrus.core.frame.BinaryFrame.respond(BinaryFrame.java:70) at org.glassfish.tyrus.core.ProtocolHandler.process(ProtocolHandler.java:819) at org.glassfish.tyrus.client.TyrusClientEngine$TyrusReadHandler.handle(TyrusClientEngine.java:726) at org.glassfish.tyrus.container.grizzly.client.GrizzlyClientFilter$ProcessTask.execute(GrizzlyClientFilter.java:452) at org.glassfish.tyrus.container.grizzly.client.TaskProcessor.processTask(TaskProcessor.java:91) at org.glassfish.tyrus.container.grizzly.client.TaskProcessor.processTask(TaskProcessor.java:68) at org.glassfish.tyrus.container.grizzly.client.GrizzlyClientFilter.handleRead(GrizzlyClientFilter.java:248) at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:88) at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:246) at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:178) at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:118) at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:96) at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:51) at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:510) at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:82) at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:83) at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:101) at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:535) at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:515) at java.base/java.lang.Thread.run(Thread.java:833) Caused by: org.bouncycastle.crypto.InvalidCipherTextException: mac check in GCM failed at org.bouncycastle.crypto.modes.GCMBlockCipher.doFinal(Unknown Source) at it.auties.whatsapp.crypto.AesGmc.cipher(AesGmc.java:32) ... 33 more Disconnected with reason: RECONNECTING Disconnected with reason: RECONNECTING

Auties00 commented 1 year ago

This is already fixed on the master branch. In short, it happened because processing messages asynchronously is not a good idea and I was doing it