Ta đã nói về chuỗi challenge được gửi trả về w^(o&4^(o|(4/k%1*5... và nghĩ nó như một phép toán số học.
Nhưng thực tế thì không phải là như vậy, các dấu ngoặc ( ) chỉ có mục đích duy nhất là “rắc rối hoá” chuỗi challenge string, trông như một biểu thức phức tạp…
String regular = YahooBase64(md5(password));
String crypted = YahooBase64(md5(md5Crypt(password, "$1$_2S43d5f")));
Trong nhiều ứng dụng bảo mật, khi mã hoá MD5 thường kèm theo salt, salt là chuỗi sinh ngẫu nhiên kèm với lần tạo password đầu tiên, và salt hay được lưu trữ ở máy chủ để tránh hacker nếu sniff được đoạn mã MD5 thì cũng không thể fake được vì thiếu mã salt…
Tiếp tục với 2 chuỗi vừa tạo ra, lần lượt mỗi chuỗi kết hợp với chuỗi đầu tiên, dùng các thuật toán SHA-1, gom nhóm bits, dịch bits (mã hoá 2 bytes (== 16bits) bằng 3 chars), và thêm các kí tự “,” “;” ở cuối và “=” ở giữa đoạn string cuối cùng để trông đoạn code như phép gán... 2 chuỗi sau khi encoded có dạng:
(Tham khảo thêm trong các mã nguồn kèm theo bài này)
D=Ci;F=do;m=8C;Y=3a,S=DC;p=21,N=29;S=jn;L=Dj;Y=CB;
O=kA,w=g4,V=a3;L=jC,h=Ej,h=Fa,V=na,E=b3;R=p9,S=jj,
OK, bây giờ client gửi lại giá trị này với key 6 và 96 (service 84), kèm với các vectors:
0: ID
2: ID
2: 1
244: 2097087
148: 180
135: CLIENT_VERSION
1: ID
- Khi các thông tin đã chính xác, quá trình đăng nhập thành công! (Nick của bạn sẽ phát sáng trên máy người khác)
Thử lùi thời gian lại để có cái nhìn rõ hơn về quá trình lao lực với Chanllenge Reponse này của Yahoo!Inc, trong những phiên bản đầu tiên của mình, Yahoo sử dụng đường Http Proxy để tiếp nhận thông tin đăng nhập từ client, tuy nhiên các thông tin gửi đến server đều ở dạng clear text nên rất dễ bị thất lạc thông tin. Sau đó Yahoo! cải tiến bằng cách trước khi password được gửi, nó sẽ bị mã hoá bằng thuật toán MD5 (Dịch vụ webmail trước đó còn sử dụng Java-Script để mã hoá MD5 ngay tại browser). Mặc dù MD5 là thuật toán mã hoá mà đến nay chưa thể decoded nhưng có thể thấy các thông tin gửi lên server sẽ luôn là một hằng số nếu sử dụng theo phương thức này. Mặc dù ngay sau đó, Yahoo! áp dụng trộn thêm chuỗi Salt sinh bởi client trong các lần đăng nhập để giá trị encoded cuối cùng luôn được thay đổi nhưng xem ra thuật toán vẫn rất dễ bị nắm bắt và khai thác.
Ngày 24/6/2004, hãng Trillian tạo ra một ứng dụng 3rd party để kết nối với accounts Y!M, không hỗ trợ các kiểu quảng cáo của Yahoo!. Ngay lập tức bị Yahoo! phản kháng. Từ đó, nhiều cuộc tranh cãi đã nổ ra giữa Yahoo!Inc với các hãng 3rd party khai thác dịch vụ của Yahoo. Và rồi Yahoo quyết tâm thay đổi thuật toán mãnh liệt nhằm ngăn cản công việc nghiên cứu đến từ các tổ chức bên ngoài. Giải thuật mới (đã giới thiệu ở trên) thật sự phức tạp mà đến nay vẫn được Yahoo sử dụng cùng với phiên bản Y!M 9.0 mới nhất. Tuy đã ngăn cản được Trillian trong một thời gian nhất định nhưng cuối cùng, thuật toán đó cũng đã bị cracked và rò rỉ qua mạng Internet cho đến ngày nay. :D
Sau khi đoạn mã hash chính xác đáp trả lại server, quá trình đăng nhập đã thành công mà không cần thêm bất cứ một thông tin nào. Lúc này server sẽ trả về thông tin thêm về tài khoản (Full name, Sex, Virtual IDs, Friends list, Denied list, Unread email…) trong một gói tin bao gồm nhiều YMSG Packets (multiple packets), client cần bóc tách và xử lí từng đoạn phù hợp.
2) Khái quát các dịch vụ khác (Send msg, Status…)
- Mỗi dịch vụ được quy chuẩn bởi Yahoo, ở version 15 có các tags của dịch vụ thông thường sau:
• 0x06 MESSAGE
Format 1 : (status = 0x00000001) Online message
5 : to (yahoo id)
4 : from (yahoo id)
14 : message text
[optional extension]
63 : imvironment name or ";0"
64 : <unknown> "0"
97 : utf8 encode true/false
Format 2 : (status = 0x00000005) Offline message(s)
31 : <unknown> "6" --------+
32 : <unknown> "6" |
5 : to (yahoo id) |
4 : from (yahoo id) | Repeat for each message
15 : Unix timestamp |
14 : message text |
97 : <unknown> "1" --------+
Cài đặt thêm các cặp giá trị (63,0) (64,0) (206,0) với các accounts của hotmail liên thông.
• 0x55 / 0xF1
LIST
89 : Virtual ID
3 : Primier ID
216, 254: Alias ID (First name, Last name)
59 : HTTP cookie Y
59 : HTTP cookie T
59 : HTTP cookie C
3 : yahoo id
100 : <unknown> "0"
101 : <unknown> ""
102 : <unknown> ""
93 : <unknown> "86400"
149 : <unknown> base64 style encoded binary
150 : <unknown> base64 style encoded binary
151 : <unknown> base64 style encoded binary
65 : Group name
7 : friend ID
(241 : 2) hotmail user
301 : 319
300 : 319
(301 : 319) ignored friends list
(300 : 319) ignored friends list
• 0xF0 UNKNOWN SERVICE (Online + Status ID)
13 : 1 Availble
19: Custom status
• 0x02 LOGOFF
0: ID
- This e-mail address is being protected from spambots. You need JavaScript enabled to view it

- 16/12/2010 14:15 - Single Sign On Solution
- 11/12/2010 22:06 - Ngôn ngữ “thuần Web” đang lên?
- 06/12/2009 20:36 - Những điểm cần lưu ý khi học một ngôn ngữ lập trìn…
- 16/09/2009 20:19 - Phân tích quá trình bắt tay giữa hai máy tính
- 10/09/2009 13:50 - Web app Framework (P1)
- 23/05/2009 08:00 - Phân tích Y!M Protocol (Part2)
- 17/05/2009 00:16 - Phân tích Y!M Protocol (Part1)