Kỹ thuật biến đổi nhân của Windows (Phần 2 : Nghệ thuật gây đột biến mã(tiếp))
Trang 1 trong tổng số 1 trang
Kỹ thuật biến đổi nhân của Windows (Phần 2 : Nghệ thuật gây đột biến mã(tiếp))
Bài viết liên quan: (Phần 1 : trình điều khiển thiết bị)
-Trong bài này , tôi sẽ bàn về kỹ thuật gậy đột biến bảng IDT (Interrupt Descriptor Table) (tạm dịch là bảng mô tả các ngắt) . Ngắt là từ dùng để chỉ cơ chế mà hệ điều hành dùng để gây đột biến một tiến trình bất kỳ (đúng vậy , hệ điều hành cũng muốn chiếm quyền kiểm soát một tiến trình nào đó khi nó thấy cần ), Có ba loại ngắt là : ngắt phần mềm , ngắt phần cứng và ngắt ngoại lệ .
-Ngắt phần cứng do nhà sản xuất quy định . Ví dụ : bất cứ khi nào một tiến trình nhập xuất hòan thành thì một ngắt phần cứng sẽ xảy ra. Ở đây chúng ta sẽ không quan tâm tới lọai ngắt này .
- Ngắt phần mềm là kết quả của một yêu cầu giúp đỡ từ phần mềm đến hệ điều hành . Phần mềm khi muốn tiếp xúc với dịch vụ hệ thống (đã nói ở bài trước) sẽ thông qua ngắt này . Điều này có nghĩa là ngắt sẽ được gọi trước khi bất kỳ dịch vụ hệ thống nào được gọi.
- Ngắt ngọai lệ xảy ra khi một tiến trình thực thi một lệnh bất hợp pháp như lấy 1 số chia cho 0 .
- Lệnh SIDT dùng để xác định vị trí của bảng IDT , giá trị trả về là cấu trúc IDTINFO
-Sau đây là mã nguồn của hàm dùng để gây đột biến của fuzen_op . Nó sẽ thay địa chỉ của hàm 0×2e (hàm dùng để đảm nhận ngắt phần mềm) bằng địa chỉ của một hàm do ta định sẵn :
-Bây giờ bạn đã có thể gây đột biến bảng IDT . Từ đây bạn có thể theo dõi và ngăn chặn bất cứ yêu cầu sử dụng dịch vụ hệ thống nào từ vòng số 3 . Nên nhớ : số thứ tự của dịch vụ hệ thống(nhờ số này có thể lần ra tên của dịch vụ và chức năng của nó ) đang được yêu cầu sẽ được lưu trong thanh ghi EAX . Bạn có thể biết được tiến trình nào đang gọi bằng hàm PsGetCurrentProcess. Sau đây là ví dụ về hàm đột biến :
- Mã nguồn của ví dụ gây đột biến bảng IDT (Win 2000) có thể tải ở đây :
dành cho win xp ở đây :
-Trong bài này , tôi sẽ bàn về kỹ thuật gậy đột biến bảng IDT (Interrupt Descriptor Table) (tạm dịch là bảng mô tả các ngắt) . Ngắt là từ dùng để chỉ cơ chế mà hệ điều hành dùng để gây đột biến một tiến trình bất kỳ (đúng vậy , hệ điều hành cũng muốn chiếm quyền kiểm soát một tiến trình nào đó khi nó thấy cần ), Có ba loại ngắt là : ngắt phần mềm , ngắt phần cứng và ngắt ngoại lệ .
-Ngắt phần cứng do nhà sản xuất quy định . Ví dụ : bất cứ khi nào một tiến trình nhập xuất hòan thành thì một ngắt phần cứng sẽ xảy ra. Ở đây chúng ta sẽ không quan tâm tới lọai ngắt này .
- Ngắt phần mềm là kết quả của một yêu cầu giúp đỡ từ phần mềm đến hệ điều hành . Phần mềm khi muốn tiếp xúc với dịch vụ hệ thống (đã nói ở bài trước) sẽ thông qua ngắt này . Điều này có nghĩa là ngắt sẽ được gọi trước khi bất kỳ dịch vụ hệ thống nào được gọi.
- Ngắt ngọai lệ xảy ra khi một tiến trình thực thi một lệnh bất hợp pháp như lấy 1 số chia cho 0 .
- Lệnh SIDT dùng để xác định vị trí của bảng IDT , giá trị trả về là cấu trúc IDTINFO
- Code:
////////////////////////////////////////////////////////////////////////////
typedef struct
{
WORD IDTLimit;
WORD LowIDTbase;
WORD HiIDTbase;
} IDTINFO;
#define MAKELONG(a, b)((LONG)(((WORD)(a))|((DWORD)((WORD)(b)))
////////////////////////////////////////////////////////////////////////////
-Sau đây là mã nguồn của hàm dùng để gây đột biến của fuzen_op . Nó sẽ thay địa chỉ của hàm 0×2e (hàm dùng để đảm nhận ngắt phần mềm) bằng địa chỉ của một hàm do ta định sẵn :
- Code:
////////////////////////////////////////////////////////////////////////////
DWORD KiRealSystemServiceISR_Ptr; // biến lưu địa chỉ của hàm 0×2e thật
#define NT_SYSTEM_SERVICE_INT 0×2e
int HookInterrupts()
{
IDTINFO idt_info;
IDTENTRY* idt_entries;
IDTENTRY* int2e_entry;
__asm{
sidt idt_info;
}
idt_entries =
(IDTENTRY*)MAKELONG(idt_info.LowIDTbase,idt_info.HiIDTbase);
KiRealSystemServiceISR_Ptr = // Lưu địa chỉ của hàm 2
MAKELONG(idt_entries[NT_SYSTEM_SERVICE_INT].LowOffset,
idt_entries[NT_SYSTEM_SERVICE_INT].HiOffset);
int2e_entry = &(idt_entries[NT_SYSTEM_SERVICE_INT]);
__asm{
cli; // Ngưng ngắt
lea eax,MyKiSystemService; // Lưu địa chỉ của hàm đột biến vào thanh ghi EAX
mov ebx, int2e_entry; // Lưu địa chỉ của hàm 0×2e vào thanh ghi EBX
mov [ebx],ax; // Ghi đè địa chỉ của hàm 0×2e bằng địa chỉ của hàm đột biến
shr eax,16
mov [ebx+6],ax;
sti; // Kích họat ngắt
}
return 0;
}
////////////////////////////////////////////////////////////////////////////
-Bây giờ bạn đã có thể gây đột biến bảng IDT . Từ đây bạn có thể theo dõi và ngăn chặn bất cứ yêu cầu sử dụng dịch vụ hệ thống nào từ vòng số 3 . Nên nhớ : số thứ tự của dịch vụ hệ thống(nhờ số này có thể lần ra tên của dịch vụ và chức năng của nó ) đang được yêu cầu sẽ được lưu trong thanh ghi EAX . Bạn có thể biết được tiến trình nào đang gọi bằng hàm PsGetCurrentProcess. Sau đây là ví dụ về hàm đột biến :
- Code:
////////////////////////////////////////////////////////////////////////////
__declspec(naked) MyKiSystemService()
{
__asm{
pushad
pushfd
push fs
mov bx,0×30
mov fs,bx
push ds
push es
// Đặt mã xử lý thông tin vào đây
Finish:
pop es
pop ds
pop fs
popfd
popad
jmp KiRealSystemServiceISR_Ptr; // Gọi hàm 0×2e
}
}
////////////////////////////////////////////////////////////////////////////
- Mã nguồn của ví dụ gây đột biến bảng IDT (Win 2000) có thể tải ở đây :
dành cho win xp ở đây :
Similar topics
» Kỹ thuật biến đổi nhân của Windows (Phần 2 : Nghệ thuật gây đột biến mã(tiếp))
» Kỹ thuật biến đổi nhân của Windows (Phần 2 : Nghệ thuật gây đột biến mã)
» Kỹ thuật biến đổi nhân của Windows (Phần 1 : trình điều khiển thiết bị)
» Các kỹ thuật nhận dạng virus
» Các kỹ thuật nhận dạng virus
» Kỹ thuật biến đổi nhân của Windows (Phần 2 : Nghệ thuật gây đột biến mã)
» Kỹ thuật biến đổi nhân của Windows (Phần 1 : trình điều khiển thiết bị)
» Các kỹ thuật nhận dạng virus
» Các kỹ thuật nhận dạng virus
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