8 คะแนน โดย GN⁺ 2025-04-22 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • TikTok ใช้ เครื่องเสมือน (VM) เพื่อเสริมชั้นความปลอดภัยและการทำให้อ่านโค้ดยากขึ้น
  • โปรเจ็กต์นี้ทำการ รีเวิร์สเอนจิเนียริงเครื่องเสมือน (VM) บนเว็บนี้ เพื่อวิเคราะห์การข้ามกลไกความปลอดภัยและวิธีสร้างลายเซ็นคำขอ
  • เป้าหมายหลักคือ webmssdk.js ซึ่งมี โค้ด VM ที่เกี่ยวข้องกับการสร้าง X-Bogus และ _signature
  • โปรเจ็กต์นี้ถอดการทำให้อ่านยากของ JavaScript วิเคราะห์และดีคอมไพล์ไบต์โค้ดของ TikTok VM เพื่อ กู้คืนกลับสู่ระดับฟังก์ชันที่มีความหมาย
  • ด้วยสิ่งนี้จึงสามารถสร้าง _signature ที่จำเป็นสำหรับคำขอที่ต้องมีการยืนยันตัวตนได้ด้วย (เช่น การเขียนคอมเมนต์)
  • VM นี้ถูกออกแบบมาอย่างซับซ้อน และมี โครงสร้างไบต์โค้ดขั้นสูง เช่น ลูป การจัดการข้อยกเว้น และการจัดการสโคป

ภาพรวมของโปรเจ็กต์รีเวิร์สเอนจิเนียริง TikTok VM

  • TikTok ใช้เครื่องเสมือน (VM) ที่ถูกทำให้อ่านยากบนพื้นฐาน JavaScript เพื่อสร้างลายเซ็นคำขอฝั่งไคลเอนต์ ปกป้องข้อมูล และป้องกันการข้ามมาตรการความปลอดภัย
  • โปรเจ็กต์นี้มีเป้าหมายเพื่อ กู้คืนอัลกอริทึมการลงลายเซ็น (X-Bogus, _signature) ผ่านการถอดการทำให้อ่านยากและดีคอมไพล์ไฟล์ webmssdk.js

การวิเคราะห์ฟังก์ชันหลักและโครงสร้าง

การถอดการทำให้อ่านยาก

  • TikTok ทำให้โค้ดอ่านยากด้วยการอ้างอิงสตริงผ่านอาร์เรย์และการเขียนแบบวงเล็บ

    r[Gb[301]](Gb[57], e)  
    
  • การถอดรหัสอาร์เรย์ Gb ใช้วิธีแทนค่าจากตารางสตริงคงที่

  • หลังจากถอดรหัสแพตเทิร์นเหล่านี้ทั้งหมดแล้ว จะแปลงเป็น dot notation ที่อ่านง่าย

การลบความอ่านยากของการเรียกฟังก์ชัน

  • ฟังก์ชันต่าง ๆ ถูกเก็บไว้ในอาร์เรย์ Ab และถูกเรียกผ่านดัชนี

    Ab[31](args) → Ab31(args)  
    
  • ใช้ตัวแยกวิเคราะห์ AST เพื่อแยกออกเป็นฟังก์ชันเดี่ยว กำหนดชื่อ และปรับรูปแบบการเรียกใหม่

การถอดรหัสไบต์โค้ด

  • ไบต์โค้ดถูกประกอบอย่างซับซ้อนด้วยการเข้ารหัสแบบ base64 + gzip + leb128 + XOR

    r = คำนวณคีย์ XOR  
    สร้างชุดคำสั่งใหม่ด้วยการคลายการบีบอัดและถอดรหัส leb128  
    
  • แต่ละฟังก์ชันถูกสร้างบนพื้นฐานของไบต์โค้ด และโครงสร้างฟังก์ชันถูกกู้คืนผ่านกระบวนการดีคอมไพล์

คุณลักษณะของ TikTok VM

  • มี ฟังก์ชันซ้อน สโคปแมนเนจเมนต์ การจัดการข้อยกเว้น การแตกแขนงตามเงื่อนไข ฯลฯ จึงซับซ้อนกว่า VM ทั่วไป
  • คำสั่งแต่ละตัวถูกพรางไว้ด้วยโครงสร้าง if-else แทน switch → จึงมีการ กู้คืนให้อยู่ในรูปแบบ switch case

การดีคอมไพล์และการดีบัก

  • ฟังก์ชันไบต์โค้ดแต่ละตัวจะถูกดีคอมไพล์ให้อยู่ในระดับฟังก์ชัน JS ปกติ และบันทึกในรูปแบบ VMxxx.js
  • ตัวอย่าง: VM223 คือ ตัวสร้างอักขระแบบสุ่ม
  • การดีบักทำผ่าน Chrome โดยใช้ Tampermonkey + ส่วนขยายข้าม CSP เพื่อแทนที่ JS ต้นฉบับด้วยไฟล์ที่ดีคอมไพล์แล้ว

การวิเคราะห์การลงลายเซ็น

โครงสร้างส่วนหัวของคำขอ

  • เมื่อส่งคำขอไปยังเซิร์ฟเวอร์ จะมีส่วนหัวเพิ่มเติม 3 รายการ
    • msToken : ออกโดยเซิร์ฟเวอร์ และถูกสร้างใหม่ทุกคำขอ
    • X-Bogus : สร้างจากคำขอใน webmssdk.js
    • _signature : ใช้กับคำขอที่ต้องมีการยืนยันตัวตน และสร้างโดย webmssdk.js
  • คำขอทั่วไป เช่น การดูข้อมูลผู้ใช้ ต้องใช้เพียง X-Bogus
  • คำขอที่มีการยืนยันตัวตน เช่น การเขียนคอมเมนต์ ต้องใช้ _signature ด้วย

ลำดับการทำงานของฟังก์ชัน VM

  • VM86: จุดเริ่มต้นของการสร้างลายเซ็นทั้งหมด
  • VM113: สร้าง X-Bogus
  • VM189: สร้าง _signature
  • สามารถจำลองลำดับการทำงานนี้ใน signer.js เพื่อใช้ลงลายเซ็น URL ได้

กลไกป้องกันเพิ่มเติม

  • การติดตามเมาส์: VM120
  • การตรวจสอบสภาพแวดล้อม: VM265
  • อย่างไรก็ตาม สิ่งเหล่านี้เป็น การป้องกันฝั่งไคลเอนต์ทั้งหมดและไม่มีการสื่อสารกับเซิร์ฟเวอร์ → จึงสามารถละเลยได้ในการสร้างลายเซ็น

ข้อควรระวังและการบำรุงรักษา

  • TikTok VM มี การอัปเดตอย่างต่อเนื่อง → หากโครงสร้างเปลี่ยน จะต้องดีคอมไพล์ใหม่
  • โปรเจ็กต์นี้เหมาะกับ การวิเคราะห์ความปลอดภัย การวิจัยเทคโนโลยีป้องกันบอต และวัตถุประสงค์ด้านการศึกษา เป็นหลัก

1 ความคิดเห็น

 
GN⁺ 2025-04-22
ความคิดเห็นจาก Hacker News
  • ฉันใช้เว็บไซต์สตรีมมิงที่มักสะดุดและแสดงข้อความผิดพลาดอยู่บ่อย ๆ จึงกำลังวิเคราะห์โค้ด JavaScript เพื่อหาทางแก้ และผู้ช่วย AI ก็ช่วยได้มากในการทำความเข้าใจโค้ดที่ถูก obfuscate

    • สามารถใช้ AI เขียนฟังก์ชัน JavaScript ที่อ่านยากใหม่ให้เข้าใจง่ายขึ้นและเพิ่มคอมเมนต์ได้
    • AI ช่วยเดาชื่อตัวแปรหรือชื่อฟังก์ชัน ทำให้เข้าใจพฤติกรรมระดับสูงของโค้ดได้
    • ขอแนะนำอย่างยิ่งให้คนที่ทำงานลักษณะคล้ายกันใช้ AI agent เป็นเครื่องมือ
  • สามารถใช้งาน TikTok ได้ตามปกติโดยแทนที่ไฟล์ JavaScript ที่รันบนเว็บด้วยไฟล์ที่ถอด obfuscation แล้ว

    • สามารถใช้ Tampermonkey และส่วนขยาย CSP เพื่อดึงไฟล์จากแหล่งที่มาที่ถูกบล็อกได้
    • สามารถใช้ Local Overrides ใน Chrome DevTools เพื่อให้ได้ผลแบบเดียวกันโดยไม่ต้องพึ่งส่วนขยายของบุคคลที่สาม
  • ดูเหมือนว่าจะทุ่มเทอย่างมากเพื่อซ่อนโค้ด ซึ่งอาจขัดขวางการเพิ่มประสิทธิภาพของโปรแกรม เพิ่มความซับซ้อน และทำให้เกิดข้อผิดพลาดมากขึ้น

    • เข้าใจเจตนาที่ต้องการป้องกันบอต แต่จำเป็นต้องมีวิธีที่มีประสิทธิภาพกว่านี้
    • ไม่สามารถหยุดโคลนได้ และโคลนก็สามารถดูวิธีการทำงานแล้วทำ reverse engineering แบบ black-box ได้
  • พบตัวอย่างการ reverse engineering TikTok VM จากบุ๊กมาร์ก

  • ชอบอ่านบทความเกี่ยวกับความพยายามในการ reverse engineering อยู่เสมอ และบทความนี้ก็อ่านตามได้ง่าย

    • เว็บไซต์จำนวนมากและบริการป้องกันบอตมักใช้การตรวจสอบสภาพแวดล้อมและติดตามการเคลื่อนไหวของเมาส์เป็นพื้นฐาน
    • หลังจากมาตรการเหล่านี้ถูกทำให้ใช้การไม่ได้แล้ว ก็น่าสนใจเสมอที่จะดูว่าบริการต้องใช้เวลานานแค่ไหนในการเปลี่ยนกลไก
  • ไม่มีเหตุผลอันชอบธรรมที่แพลตฟอร์มโซเชียลมีเดียจะต้องใช้การ obfuscation ระดับนี้

  • คำถามเกี่ยวกับ VM คืออะไร

    • เคยมีประสบการณ์ใช้ VM เพื่อสร้างสภาพแวดล้อมทดสอบบนระบบปฏิบัติการที่หลากหลาย
    • JavaScript Virtual Machine ทำงานเป็นระบบปฏิบัติการของตัวเองอยู่บน host OS
    • VM ที่กล่าวถึงใน TFA ไม่ใช่ VM ประเภทนี้
    • ระยะหลังมีการใช้คำว่า "VM" ในหลายบริบท จึงทำให้สับสน
  • คำถามว่าเกี่ยวข้องกับ VM ที่เกี่ยวกับ Lynx หรือไม่

  • คำถามว่าในแอป iOS ก็มี VM ด้วยหรือไม่

    • คิดว่า VM น่าจะขัดกับนโยบายของ Apple
  • เคยทำงานเกี่ยวกับบอต TikTok อยู่ช่วงหนึ่ง และมันยากมาก