2018/02/21

Cheating Facebook Live Photo

TLDR; PoC ở cuối bài.



Năm trước, tôi - sau một thời gian khá lâu, có một chuyến đi xa không phải là đi onsite. Lần này là Đà Nẵng, nói là đi chơi nhưng thực thế nhiều áp lực hơn thế. Tôi và những đồng đội của mình, chỉ đặt mục tiêu vào số một, sau cùng, không vô địch, và cũng không chiến thắng gì cả. Một cuộc thi  (và cả sau đó) mà tôi đã kém đi rất nhiều; rekt, choke, f*ck là những từ mà tôi có thể diễn tả về mình. Khi tôi đéo có gì vui để kể thì trong đống hỗn độn ấy là những kí ức đẹp mà thi thoảng tôi vẫn bỏ ra gặm nhấm trong những khoảng lặng. Động lực học k có ý nghĩa khi động lực không có điểm tựa, may mắn là tôi cuối cùng cũng tìm được điểm tựa của mình. Cả trước và sau khi thi, chúng tôi đều không có thời gian rảnh để có thể dạo chơi quanh thành phố, trước khi ra sân bay, chúng tôi vẫn kịp ghé qua Highland để đẩy lùi cơn nghiện cafein.
Và đó là khi câu chuyện bắt đầu, ah, tôi không có nhiều thời gian để chụp hình, hay setup lab, nên tôi sẽ đưa ra các hướng dẫn mà tôi đã làm theo, từ một thiết bị chưa cài đặt gì, và với phiên bản phần mềm mới nhất tại thời điểm 2018/02/21.

Live Photo (@ Tinhte.vn)


Minh, thành viên trong đội, đã chộp được một khoảnh khắc đẹp, sau đó upload lên Facebook, khi ấn vào sẽ có trải nghiệm như ảnh GIF, hay chính xác hơn là 1 clip ngắn, chi tiết xem link tôi để bên trên. Tôi định xin cả clip để thủ xem dần nhưng cậu ta không cho. Thế là chỉ còn lại cho tôi 1 lựa chọn hợp lý. Tự đi mà download lấy! Nhưng mà f&^! tôi chỉ dùng Lumia chaỵ Windows Phone ghẻ, thêm 1 cái chạy Android lởm, khi mà những tính năng đáng giá ấy chỉ tồn tại trên iPhone 6 trở lên. End story! Câu chuyện đáng lẽ kết thúc vào ngày hôm đó cho tới khi tôi vô tình ấn vào 1 cái quảng cáo của Samsung trong Facebook như thế này (tôi không nhận được tiền quảng cáo của samesung đâu!)

src
Tất nhiên là có gì thì tôi mới viết bài blog này, nó xảy ra giống như trên iPhone của bạn tôi, nhưng của tôi chỉ là chạy Android thôi mà? WTF?
Vậy là tôi có thể download được cả clip nếu tôi man-in-the-middle được điện thoại của mình, hmm. Nhưng mà nếu tôi có thể không dùng đến điện thoại thì hay hơn.

Chẳng hạn như viết 1 cái extension hay addon chẳng hạn, dùng browser thay vì dán mắt vào cái màn điện thoại :?

Trước tiên là thử ảo hoá qua các emulator phổ biến như VirtualBox, VMWare... Những thứ trên không cho tôi 1 giải pháp 1-Click, tôi đành dùng Genymotion. Một điều chắc chắn là facebook áp dụng cert pinning cho các app trên Android của họ, vỏ quýt dày có dao cắt, bypass [1]. Một điều tương đối khó khăn là các emulator chỉ giả lập 1 cách ổn với tập lệnh x86, còn ARM thì siêu chậm nếu ảo hoá, nhưng bù lại thì các ứng dụng cho phiên bản ARM (chạy trên máy thật) thường được update nhanh nhất.
May mắn là tính năng live photo có sẵn ở bản x86 trong repo bypass ssl bên trên.

Sau đó chỉ đơn giản là kéo thả file apk vào ứng dụng, RTFM.
Cài đặt mạng Wifi của thiết bị tới proxy server có tính năng mitm kết nối mã hoá ssl/tls ví dụ như Burp, Fiddle,  OWASP Zap. Kiểu như thế này https://nvisium.com/resources/blog/2014/01/24/android-assessments-with-genymotion-burp.html
Nhớ để listen on all interfaces và bật decode gzip on requests nếu bạn dùng Burp như tôi.

Sẽ có những ứng dụng cứng đầu bỏ qua Proxy đã thiết lập, tôi sẽ đề cập vấn đề này trong bài viết sắp tới (khi nào tôi thích).
Tiếp theo là mở app Facebook, việc này để tạo ra thư mục /data/data/com.facebook.katana/lib-xzs tr, Sử dụng adb để push file vào trong thư mục `/data/....` bên trên, (coi như chỉ có 1 máy android đang chạy và k kết nối với bất kì thiết bị nào khác) Cách làm thì hơi trial 1 chút (Google it!)

Đăng nhập 1 acc facebook bất kì và vào ảnh livephoto mà bạn muốn.
Không có magic nào ở đây cả, đơn giản là lặp đi lặp lại các thao tác vô vị đến khi nào tôi thấy chán. Những pattern liên tục được lặp lại, như việc truy vấn GraphQL và tải về 1 video.

Nếu chỉ đơn giản là tải về video ấy thì tôi thành công rồi,
https://gist.github.com/anonymous/dbdd9c2067c4a0b639f6ff8ffa80a219

Nhưng nếu thế thì chán quá, tôi thích những gì thử thách, ok, thêm 1 chút thử thách, 1 chút guessing.
Thế này chẳng hạn

https://graph.facebook.com/graphql?q=node(POST_ID){__typename,__type__,paired_video{playable_url}}&access_token=ACCESS_TOKEN

Huh? Còn tôi chỉ quan tâm là cuối cùng tôi cũng có được thứ tôi cần =))

Happy new lunar year!

[1] https://github.com/pouyadarabi/Facebook_SSL_Pinning

No comments:

Post a Comment