Phần trước: https://goo.gl/1uiaVc

Sau khi đọc phần đầu tiên của bài viết, có lẽ các bạn sẽ thắc mắc rằng Violympic đã nâng cấp thuật toán mã hóa thế nào và liệu nó đã đủ an toàn chưa? Đó là lý do mình tiếp tục nghiên cứu chủ đề này.

image

Violympic đã thay đổi như thế nào?

Thay đổi đầu tiên rất dễ nhận biết và đã được thông báo trước, đó là hệ thống thi cũ sẽ được cập nhật thành 10 bài thi hoàn toàn mới. Và khi vào trang thi để thử nghiệm thì mình nhận ra rằng các bài thi không còn sử dụng Flash nữa mà chuyển sang dùng HTML5 được nhúng trong iFrame, và khi inspect mã HTML thì cả khung bài thi sẽ liền thành 1 khối như thế này:

image

- Mình loại bỏ được ý định check đáp án bằng cách xem HTML Element.

Còn một thay đổi khác đó là vì trang chuyển sang HTM5 nên Javascript được sử dụng để viết hàm mã hóa, và mình cũng không mất nhiều thời gian để kiếm và tách riêng đoạn mã hóa ra vì nó nằm ngay trên trang rồi.

image

Khai thác kẽ hở: Mã hóa

Sau khi có hàm mã hóa thì mình viết lại thành Python để tiện làm script PoC, hàm này mô phỏng lại Javascript chứ chưa tối ưu :D

image

Nói sơ qua về tác dụng của từng hàm mã hóa: Hàm pressl dùng để đảo ngược xâu a nhập vào, hàm presst để đảo ngược xâu a và nối với một chuỗi random có độ dài b, hàm press nối 6 xâu và sử dụng 2 hàm kia để đưa ra đoạn mã cuối cùng.

Vì nối thêm xâu random vào thì tất nhiên server sẽ không đọc xâu đó rồi, vì nó chẳng chưa tí thông tin nào cả, nên mình thay nó thành xâu “0.aaaaa…”

Test thử mã hóa với từ khóa “T-Rekt”, có thể nhận thấy rằng sau khi mã hóa thì các chữ cái trong từ vẫn xuất hiện rải rác trong xâu đã mã hóa, và thực tế muốn giải mã chỉ cần bỏ đoạn “0.aaa” đi và đảo lại xâu thôi.

image

Sau khi nghiên cứu mã hóa và thử nghiệm thành công, mình viết thành script PoC hoạt động theo sơ đồ sau:

image

PoC Video: