Tôi đã reverse engineering API ZingMp3 như thế nào ?
Nhân dịp hôm nay mình “được” ở nhà nghỉ dịch COVID-19, sẵn tiện đang làm đồ án web năm 2 (mình làm web nghe nhạc) kết thúc môn. Mình muốn có nguồn nhạc để chạy trên web nên mình đã dùng chức năng Network của DevTools thử tìm API của ZingMp3, nhưng mà nó đã bị mã hoá data gửi lên server, sau 1 thời gian dịch code thì mình cũng đã lấy được.

Khi gửi request lên server, thì id là id của bài hát, ctime là timestamp, api_key không bị mã hoá, còn sig là đoạn đã bị mã hoá, ăn thua là ngay chỗ này nè. Bắt đầu mình tìm file js mã hoá đoạn sig ấy, chúng ta dựa vào keyword có sẵn là api_key để tìm file js nào chưa đoạn api_key này.

Sau khi đã tìm được file JS chứa, mình bắt đầu thử từng keyword để tìm ra đoạn code mã hoá, mình dùng ctime và thấy được đoạn ấy.

Ở dòng 501, t.sig = S(e, t), mình nhìn lên trên thì thấy hàm S nằm ở dòng 486, mình đặt breakpoints ở dòng đó, hàm này nhận vào 2 tham số, tham số thứ nhất là e chứa url mà mình gửi request, t chứa 1 object gồm 2 key là id và ctime.

Tiếp tục chạy xem thử biến r chứa thông tin gì, ở đây mình đọc code thì mình nhận thấy số 255, mình nghĩ ngay tới SHA256, chạy thử thì r chưa mã hoá SHA256 của chuỗi n.


Tiếp tục chạy hàm ở dòng 489, m()(e + r, b.Oc), b.Oc mình tìm trong source code thì là chuỗi 10a01dcf33762d3a204cb96429918ff6

Hàm m sẽ mã hoá SHA512, data để mã hoá là chuổi e + r, còn key là b.0c. Thế là xong đoạn mã hoá sig rồi ^^

Còn đây là kết qua sau khi mình tìm được cách mã hoá sig của ZingMp3

Cảm ơn mọi người đã đọc bài hướng dẫ n của mình, mong mọi người cho mình nhận xét để rút kinh nghiệm để có thể sau này mình viết những bài hướng dẫn như này tốt hơn ❤ và follower GitHub mình nha ❤
Link source code ZingMp3 Api: https://github.com/whoant/ZingMp3API