Reflink: http://virusvn.com/forum/showthread.php?p=14847#post14847
Poster: DungCoi
Cái này hồi tháng trước mình có hứa sẽ viết.
Nhưng giờ mình vẫn còn bận đủ thứ nên viết thật lẹ để khỏi bị nói là thất hứa. Cũng khá đơn giản nên mình trình bày vắn tắt.
Archive Yahoo Mesenger : Là chức năng lưu trữ các tin nhắn của YM khi người dùng chat để sau đó người dùng có thể mở ra mà đọc lại
Nơi lưu trữ :
Theo mình tìm hiểu trên máy mình thì YM 10 lưu trữ trên 2 nơi :
Các đường dẫn lưu log :
NguyenDung : User trên máy người dùng
Ở máy bạn, nếu bạn muốn xác định chúng thì mẹo nhanh nhất là search các tên file trong hệ thống bằng string : Nick của bạn
Đặc điểm :
Các logchat lưu theo từng ngày kèm theo tên người dùng mà bạn chat
Ví dụ :
Mã hóa bằng thuật toán xor
Cấu trúc file log :
Mỗi file log sẽ gồm nhiều cấu trúc xếp lần lượt với nhau tạo thành :
Ở đây :
Date : Thời gian tin nhắn truyền đi hay nhận được (Tính theo giờ phút giây)
Chưa rõ : 4 byte này không rõ là gì, không quan tâm luôn
From : Gồm 2 giá trị
0 : Nội dung bạn gửi
1 : Nội dung đứa còn lại gửi
Len : Độ dài phần nội dung
Nội dung : Lấy theo độ dài từ Len
4 byte NULL để kết thúc từng struct
Cách thức giải mã :
1. Đọc lấy ra từng khối dữ liệu như struct trên
2. Do dữ liệu chỉ bị mã hóa ở Nội dung, nên chúng ta chỉ cần tìm cách giải mã nó
Các bạn có thể xem đoạn code sau :
Mình sẽ giải thích như sau :
Cho chuỗi strBody là phần Nội dung
strRet là chuỗi kết quả giải mã (Nội dung ban đầu)
(Cho vị trí của mảng bắt đầu từ vị trí 1)
Cho chuỗi strUserName là nick của bạn
strRet[1] = strBody[1] Xor strUserName[1]
strRet[2] = strBody[2] Xor strUserName[2
strRet[3] = strBody[3] Xor strUserName[3]
strRet[4] = strBody[4] Xor strUserName[4]
strRet[n] = strBody[n] Xor strUserName[5][m]
Bạn chú ý, giá trị cần Xor chỉ đếm tới bằng độ dài User Name (Ở đây là Len(strUserName))
Sau đó sẽ trở lại giá trị 1, rồi cứ thế lại đếm lên
Ví dụ : strUserName = "dung"
strRet[1] = strBody[1] Xor strUserName[1]
strRet[2] = strBody[2] Xor strUserName[2]
strRet[3] = strBody[3] Xor strUserName[3]
strRet[4] = strBody[4] Xor strUserName[4]
strRet[5] = strBody[5] Xor strUserName[1]
strRet[6] = strBody[6] Xor strUserName[2]
strRet[7] = strBody[7] Xor strUserName[3]
strRet[8] = strBody[8] Xor strUserName[4]
...
Nếu trình bày : strRet[n] = strBody[n] Xor strUserName[m]
ở đây cũng có thể thi gọn đơn giản bằng công thức :
m = n mod (Len(strUserName) +1)
Hay
strRet[n] = strBody[n] Xor strUserName[n mod (Len(strUserName) +1)]
Mình có đính kèm bên dưới là source (Trên VB6) mình viết để minh họa, mình viết bằng VB6 nên không hiển thị Unicode được, các bạn thông cảm
Bạn lưu ý chỉnh lại mà dùng cho thích hợp
Tham khảo :
http://rongchaua.net/security-mainme...archive-decode
Poster: DungCoi
Cái này hồi tháng trước mình có hứa sẽ viết.
Nhưng giờ mình vẫn còn bận đủ thứ nên viết thật lẹ để khỏi bị nói là thất hứa. Cũng khá đơn giản nên mình trình bày vắn tắt.
Archive Yahoo Mesenger : Là chức năng lưu trữ các tin nhắn của YM khi người dùng chat để sau đó người dùng có thể mở ra mà đọc lại
Nơi lưu trữ :
Theo mình tìm hiểu trên máy mình thì YM 10 lưu trữ trên 2 nơi :
Các đường dẫn lưu log :
Quote:
C:\ProgramData\Yahoo!\Messenger\Profiles\Nick người dùng: Ít, thiếu C:\Users\NguyenDung\AppData\Local\VirtualStore\Program Files\Yahoo!\Messenger\Profiles : Lưu trữ đầy đủ |
Ở máy bạn, nếu bạn muốn xác định chúng thì mẹo nhanh nhất là search các tên file trong hệ thống bằng string : Nick của bạn
Đặc điểm :
Các logchat lưu theo từng ngày kèm theo tên người dùng mà bạn chat
Ví dụ :
Quote:
C:\Users\NguyenDung\AppData\Local\VirtualStore\Pro gram Files\Yahoo!\Messenger\Profiles\dungcoivb\Archive\ Messages\chanh_levankhtn\20100327-dungcoivb.dat |
Cấu trúc file log :
Mỗi file log sẽ gồm nhiều cấu trúc xếp lần lượt với nhau tạo thành :
Ở đây :
Date : Thời gian tin nhắn truyền đi hay nhận được (Tính theo giờ phút giây)
Chưa rõ : 4 byte này không rõ là gì, không quan tâm luôn
From : Gồm 2 giá trị
0 : Nội dung bạn gửi
1 : Nội dung đứa còn lại gửi
Len : Độ dài phần nội dung
Nội dung : Lấy theo độ dài từ Len
4 byte NULL để kết thúc từng struct
Cách thức giải mã :
1. Đọc lấy ra từng khối dữ liệu như struct trên
2. Do dữ liệu chỉ bị mã hóa ở Nội dung, nên chúng ta chỉ cần tìm cách giải mã nó
Các bạn có thể xem đoạn code sau :
Quote:
Private Function decodeArchive(ByVal strUserName As String, ByVal strBody As String) As String Dim lCount As Long Dim strRet As String Dim lCountUser As Long lCountUser = 1 strRet = "" For lCount = 1 To Len(strBody) strRet = strRet & Chr(Asc(Mid(strBody, lCount, 1)) Xor Asc(Mid(strUserName, lCountUser, 1))) lCountUser = lCountUser + 1 If lCountUser > Len(strUserName) Then lCountUser = 1 End If Next decodeArchive = strRet End Function |
Cho chuỗi strBody là phần Nội dung
strRet là chuỗi kết quả giải mã (Nội dung ban đầu)
(Cho vị trí của mảng bắt đầu từ vị trí 1)
Cho chuỗi strUserName là nick của bạn
strRet[1] = strBody[1] Xor strUserName[1]
strRet[2] = strBody[2] Xor strUserName[2
strRet[3] = strBody[3] Xor strUserName[3]
strRet[4] = strBody[4] Xor strUserName[4]
strRet[n] = strBody[n] Xor strUserName[5][m]
Bạn chú ý, giá trị cần Xor chỉ đếm tới bằng độ dài User Name (Ở đây là Len(strUserName))
Sau đó sẽ trở lại giá trị 1, rồi cứ thế lại đếm lên
Ví dụ : strUserName = "dung"
strRet[1] = strBody[1] Xor strUserName[1]
strRet[2] = strBody[2] Xor strUserName[2]
strRet[3] = strBody[3] Xor strUserName[3]
strRet[4] = strBody[4] Xor strUserName[4]
strRet[5] = strBody[5] Xor strUserName[1]
strRet[6] = strBody[6] Xor strUserName[2]
strRet[7] = strBody[7] Xor strUserName[3]
strRet[8] = strBody[8] Xor strUserName[4]
...
Nếu trình bày : strRet[n] = strBody[n] Xor strUserName[m]
ở đây cũng có thể thi gọn đơn giản bằng công thức :
m = n mod (Len(strUserName) +1)
Hay
strRet[n] = strBody[n] Xor strUserName[n mod (Len(strUserName) +1)]
Mình có đính kèm bên dưới là source (Trên VB6) mình viết để minh họa, mình viết bằng VB6 nên không hiển thị Unicode được, các bạn thông cảm
Bạn lưu ý chỉnh lại mà dùng cho thích hợp
Tham khảo :
http://rongchaua.net/security-mainme...archive-decode
File được đính kèm
Yahoo Archive.zip (6,0 KB, 1 xem) |