Skip to content

Instantly share code, notes, and snippets.

@matheusb-comp
Last active January 29, 2021 22:56
Show Gist options
  • Save matheusb-comp/a75fa47cb0e3622556701aceba2c3dc7 to your computer and use it in GitHub Desktop.
Save matheusb-comp/a75fa47cb0e3622556701aceba2c3dc7 to your computer and use it in GitHub Desktop.
Funcionamento orkestral/venom

WAPI Parasite (orkestral/venom)

A biblioteca define uma série de módulos para buscar dentro da variável window['webpackJsonp'], que é o output do Webpack.

Screenshot from 2021-01-29 18-50-38

A cada 100ms o código wapi.js verifica se existe e insere o "parasite" no window['webpackJsonp']. Esse "parasite" é uma função que é chamada com a lista de módulos como parâmetro.

A função então percorre os módulos procurando por objetos, carregando os módulos identificados pelas keys desses objetos, e verifcando se os módulos são os que estão sendo procurados.

Screenshot from 2021-01-29 19-05-37

Screenshot from 2021-01-29 19-06-23

Cada um desses módulos são adicionados à variável window.Store, exceto o módulo chamado Store, que é um objeto que inclui outros módulos (provavelmente esse módulo é a store do Redux que o WhatsApp utiliza). Então a função faz um merge do módulo Store no objeto window.Store.

Screenshot from 2021-01-29 19-09-35

Após a execução do "parasite", a variável window.Store possui os módulos que o WhatsApp utiliza para se comunicar com o servidor do WhatsApp.

Screenshot from 2021-01-29 19-12-55

Exemplo de função da biblioteca WAPI usando os módulos em window.Store:

Screenshot from 2021-01-29 19-45-16

Puppeteer

O código em browser.ts utiliza o Puppeteer para iniciar um browser, abrir a página do WhatsApp Web e injetar a biblioteca wapi.js.

Após isso, toda a interação é executada dentro da página desse browser, utilizando as funções exportas pelo WAPI.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment