รีเวิร์สเอนจิเนียริง TikTok VM ที่ถูกทำให้อ่านยาก
(github.com/LukasOgunfeitimi)- 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 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ฉันใช้เว็บไซต์สตรีมมิงที่มักสะดุดและแสดงข้อความผิดพลาดอยู่บ่อย ๆ จึงกำลังวิเคราะห์โค้ด JavaScript เพื่อหาทางแก้ และผู้ช่วย AI ก็ช่วยได้มากในการทำความเข้าใจโค้ดที่ถูก obfuscate
สามารถใช้งาน TikTok ได้ตามปกติโดยแทนที่ไฟล์ JavaScript ที่รันบนเว็บด้วยไฟล์ที่ถอด obfuscation แล้ว
ดูเหมือนว่าจะทุ่มเทอย่างมากเพื่อซ่อนโค้ด ซึ่งอาจขัดขวางการเพิ่มประสิทธิภาพของโปรแกรม เพิ่มความซับซ้อน และทำให้เกิดข้อผิดพลาดมากขึ้น
พบตัวอย่างการ reverse engineering TikTok VM จากบุ๊กมาร์ก
ชอบอ่านบทความเกี่ยวกับความพยายามในการ reverse engineering อยู่เสมอ และบทความนี้ก็อ่านตามได้ง่าย
ไม่มีเหตุผลอันชอบธรรมที่แพลตฟอร์มโซเชียลมีเดียจะต้องใช้การ obfuscation ระดับนี้
คำถามเกี่ยวกับ VM คืออะไร
คำถามว่าเกี่ยวข้องกับ VM ที่เกี่ยวกับ Lynx หรือไม่
คำถามว่าในแอป iOS ก็มี VM ด้วยหรือไม่
เคยทำงานเกี่ยวกับบอต TikTok อยู่ช่วงหนึ่ง และมันยากมาก