Fazendo engenharia reversa da VM ofuscada do TikTok
(github.com/LukasOgunfeitimi)- O TikTok usa uma máquina virtual (VM) para reforçar a camada de segurança e ofuscação
- Este projeto faz engenharia reversa dessa máquina virtual (VM) baseada na web para analisar como funcionam o bypass de segurança e a geração de assinaturas de requisição
- O alvo principal é
webmssdk.js, que contém o código da VM envolvido na geração de X-Bogus e _signature - O projeto desfaz a ofuscação do JavaScript e analisa e decompila o bytecode da VM do TikTok para restaurá-lo até um nível significativo de funções
- Com isso, torna-se possível até gerar a
_signaturenecessária em requisições que exigem autenticação, como publicar comentários - A VM é projetada de forma sofisticada e possui estruturas avançadas de bytecode, como loops, tratamento de exceções e gerenciamento de escopo
Visão geral do projeto de engenharia reversa da VM do TikTok
- O TikTok usa uma máquina virtual (VM) ofuscada baseada em JavaScript para gerar assinaturas de requisições do cliente, proteger dados e impedir bypass de segurança
- Este projeto tem como objetivo restaurar os algoritmos de assinatura (X-Bogus, _signature) por meio da desofuscação e decompilação do arquivo
webmssdk.js
Análise dos principais recursos e da estrutura
Desofuscação
-
O TikTok ofusca strings indexando-as com arrays e notação de colchetes
r[Gb[301]](Gb[57], e) -
A descriptografia do array
Gbé tratada por substituição usando uma tabela fixa de strings -
Depois de decodificar todos esses padrões, eles são convertidos para a notação de ponto (dot notation), mais legível
Remoção da ofuscação de chamadas de função
-
As funções são armazenadas no array
Abe chamadas por índiceAb[31](args) → Ab31(args) -
Um parser de AST é usado para separar isso em funções individuais, nomeá-las e também ajustar a forma de chamada
Descriptografia do bytecode
-
O bytecode é montado de forma complexa com criptografia base64 + gzip + leb128 + XOR
r = cálculo da chave XOR descompressão e decodificação leb128 para reconstruir o conjunto de instruções -
Cada função é baseada em bytecode, e sua estrutura é restaurada por meio do processo de decompilação
Características da VM do TikTok
- É mais avançada que uma VM comum, com funções aninhadas, gerenciamento de escopo, tratamento de exceções e desvios condicionais
- Cada instrução é disfarçada em uma estrutura
if-elseem vez deswitch→ isso é restaurado para a forma de switch case
Decompilação e depuração
- Cada função de bytecode é decompilada até o nível de uma função JS normal e salva no formato VMxxx.js
- Exemplo: VM223 é um gerador de caracteres aleatórios
- A depuração é feita substituindo o JS original pelos arquivos decompilados usando a extensão Tampermonkey + bypass de CSP no Chrome
Análise de assinatura (Signing)
Estrutura dos headers de requisição
- Três headers adicionais são incluídos nas requisições ao servidor
msToken: emitido pelo servidor, regenerado a cada requisiçãoX-Bogus: gerado nowebmssdk.jscom base na requisição_signature: usado em requisições que exigem autenticação, gerado porwebmssdk.js
- Requisições comuns de consulta de usuário precisam apenas de
X-Bogus - Requisições autenticadas, como publicar comentários, também precisam de
_signature
Fluxo das funções da VM
- VM86: ponto de entrada de toda a geração de assinatura
- VM113: geração de
X-Bogus - VM189: geração de
_signature - É possível assinar URLs reproduzindo esse fluxo com signer.js
Mecanismos adicionais de proteção
- Rastreamento do mouse: VM120
- Verificação de ambiente: VM265
- Porém, tudo isso é proteção do lado do cliente e não envolve comunicação com o servidor → pode ser ignorado para a geração de assinaturas
Observações e manutenção
- A VM do TikTok é atualizada continuamente → se a estrutura mudar, será necessária uma nova decompilação
- Este projeto é mais adequado para análise de segurança, pesquisa sobre tecnologias anti-bot e fins educacionais
1 comentários
Comentários do Hacker News
Eu uso um site de streaming que trava com frequência e mostra mensagens de erro. Estou analisando o código JavaScript para encontrar uma solução, e um assistente de IA foi de grande ajuda para entender o código ofuscado
É possível substituir os arquivos JavaScript executados na web por versões desofuscadas e usar o TikTok normalmente
Parece que estão se esforçando muito para esconder o código. Isso pode atrapalhar a otimização do programa, aumentar a complexidade e acabar gerando mais erros
Encontrei nos meus favoritos um exemplo de engenharia reversa da VM do TikTok
Sempre gosto de ler textos sobre esforços de engenharia reversa, e este artigo foi fácil de acompanhar
Não existe motivo legítimo para uma plataforma de rede social usar esse nível de ofuscação
Pergunta sobre o que é uma VM
Pergunta se é uma VM relacionada ao Lynx
Pergunta se também existe uma VM no app para iOS
Trabalhei por um tempo com bots para TikTok, e foi muito difícil