8 điểm bởi GN⁺ 2025-04-22 | 1 bình luận | Chia sẻ qua WhatsApp
  • TikTok sử dụng máy ảo (VM) để tăng cường các lớp bảo mật và làm rối mã
  • Dự án này reverse engineering máy ảo (VM) chạy trên web để phân tích cách vượt qua cơ chế bảo mật và cách tạo chữ ký cho yêu cầu
  • Mục tiêu cốt lõi là webmssdk.js, chứa mã VM tham gia tạo X-Bogus và _signature
  • Dự án gỡ rối mã JavaScript, phân tích và decompile bytecode của TikTok VM để khôi phục ở mức hàm có ý nghĩa
  • Qua đó có thể tạo cả _signature cần thiết cho các yêu cầu cần xác thực, ví dụ như đăng bình luận
  • VM được thiết kế tinh vi, có các cấu trúc bytecode nâng cao như vòng lặp, xử lý ngoại lệ, quản lý phạm vi

Tổng quan dự án reverse engineering TikTok VM

  • TikTok sử dụng một máy ảo (VM) bị làm rối mã dựa trên JavaScript để tạo chữ ký yêu cầu phía client, bảo vệ dữ liệu và ngăn việc vượt qua cơ chế bảo mật
  • Dự án này nhắm tới việc khôi phục thuật toán ký (X-Bogus, _signature) thông qua gỡ rối mã và decompile tệp webmssdk.js

Phân tích các tính năng và cấu trúc cốt lõi

Gỡ rối mã

  • TikTok làm rối mã bằng cách lập chỉ mục chuỗi bằng mảng và ký pháp ngoặc vuông

    r[Gb[301]](Gb[57], e)  
    
  • Việc giải mã mảng Gb được xử lý bằng thay thế sử dụng bảng chuỗi cố định

  • Sau khi giải mã toàn bộ mẫu này, mã được chuyển sang ký pháp chấm (dot notation) dễ đọc hơn

Loại bỏ làm rối mã ở lời gọi hàm

  • Các hàm được lưu trong mảng Ab và được gọi bằng chỉ mục

    Ab[31](args) → Ab31(args)  
    
  • Dùng parser AST để tách chúng thành các hàm riêng lẻ, đặt tên, rồi chỉnh lại cách gọi

Giải mã bytecode

  • Bytecode được cấu thành phức tạp bằng mã hóa base64 + gzip + leb128 + XOR

    r = tính khóa XOR  
    tái dựng tập lệnh bằng giải nén và giải mã leb128  
    
  • Mỗi hàm được cấu thành dựa trên bytecode, và cấu trúc hàm được khôi phục qua quá trình decompile

Đặc điểm của TikTok VM

  • Được nâng cấp hơn VM thông thường với hàm lồng nhau, quản lý scope, xử lý ngoại lệ, rẽ nhánh điều kiện, v.v.
  • Mỗi lệnh được ngụy trang bằng cấu trúc if-else thay vì switch → sau đó được khôi phục về dạng switch case

Decompile và debug

  • Mỗi hàm bytecode được decompile về mức hàm JS thông thường và lưu dưới dạng VMxxx.js
  • Ví dụ: VM223trình tạo ký tự ngẫu nhiên
  • Việc debug được thực hiện bằng cách dùng Tampermonkey + tiện ích vượt CSP của Chrome để thay thế JS gốc bằng các tệp đã decompile

Phân tích chữ ký (Signing)

Cấu trúc header yêu cầu

  • Khi gửi yêu cầu đến máy chủ sẽ kèm 3 header bổ sung
    • msToken : do máy chủ cấp, được tạo lại ở mỗi yêu cầu
    • X-Bogus : được tạo từ yêu cầu trong webmssdk.js
    • _signature : dùng cho các yêu cầu cần xác thực, được webmssdk.js tạo ra
  • Các yêu cầu tra cứu người dùng thông thường chỉ cần X-Bogus
  • Các yêu cầu xác thực như đăng bình luận cũng cần _signature

Luồng hàm trong VM

  • VM86: điểm vào của toàn bộ quá trình tạo chữ ký
  • VM113: tạo X-Bogus
  • VM189: tạo _signature
  • Có thể tái hiện luồng này bằng signer.js để ký URL

Các cơ chế bảo vệ bổ sung

  • Theo dõi chuột: VM120
  • Kiểm tra môi trường: VM265
  • Tuy nhiên tất cả đều là biện pháp bảo vệ phía client và không có giao tiếp với máy chủ → có thể bỏ qua khi tạo chữ ký

Lưu ý và bảo trì

  • TikTok VM được cập nhật liên tục → khi cấu trúc thay đổi sẽ cần decompile lại
  • Dự án này chủ yếu phù hợp cho phân tích bảo mật, nghiên cứu công nghệ chống bot và mục đích giáo dục

1 bình luận

 
GN⁺ 2025-04-22
Ý kiến trên Hacker News
  • Tôi đang dùng một trang web phát trực tuyến thường xuyên bị giật và hiện thông báo lỗi. Tôi đang phân tích mã JavaScript để tìm cách khắc phục, và trợ lý AI đã giúp ích rất nhiều trong việc hiểu mã bị làm rối

    • Có thể dùng AI để viết lại các hàm JavaScript khó hiểu theo cách dễ đọc hơn và thêm chú thích
    • AI giúp đoán tên biến hoặc tên hàm để hiểu hành vi ở mức cao của mã
    • Rất khuyến nghị những người làm công việc tương tự sử dụng AI agent như một công cụ
  • Có thể thay thế tệp JavaScript chạy trên web bằng tệp đã được giải làm rối để sử dụng TikTok bình thường

    • Có thể dùng Tampermonkey và tiện ích mở rộng CSP để lấy tệp từ một nguồn bị chặn
    • Có thể dùng Local Overrides của Chrome DevTools để đạt hiệu quả tương tự mà không cần tiện ích mở rộng của bên thứ ba
  • Có vẻ họ đang bỏ ra rất nhiều công sức để che giấu mã. Điều này có thể cản trở việc tối ưu hóa chương trình và làm tăng độ phức tạp, từ đó gây ra nhiều lỗi hơn

    • Có thể hiểu ý định ngăn bot, nhưng cần một phương pháp hiệu quả hơn
    • Không thể ngăn được các bản sao, vì chúng có thể xem cách nó hoạt động và đảo ngược theo kiểu hộp đen
  • Tôi đã tìm thấy trong bookmark một ví dụ về việc đảo ngược TikTok VM

  • Tôi luôn thích đọc các bài viết về nỗ lực đảo ngược, và bài này rất dễ theo dõi

    • Nhiều trang web và dịch vụ chống bot mặc định dùng kiểm tra môi trường và theo dõi chuyển động chuột
    • Luôn rất thú vị khi xem mất bao lâu để dịch vụ thay đổi cơ chế sau khi các biện pháp này bị vô hiệu hóa
  • Không có lý do chính đáng nào để một nền tảng mạng xã hội sử dụng mức độ làm rối như thế này

  • Câu hỏi về VM là gì

    • Tôi từng có kinh nghiệm dùng VM để xây dựng môi trường kiểm thử trên nhiều hệ điều hành khác nhau
    • JavaScript Virtual Machine hoạt động như hệ điều hành riêng của nó trên hệ điều hành chủ
    • VM được thảo luận trong TFA không phải là loại VM này
    • Gần đây "VM" được dùng trong nhiều ngữ cảnh khác nhau nên khá dễ gây nhầm lẫn
  • Câu hỏi liệu có phải là VM liên quan đến Lynx hay không

    • Cung cấp liên kết LynxJS
    • Đã được thảo luận trên Hacker News liên kết
  • Câu hỏi liệu ứng dụng iOS cũng có VM hay không

    • Nghĩ rằng VM sẽ đi ngược lại chính sách của Apple
  • Tôi từng làm việc với bot TikTok một thời gian, và việc đó cực kỳ khó