Reverse engineering máy ảo TikTok bị làm rối mã
(github.com/LukasOgunfeitimi)- 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ả
_signaturecầ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
Abvà được gọi bằng chỉ mụcAb[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-elsethay 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ụ: VM223 là trì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ầuX-Bogus: được tạo từ yêu cầu trongwebmssdk.js_signature: dùng cho các yêu cầu cần xác thực, đượcwebmssdk.jstạ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
Ý 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ể 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ó 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
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
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ì
Câu hỏi liệu có phải là VM liên quan đến Lynx hay không
Câu hỏi liệu ứng dụng iOS cũng có VM hay không
Tôi từng làm việc với bot TikTok một thời gian, và việc đó cực kỳ khó