Tôi đã tải khóa học từ Hocmai.vn về máy tính như thế nào? - Blogger Hải Nam

Thông báo

Blog mình đang chỉnh sửa nên có lỗi gì mọi người bỏ qua nhé.

Post Top Ad

Responsive Ads Here
Tôi đã tải khóa học từ Hocmai.vn về máy tính như thế nào?

Tôi đã tải khóa học từ Hocmai.vn về máy tính như thế nào?

Share This
IMG
IMG
Việc học qua các nền tảng học tập trực tuyến - MOOCs (Massive Open Online Courses) ở Việt Nam đã không còn quá xa lạ nữa. Và một trong những nhu cầu của người học đó chính là tải những khóa học mà mình đã mua về máy tính, điện thoại của mình. Tuy nhiên nhà cung cấp không cho phép tải về vì lí do bản quyền. Vọc một hồi thì mình đã tìm ra cách tải khóa học từ Hocmai.vn, đương nhiên là làm thủ công do mình không học về các ngôn ngữ lập trình ứng dụng như Python, Java hay C++, C#.

"Nơi tình yêu bắt đầu"

Ngày mùng 2 Tết, trong lúc lục lại tin nhắn thì thấy tài khoản Hocmai.vn của đứa bạn nó share cho mình. Login vào coi có gì thì thấy có mấy khóa học Toán với Văn. Đang chán nên mở một bài xem, và mình tò mò về cách gửi dữ liệu nên mở luôn Fiddler để capture request tới server của Hocmai.vn. Trong lúc load video thì mình thấy cái này.
IMG
Đây là 2 truy vấn đầu tiên trước khi load video. Thực chất còn có một số truy vấn nữa nhưng mình đặc biệt chú ý 2 cái này do nó có chữ media và dung lượng thấp hơn so với truy vấn tải video (trong khung màu xanh). Copy URL, dán lên trình duyệt, mình tải được 2 file là:
  • 9TwO4IkFcJAVVNa1tI1hpXZchDNXlU2BZ0Cm4v1eTIK8kffrWn0Z4KvII3Mp5V7fD6dPCwP946hcTQSV50tYVc43t5DZKQxUnC1RS4QS1B-n1_naAcChpI_J0VOSXKDrLbMJPzCmahb0pbRtaWm9tsBJDLGIe6t4If7rMwDL8DvyqXan9gYKQ3WVPaOAm3aS
  • hocmai.key
Do file đầu tiên không có phần mở rộng nên mình thử mở với một text editor, cụ thể là Sublime Text. Và thật bất ngờ, đó là một file text.
IMG
Mình copy 4 dòng đầu lên Google tìm ta có kết quả thế này:
Vào link đầu tiên, ta có thể hiểu đó là kỹ thuật HTTP Live Streaming, các bạn có thể đọc tài liệu đó tại đây. Để cho nhanh mình sẽ tiếp tục, ta có thể hiểu đơn giản đó là kĩ thuật gửi những file media có kích thước nhỏ, độ dài khoảng 10 giây. Danh sách các file nhỏ đó (theo thứ tự) và thuộc tính nằm trong file có đuôi là .m3u8 (.m3u đối với MP3 playlist), nhưng mà sao mình chẳng thấy file .m3u8 nào cả??? Hay là nó chính là cái file có tên "siêu dài" kia rồi, chắc vậy đó!
Đọc đến gần cuối ta thấy kĩ thuật này cho phép mã hóa các file đã được chia nhỏ. Và kiểu mã hóa trong kỹ thuật này là AES-128. Nhưng mà mã hóa AES-128 có nhiều loại chứ, thôi kệ, chắc là loại CBC.
 Các bạn có thể tìm hiểu về mã hóa AES-128 ở đây và các kiểu mã hóa AES-128 tại đây.
Đọc file có tên "siêu dài" kia mình thấy có các đường dẫn tới file .ts
IMG
Copy link dán vào Chrome ta download được file .ts. Và kéo đến cuối trang ta thấy có tới 182 link lận, chả lẽ mình copy từng link một rồi download về chăng? Lâu lắm đó....
Xem cấu trúc của các link, ta thấy nó có khuôn là:
https://stream2.hocmai.vn/media/A2lOBPCU0Lem7VL8iRtjVg/1518949705/mars/sun/thcs-online/2016_2017/Lop_9/Toan_10_diem_thay_Quang/CD_rut_gon_can_thuc/2016_06_18_Can_thuc/01_720.mp4/hocmai-[STT]-v1-a1.ts
Trong đó [STT] là số trong khoảng 1 - 182, vậy áp dụng vào để code là xong.
IMG
Kết quả:
IMG
Chắc một số bạn sẽ thắc mắc, tại sao mình lại làm như thế mà không đọc file để lấy link cho chuyên nghiệp. Đó là vì mục đích của mình là làm sao cho nhanh nhất, dành thời gian vào cái chính chứ không quan trọng quá cái phụ.
Giờ ta đã có link download của file .ts rồi, copy vào file .txt rồi import vào IDM để tải cho nó nhanh. 
IMG
OK, giờ mình đã có đủ những thứ cần thiết, giờ thì đi decrypt nó thôi.

Làm thế nào để decrypt file .ts

Để decrypt được file .ts đã tải ở trên mình sử dụng OpenSSL để thử.
Câu lệnh để giải mã file:
openssl aes-128-cbc -d -in [input file] -out [output file] -nosalt -iv 0 -K [key_hex]
Trong đó aes-128-cbc là kiểu mã hóa, d là decrypt, [input file] là đường dẫn tới file nhập vào,  [output file] là đường dẫn tới file kết quả (nếu không tồn tại hệ thống sẽ tự tạo), [key_hex] là key giải mã, tuy nhiên phải chuyển key đó sang dạng hex (dùng hàm bin2hex trong PHP để chuyển).
IMG
Gõ câu lệnh trên vào Command Prompt xem nào
IMG
Thành công!
Tuy nhiên khi mở file kết quả lên bị dính lỗi.
IMG
Convert nó thử sang file .mp4. Kết quả sau khi convert từ trang convertio.co xem nhé:
IMG
Kết quả sau khi convert:
IMG
Thành công!

Liệu có thể decrypt bằng cách sử dụng hàm PHP được không?

Để decrypt file .ts đã bị mã hóa, ta sử dụng hàm openssl_decrypt() trong PHP. Chi tiết về hàm này bạn có thể tìm thấy trên trang php.net.
for ($i=1; $i <= 182; $i++) { 
 $decrypt_file = fopen('C:\Program Files (x86)\Ampps\www\Dec/hocmai-'.$i.'-v1-a1_out.ts', 'w+');
 $data = openssl_decrypt(file_get_contents('./Bai1/TS/hocmai-'.$i.'-v1-a1.ts'), "AES-128-CBC", file_get_contents('./Bai1/hocmai.key'), 
 OPENSSL_RAW_DATA);
 fwrite($decrypt_file, $data);
 fclose($decrypt_file);
 if ($data = false){
  echo 'Failed';
 };
}; //Đừng copy cả đống code vào nhá, nhớ edit đi. :v
Sau khi chạy code, được thư mục Dec có các file .ts đã được giải mã, tuy nhiên không thế xem được, giống như ở trên
IMG
Mình nghĩ các file này cần phải ghép vào thành 1 file duy nhất thì mới có thể xem được. Dùng thử mấy phần mềm không thấy phần mềm nào vừa ý hết luôn (do Free mà). Cuối cùng mình tìm thấy ffmpeg, thấy có vẻ ổn nên download về nối thử.
Xem hướng dẫn ở đây ta thấy có câu lệnh nối file.
IMG
Làm sao để có file list bây giờ? Copy thì lâu lắm đó... Mình edit lại đoạn code kia:
 for ($i=1; $i <= 182; $i++) { 
    $decrypt_file = fopen('C:\Program Files (x86)\Ampps\www\Dec/hocmai-'.$i.'-v1-a1_out.ts', 'w+');
    $data = openssl_decrypt(file_get_contents('./Bai1/TS/hocmai-'.$i.'-v1-a1.ts'), "AES-128-CBC", file_get_contents('./Bai1/hocmai.key'), OPENSSL_RAW_DATA);
    fwrite($decrypt_file, $data);
    fclose($decrypt_file);
    if ($data = false)
     { echo 'Failed';};
}
    $list = fopen('C:\Program Files (x86)\Ampps\www\Dec\list.txt', "a");
    $file = 'hocmai-'.$i.'-v1-a1_out.ts';
    fwrite($list, "file "."'".$file."'"."\n");
     } 
     fclose($list);
Run nó ta được file list.txt chứa danh sách theo đúng dạng đã cho ở trên. Giờ ta sẽ ghép nó vào 1 file output.ts.
IMG
Mở file output.ts xem có coi được không:
IMG
Hmm... Thấy được rồi đó, lên Hocmai.vn xem có đúng thời gian không nào....
IMG
Các bạn có thấy vô lý không? Đề mục ghi 41 phút mà video có 12 phút thôi à... Mà chả sao, miễn là download được video là OK rồi.
 Bài viết chỉ mang tính tham khảo, không nên áp dụng viết tool rồi share lên mạng đâu nhé, Hocmai.vn kiện đó.
Chúc các bạn năm mới vui vẻ!

Không có nhận xét nào:

Đăng nhận xét

Post Bottom Ad

Responsive Ads Here

Pages