Cơ chế Hook và ứng dụng to lớn của nó (Phần 2)
Trang 1 trong tổng số 1 trang
Cơ chế Hook và ứng dụng to lớn của nó (Phần 2)
Bài viết liên quan: Cơ chế Hook và ứng dụng to lớn của nó (Phần 1)/Cơ chế Hook và ứng dụng to lớn của nó (Phần 3)
h em xin trình bày 1 ứng dụng quan trọng khác của Hook là làm keylogger hay malware!
phần này em nêu ra chỉ với mục đích "cọ xát" và "học hỏi" là chính, vì bản thân em cũng mới tìm hiểu về lĩnh vực này thôi, và cũg chưa hiểu tường tận lắm
Keylogger chắc ai cũg biết , đó là phần mêm dùng để thu thập thông tin vê password hay ID bằng cách bắt các thông điệp về bàn phím. ở đây em xin nói đến 1 loại keylogger khác, mục đích cũng giống như trên nhưng cách làm "nông dân" hơn. đó là lấy thông tin của edit text chứa pass hay ID.
cách làm của Keylogger này khá là đơn giản, giống cách làm các loại autoplay bây h.
trước hết cần phải quy ước 1 số thuật ngữ
remote process: là ứng dụng chứa thông tin về pass và ID. Hoặc với các loại autoplay thì nó chính là các loại game oline(vltk...)
cách thức chung của các loại này là chèn ("lây") code vào remote process. Gọi là "lây" bởi vì đoạn code đó thực sự kô nằm trong remote process. chỉ là remote process sẽ thực hiện các đoạn code đã bị "lây nhiễm". Có 3 cách để lây nhưng em xin chỉ nói 1 cách dùng Hook thôi, đó là:
+ đặt code cân thiết vào 1 file DLL, nghĩa là khi viết 1 hàm thay vì ta viết hàm đó vào chương trinh chính thì ta viết trong DLL.
+ dùng Hook để map file DLL của ta vào remote process.
Sau khi đã thực hiện 2 bước trên thì remote process sẽ tự thực hiện các lệnh đã có trong đoạn code của ta:rolleyes:
--2 bước trên thực hiện đêu rất dễ--cách viết DLL thì search trên mạng kô thiếu và thực hiện cũng khá dễ
đến đây thì có 2 hướng là keylogger và autoplay.
trước tiên nói về keylogger:
mục đích của keylogger là thu thập pass và ID, vậy trong file DLL ta chỉ cần xài hàm SendMessage là đủ. Khi đó ta tạo ra 1 hàm đệm trong DLL có các nhiệm vụ sau: cài Hook vào remote process, gọi hàm SendMessage với thông điệp WM_GETTEXT để lấy thông tin về pass và ID , bỏ cài đặt Hook (bước này giống như khi ta giải phóng 1 bộ nhớ đã đc cấp phát)
sau đây là cách thức thực hiện chi tiết:
B1: tạo 1 DLL có hàm đệm như trên
B2: tạo chương trinh chính có các chức năng như sau:
+ lấy handle của edit text chứa pass hay ID
+ link chương trinh chính này với DLL ở trên (khi link 1 DLL với 1 ứng dụng thi ứng dụng sẽ sử dụng đc các hàm trong DLL--đó là lí do tại sao nó đc gọi la DLL - thư viện liên kết động)
+ gọi hàm đệm trong DLL ra. Đến đây thì ta đã lấy đc pass và ID rồi , chỉ việc gửi pass này về mail của mình là xong
B1 thì kô nói làm j nữa
B2 có các chú ý sau:
- làm sao lây đc handle của edit text chứa pass hay ID đây???
trong sample em down trên mạng vê thì nó dùng cơ chế bắt chuột. Khi con chuột rê đến đâu nó sẽ dùng 1 số hàm API để định vị cửa sổ mà con chuột đang chỉ đến, vì muốn gõ pass thì các pác phải click chuột vào cái khung password, khi đó con chuột chỉ đúng edit text chứa password tuy nhiên theo kinh nghiệm của em thi cái đó rất hiếm xảy ra. Khi gõ ID xong thì các pác gõ pass thế nào, dùng chuột click vào khung password hay ấn tab? Em nghĩ là 80% là ấn Tab => làm keylogger theo cách này không ổn lắm, em cũng chỉ đưa ra loại này để làm quen hơn với Hook thôi. Pác nào quan tâm làm thử cũng hay
dưới đây là đoạn code dùng để định vị cửa sổ:
HWND SmallestWindowFromPoint( const POINT point )
{
RECT rect, rcTemp;
HWND hParent, hWnd, hTemp;
hWnd = ::WindowFromPoint( point );
if( hWnd != NULL )
{
::GetWindowRect( hWnd, &rect );
hParent = ::GetParent( hWnd );
// Has window a parent?
if( hParent != NULL )
{
// Search down the Z-Order
hTemp = hWnd;
do{
hTemp = ::GetWindow( hTemp, GW_HWNDNEXT );
// Search window contains the point, hase the same parent, and is visible?
::GetWindowRect( hTemp, &rcTemp );
if(::PtInRect(&rcTemp, point) && ::GetParent(hTemp) == hParent && ::IsWindowVisible(hTemp))
{
// Is it smaller?
if(((rcTemp.right - rcTemp.left) * (rcTemp.bottom - rcTemp.top)) < ((rect.right - rect.left) * (rect.bottom - rect.top)))
{
// Found new smaller window!
hWnd = hTemp;
::GetWindowRect(hWnd, &rect);
}
}
}while( hTemp != NULL );
}
}
return hWnd;
}
như vậy là xong thằng keylogger
à, ở bài trước em có nhầm 1 chút: hàm SendMessage có thể gửi thông điệp đi bất kỳ đâu, kô cứ phải trong cùng 1 ưng dụng, nó chỉ kô thể gửi thông điệp WM_GETTEXT tới 1 cửa sổ có đặt flag ES_PASSWORD mà nằm ngoài ứng dụng gọi nó thôi, do vậy nếu ta chỉ dùng hàm SendMessage với mục đích khác thì kô cần xài Hook đâu.
(*)flag ES_PASSWORD có tác dụng biến các ký tự nhập vào thành 1 ký tự đặc biệt duy nhất, thông thường là * ví dụ các pác gõ abcd thì nó hiển thị là ****
còn thằng autoplay em cũng chưa tim hiểu nhiêu nên chưa dám nói , hẹn hum sau sẽ nói tiếp
cái này ngoài lề thôi, nó kô liên quan j đến Hook cả, nhưng nó sẽ giúp các pác tìm HANDLE 1 cách dễ dàng
http://msdn.microsoft.com/en-us/magazine/cc301495.aspx
h em xin trình bày 1 ứng dụng quan trọng khác của Hook là làm keylogger hay malware!
phần này em nêu ra chỉ với mục đích "cọ xát" và "học hỏi" là chính, vì bản thân em cũng mới tìm hiểu về lĩnh vực này thôi, và cũg chưa hiểu tường tận lắm
Keylogger chắc ai cũg biết , đó là phần mêm dùng để thu thập thông tin vê password hay ID bằng cách bắt các thông điệp về bàn phím. ở đây em xin nói đến 1 loại keylogger khác, mục đích cũng giống như trên nhưng cách làm "nông dân" hơn. đó là lấy thông tin của edit text chứa pass hay ID.
cách làm của Keylogger này khá là đơn giản, giống cách làm các loại autoplay bây h.
trước hết cần phải quy ước 1 số thuật ngữ
remote process: là ứng dụng chứa thông tin về pass và ID. Hoặc với các loại autoplay thì nó chính là các loại game oline(vltk...)
cách thức chung của các loại này là chèn ("lây") code vào remote process. Gọi là "lây" bởi vì đoạn code đó thực sự kô nằm trong remote process. chỉ là remote process sẽ thực hiện các đoạn code đã bị "lây nhiễm". Có 3 cách để lây nhưng em xin chỉ nói 1 cách dùng Hook thôi, đó là:
+ đặt code cân thiết vào 1 file DLL, nghĩa là khi viết 1 hàm thay vì ta viết hàm đó vào chương trinh chính thì ta viết trong DLL.
+ dùng Hook để map file DLL của ta vào remote process.
Sau khi đã thực hiện 2 bước trên thì remote process sẽ tự thực hiện các lệnh đã có trong đoạn code của ta:rolleyes:
--2 bước trên thực hiện đêu rất dễ--cách viết DLL thì search trên mạng kô thiếu và thực hiện cũng khá dễ
đến đây thì có 2 hướng là keylogger và autoplay.
trước tiên nói về keylogger:
mục đích của keylogger là thu thập pass và ID, vậy trong file DLL ta chỉ cần xài hàm SendMessage là đủ. Khi đó ta tạo ra 1 hàm đệm trong DLL có các nhiệm vụ sau: cài Hook vào remote process, gọi hàm SendMessage với thông điệp WM_GETTEXT để lấy thông tin về pass và ID , bỏ cài đặt Hook (bước này giống như khi ta giải phóng 1 bộ nhớ đã đc cấp phát)
sau đây là cách thức thực hiện chi tiết:
B1: tạo 1 DLL có hàm đệm như trên
B2: tạo chương trinh chính có các chức năng như sau:
+ lấy handle của edit text chứa pass hay ID
+ link chương trinh chính này với DLL ở trên (khi link 1 DLL với 1 ứng dụng thi ứng dụng sẽ sử dụng đc các hàm trong DLL--đó là lí do tại sao nó đc gọi la DLL - thư viện liên kết động)
+ gọi hàm đệm trong DLL ra. Đến đây thì ta đã lấy đc pass và ID rồi , chỉ việc gửi pass này về mail của mình là xong
B1 thì kô nói làm j nữa
B2 có các chú ý sau:
- làm sao lây đc handle của edit text chứa pass hay ID đây???
trong sample em down trên mạng vê thì nó dùng cơ chế bắt chuột. Khi con chuột rê đến đâu nó sẽ dùng 1 số hàm API để định vị cửa sổ mà con chuột đang chỉ đến, vì muốn gõ pass thì các pác phải click chuột vào cái khung password, khi đó con chuột chỉ đúng edit text chứa password tuy nhiên theo kinh nghiệm của em thi cái đó rất hiếm xảy ra. Khi gõ ID xong thì các pác gõ pass thế nào, dùng chuột click vào khung password hay ấn tab? Em nghĩ là 80% là ấn Tab => làm keylogger theo cách này không ổn lắm, em cũng chỉ đưa ra loại này để làm quen hơn với Hook thôi. Pác nào quan tâm làm thử cũng hay
dưới đây là đoạn code dùng để định vị cửa sổ:
HWND SmallestWindowFromPoint( const POINT point )
{
RECT rect, rcTemp;
HWND hParent, hWnd, hTemp;
hWnd = ::WindowFromPoint( point );
if( hWnd != NULL )
{
::GetWindowRect( hWnd, &rect );
hParent = ::GetParent( hWnd );
// Has window a parent?
if( hParent != NULL )
{
// Search down the Z-Order
hTemp = hWnd;
do{
hTemp = ::GetWindow( hTemp, GW_HWNDNEXT );
// Search window contains the point, hase the same parent, and is visible?
::GetWindowRect( hTemp, &rcTemp );
if(::PtInRect(&rcTemp, point) && ::GetParent(hTemp) == hParent && ::IsWindowVisible(hTemp))
{
// Is it smaller?
if(((rcTemp.right - rcTemp.left) * (rcTemp.bottom - rcTemp.top)) < ((rect.right - rect.left) * (rect.bottom - rect.top)))
{
// Found new smaller window!
hWnd = hTemp;
::GetWindowRect(hWnd, &rect);
}
}
}while( hTemp != NULL );
}
}
return hWnd;
}
như vậy là xong thằng keylogger
à, ở bài trước em có nhầm 1 chút: hàm SendMessage có thể gửi thông điệp đi bất kỳ đâu, kô cứ phải trong cùng 1 ưng dụng, nó chỉ kô thể gửi thông điệp WM_GETTEXT tới 1 cửa sổ có đặt flag ES_PASSWORD mà nằm ngoài ứng dụng gọi nó thôi, do vậy nếu ta chỉ dùng hàm SendMessage với mục đích khác thì kô cần xài Hook đâu.
(*)flag ES_PASSWORD có tác dụng biến các ký tự nhập vào thành 1 ký tự đặc biệt duy nhất, thông thường là * ví dụ các pác gõ abcd thì nó hiển thị là ****
còn thằng autoplay em cũng chưa tim hiểu nhiêu nên chưa dám nói , hẹn hum sau sẽ nói tiếp
cái này ngoài lề thôi, nó kô liên quan j đến Hook cả, nhưng nó sẽ giúp các pác tìm HANDLE 1 cách dễ dàng
http://msdn.microsoft.com/en-us/magazine/cc301495.aspx
Similar topics
» Cơ chế Hook và ứng dụng to lớn của nó (Phần 1)
» Cơ chế Hook và ứng dụng to lớn của nó (Phần 3)
» Cơ chế Hook và ứng dụng to lớn của nó (Phần 4)
» Ứng dụng cơ chế Hook - Phần 1
» Ứng dụng cơ chế Hook - Phần 2
» Cơ chế Hook và ứng dụng to lớn của nó (Phần 3)
» Cơ chế Hook và ứng dụng to lớn của nó (Phần 4)
» Ứng dụng cơ chế Hook - Phần 1
» Ứng dụng cơ chế Hook - Phần 2
Trang 1 trong tổng số 1 trang
Permissions in this forum:
Bạn không có quyền trả lời bài viết
27/8/2013, 11:45 am by echcondihoc
» Quản Lí Tiến Trình Dùng Thư Viện PSAPI
11/10/2011, 9:42 pm by CNTT_DH
» xin tai lieu tieng viet
31/8/2011, 6:59 am by bantoisg
» Theo dõi tiến trình
27/8/2011, 5:51 pm by haigaopro01
» Giải pháp Bảo mật của Cisco
17/6/2011, 8:50 am by admin
» Nghiên cứu và đưa ra giải pháp phòng chống tấn công DoS, DDoS (Phần 1)
16/6/2011, 2:32 pm by admin
» Learn to hack !
16/6/2011, 8:49 am by admin
» Giải pháp hệ thống dành cho doanh nghiệp với thiết bị mạng Fortinet (Phần 1)
15/6/2011, 11:12 am by admin
» Ô Long Viên (Tập II)
27/9/2010, 4:56 pm by root
» những ebook về hack tiếng việt cho người mới tìm hiểu.
27/9/2010, 4:54 pm by root