Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.05.19;
Скачать: CL | DM;

Вниз

Защита от копирования...   Найти похожие ветки 

 
NKiril   (2003-03-18 01:18) [0]

Как определить запущен ли процес (в частности virtualCd, SoftIce) через Делфи?


 
Алексей Валерьевич   (2003-03-18 02:12) [1]

Удалено модератором


 
Poirot   (2003-03-18 07:26) [2]

Что-то мне кажется, что SoftIce вам будет сложновато найти, но уж если наюдёте, то просветите при закрытие проги все болезненные места места...


 
Мыш   (2003-03-18 07:40) [3]

НУ че заработал 30 баксов, придурок? Здесь по дельфи форум, вали нафиг.


 
Sash!   (2003-03-18 09:11) [4]

Проверка на запущенный SoftIce:

//------------------------------------------------------------------------------
{ SoftIce in W9x OS }
function SFI95Loaded: Boolean;
var
hFile: THandle;
begin
Result := False;
hFile := CreateFileA("\.SICE", GENERIC_READ or GENERIC_WRITE,
FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, 0);
if (hFile <> INVALID_HANDLE_VALUE) then
begin
CloseHandle(hFile);
Result := True;
end;
end;

//------------------------------------------------------------------------------
{ SoftIce in NT/2000 OS }
function SFINTLoaded: Boolean;
var
hFile: THandle;
begin
Result := False;
hFile := CreateFileA("\.NTICE", GENERIC_READ or GENERIC_WRITE,
FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, 0);
if (hFile <> INVALID_HANDLE_VALUE) then
begin
CloseHandle(hFile);
Result := True;
end;
end;


 
NKiril   (2003-03-18 17:48) [5]

Sash! Спасибо за код, но я хотел бы с ним разобраться... Документации по CreateFileA у меня нет потому, хотелось бы уточнить. В коде ты создаешь с помощью CreateFileA ищешь SoftIce, а потом если нашло (if ...) то закрываешь.. наверное SoftIce. Правильно?
Ну а если мне нужно проверять на наличие другого процеса то где я смогу достать "\.NICE" для другого процеса, (как я понимаю все следующие параметры в процедуре можно оставлять без изменения)?
Что это вообще такое "\.NICE"?
Огромное спасибо.


 
Sash!   (2003-03-20 09:22) [6]

Честно говоря, я сам не разбирался с этим кодом, просто где-то нашел :)


 
Александр Спелицин   (2003-03-20 12:03) [7]

Ну во-первых не "\.NTICE", а "\\.\NTICE"

> Документации по CreateFileA у меня нет

Т.е Вам трудно набрать CreateFile и нажать F1???
А также трудно сделать тоже самое с CloseHandle?


 
NKiril   (2003-03-21 16:59) [8]

По F1 в хелпе ничего нет по CreateFileA, это процедура Windows.


 
Umar   (2003-03-21 18:18) [9]

В коде функция возвращает дескриптор файла если он не равен
INVALID значит файл загружен в память.


 
NightAngel   (2003-03-21 23:54) [10]

Сами оценивайте недостатки и преимущества.

Метод первый: Файловый.
а) FindFirst и FindNext-ом ищется loader32 или sivwid.386; Устраняется перехватом этих функций.
б) Через VWIN32.vxd читаются напрямую сектора с диска или кластеры и ищется строка "tIce" или "SIWVID" или "WINICE" или "NTICE". Разновидность этого способа - использование библиотек, реализующих прямой доступ к файлам через FAT. Устраняется так же, брейк на DeviceIOControl.
в) Поиск в реестре "подозрительных" записей, в частности:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\SoftICE
HKEY_LOCAL_MACHINE\Software\NuMega\SoftICE
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\App Paths\Loader32.Exe. Устраняется ловушкой на операции с реестром.
г) Разновидность в). Работа с реестром через файловые операции или через сектора. Устраняется теми же способами.

Метод второй: Device-ный.
а) Только для Ring0:
//-------------------------------------------------------------
VMMCall Test_Debug_Installed
je not_installed
//-------------------------------------------------------------
или
//-------------------------------------------------------------
mov eax, Device_ID ;VxD ID->202h для SICE или 7a5Fh для SIWVID
mov edi, Device_Name ; можно указать символьное имя устройства,
;если же задан ID, то можно пустую строку.
VMMCall Get_DDB
mov [DDB], ecx ; ecx=DDB или 0 если VxD нет.
//-------------------------------------------------------------
VMMCall это макрос, а не "вызов" библиотечной функции. Он транслируется в INT 20H + маска адреса вызова. (См. DDK).
Устраняется так - bpx Get_DDB if ax==0202 || ax==7a5fh
б) MeltICE - это официальное название сл. Он и был приведён Sash!
CreateFileA("\\.\SICE",...) //для win32
или
_lopen("\\.\SICE",0) //для win16
Имя может быть либо SICE, либо SIVW, либо NTICE. Если открыть VXD удалось, то значит он в памяти. Фактически, после вызова CreateFileA мы попадаем в Kernel32!ORD_0001, эта "затычка" эмулирует VxDCall, она нас приводит к функции vxd-шки VWIN32 под названием _VWIN32_ReleaseWin32Mutex и затем мы получаем список DDB и ищем что задано. Она не грузит vxd, а просто посылает им DIOC_OPEN и DIOC_CLOSEHANDLE сообщения и находит как динамически так и не динамически загруженные VXD.
Устраняется так - bpx CreateFileA if *(esp->4+4)=="SICE" || *(esp->4+4)=="SIWV" || *(esp->4+4)=="NTIC" или bpx VMM_GetDDBList if eax->3=="SICE" || eax->3=="SIWV"

Метод третий: INT
а) Если вызвать INT 41H с функцией AX=4Fh, то в АХ запишется 0F386h в случае присутсвтия какого-нибудь системного отладчика.
б) аналогично а) INT 68H и тоже число в АХ=0F386h.
Работает только в Win9x. В NT/Win2k/XP - бесполезен.

Ну вот вроде и все известные методы "защит". SoftIce их легко обнаруживает и нейтрализует.


 
Snap   (2003-03-22 00:42) [11]

Небольшое дополнение: чтобы найти менее развитые отладчики, просто достаточно проверить результат IsDebuggerPresent. Также эту информацию можно прочесть из заголовков программы в памяти, но эффект будет тот же, так что я думаю не зачем мучаться, а использовать IsDebuggerPresent.



Страницы: 1 вся ветка

Текущий архив: 2003.05.19;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.006 c
1-59792
Piero
2003-05-05 13:35
2003.05.19
Встроенный архиватор


1-59691
DNK
2003-05-06 09:02
2003.05.19
Меню на MDI форме


3-59598
Deedlit
2003-04-27 13:46
2003.05.19
SQL запрос: поиск двойников


3-59566
Sergant
2003-04-26 15:06
2003.05.19
Мониторинг обновления БД и Timer


3-59639
Evyshka
2003-04-29 09:43
2003.05.19
Помогите пожалуйста составить запрос по количеству





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский