Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > "Ранняя" автозагрузка


Автор: Addmin 13.6.2007, 17:21
Добрый день!

Какие есть способы для загрузки процесса нашей программы до остальных (троянов, backdoor'ов, etc), так, чтобы мы имели доступ к файловой системе и к реестру.

На этом форуме уже были вопросы Romikgy, к сожалению, найти я их так не смог :(

Пути, которые я вижу (правда, наполовину smile ):

1. dll или процесс в winlogon (если такое возможно).
2. автозагурзка через BootExec (именно так работают CHKDSK, O&O Defrag, Avast!). К сожалению, по этой возможности у меня очень мало информации - какого типа должно быть приложение и т.д. Кто-нибудь просветит?

Заранее спасибо!

Добавлено через 55 секунд
Всмысле я пишу и не троян, и не backdoor, а их антипод smile

Автор: Rennigth 13.6.2007, 17:31
Addmin, 
Драйвер или сервис пиши. Драйвер надежнее, но сложнее в реализации.

Автор: Addmin 13.6.2007, 18:00
Ясно smile Не мог бы дать немножко ссылок на информацию о написании драйверов в Delphi? smile

Автор: m0ro 13.6.2007, 18:23
Сервисы:
http://ishodniki.ru/list/?cat=7&show=delphi_system&pr=sys_nt

По драйверам поищи книги лучше...

Автор: bems 13.6.2007, 18:53
Цитата(Addmin @  13.6.2007,  17:21 Найти цитируемый пост)
1. dll или процесс в winlogon (если такое возможно).

это не очень ранний этап загрузки
Цитата(Addmin @  13.6.2007,  17:21 Найти цитируемый пост)
2. автозагурзка через BootExec (именно так работают CHKDSK, O&O Defrag, Avast!). К сожалению, по этой возможности у меня очень мало информации - какого типа должно быть приложение и т.д
консольное или native

Автор: Rouse_ 13.6.2007, 20:40
По нативу у Шрайбера было это хорошо описано, но учти, там нет ничего похожего на Win32 подсистему...

Автор: Addmin 14.6.2007, 05:29
Rouse_, bems, m0ro,  спасибо. Так и думал, что придётся консольку писать smile

Автор: bems 14.6.2007, 16:52
Цитата(Rouse_ @  13.6.2007,  20:40 Найти цитируемый пост)
но учти, там нет ничего похожего на Win32 подсистему
не путпешь ли ты юзермодное native приложение с кернолмодом?
не уверен, но похоже на то

Автор: Rouse_ 15.6.2007, 10:52
Цитата(bems @  14.6.2007,  17:52 Найти цитируемый пост)
не путпешь ли ты юзермодное native приложение с кернолмодом?

Я говорю именно про Native приложения, которые запускаются до запуска Win32 подсистемы. Пример такого - scandisk.

Автор: Addmin 12.9.2007, 17:25
Попытался простое консольное приложение поставить в BootExec:

Код

program consolka;

{$APPTYPE CONSOLE}

uses
  SysUtils;

begin
 DeleteFile('C:\1.exe');
end.



Но 1.exe так и не удалился. Почему? Есть ли какие-то отличия написания простых консольных приложений и подобных, "загрузочных"? Заранее спасибо smile

Автор: bems 12.9.2007, 18:27
а если без win32-вызовов?

Автор: Addmin 13.9.2007, 02:38
bems, паскалевский Erase тоже пробовал smile Если ты об этом smile

Автор: W4FhLF 13.9.2007, 07:43
Цитата(Addmin @  12.9.2007,  17:25 Найти цитируемый пост)
Но 1.exe так и не удалился. Почему? Есть ли какие-то отличия написания простых консольных приложений и подобных, "загрузочных"? 


Как почему? А откуда там взятся api DeleteFile? kernel32.dll там ещё нет и в помине. Надо использовать функции, которая экспортиурются ядром или работать напрямую с disk.sys. 
Олтичия? Да проще уж назвать совпадения, чем отличия. Нет там никаких консолек и прочего, то, что тебе здесь насоветовали. 
В общем я не знаю, как тебе ответить на вопрос, слишком велики твои пробелы в знаниях и слишком обширна эта область. 
Читал туториалы Fouf-F, книги Шрайбера, Руссиновича и Хоглунда. 

Автор: Addmin 13.9.2007, 10:02
Спасибо! smile

Автор: RinOSpro 13.9.2007, 10:19
По секрету скажу Addmin  

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\
"Userinit="Троян.exe"

только потом не забудь запустить userinit winexec ом а то система не загрузиться

Добавлено через 3 минуты и 35 секунд
или подмени ntoskrnl.exe  smile  это будет еще раньше, если найдешь споссоб как после этого винду запустить, будешь молодец. и нам скажешь. smile  

Автор: Romikgy 13.9.2007, 14:12
Цитата(RinOSpro @  13.9.2007,  09:19 Найти цитируемый пост)
или подмени ntoskrnl.exe

и все делать самомуsmile

читаю книгу "Руткиты для Windows " Колисниченко 
много чего поучительного и для троянописателей и для их антиподов  smile 

Автор: Addmin 13.9.2007, 15:43
Romikgy, нужна ссылка на книжку Олега Зайцева "Руткиты, кейлогерры и spyware: методы борьбы"?  smile Тоже очень грамотная литература - вчера нашёл smile

Автор: bems 13.9.2007, 16:26
Цитата(W4FhLF @  13.9.2007,  07:43 Найти цитируемый пост)
Нет там никаких консолек и прочего, то, что тебе здесь насоветовали. 
вывод в StdOut там работает. Просто он приатаччен не к консоли. У dskchk.exe продсистема - консоль в РЕ заголовке


Цитата(W4FhLF @  13.9.2007,  07:43 Найти цитируемый пост)
kernel32.dll там ещё нет и в помине
kernel32.dll можно и самому загрузить, но только вот сервер подсистемы Win32 еще не загружен, поэтому от kernel32.dll толку будет мало.

Добавлено через 4 минуты и 28 секунд
Цитата(Addmin @  13.9.2007,  02:38 Найти цитируемый пост)
паскалевский Erase тоже пробовал  Если ты об этом 
не об этом. Об NtDeleteFile например

описание
Цитата

NtDeleteFile


NTSYSAPI 
NTSTATUS
NTAPI
NtDeleteFile(

  IN POBJECT_ATTRIBUTES   ObjectAttributes );






It's very interesting NT System Call... Normally, file deletion is realised as FileDispositionInformation class in a call to NtSetInformationFile. When you use NtDeleteFile, file will be deleted immediatly after call (system isn't waiting for close last HANDLE to file).
--------------------------------------------------------------------------------

ObjectAttributesYou can manipulate ObjectName and RootDirectory members. 
Example: 
  If you have only file name as Unicode string, use it as ObjectName.
  If you have only a HANDLE to file, set it as RootDirectory. Set ObjectName as empty string.






Documented by: 
Tomasz Nowak 


Автор: W4FhLF 13.9.2007, 16:44
Цитата(bems @  13.9.2007,  16:26 Найти цитируемый пост)
вывод в StdOut там работает. Просто он приатаччен не к консоли. У dskchk.exe продсистема - консоль в РЕ заголовке


В какой stdout? stdout это языкозависимое и высокоуровневое понятие и к какому именно системному механизму его применить это вообще личное дело каждого. А консолек там нет, они там не загрузятся и chkdsk.exe, который ты имел ввиду, тоже. Вместо него работает autochk.exe.

Цитата(bems @  13.9.2007,  16:26 Найти цитируемый пост)
kernel32.dll можно и самому загрузить, но только вот сервер подсистемы Win32 еще не загружен, поэтому от kernel32.dll толку будет мало.


И как её можно загрузить, если csrss не загружен? 



Автор: ne0n 13.9.2007, 17:08
Цитата(RinOSpro @  13.9.2007,  10:19 Найти цитируемый пост)
По секрету скажу Addmin  HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\"Userinit="Троян.exe"


Гениально!!!Тока каето секреты у тебя староватые smile и любой антивирус завижит на такое действие, а вообще можно обойтись без всяких winexec, т.к. ты там думаешь просто так запятая
: C:\WINDOWS\system32\userinit.exe,???  просто прописываешь после запятой путь к твоей программе!!!

Цитата(RinOSpro @  13.9.2007,  10:19 Найти цитируемый пост)
или подмени ntoskrnl.exe    это будет еще раньше, если найдешь споссоб как после этого винду запустить, будешь молодец. и нам скажешь.   

шутник! smile 


вообщем  как писать на дельфях не видел а вот для C есть smile  теории там хватит:
http://www.xakep.ru/magazine/xa/082/114/2.asp



Автор: bems 13.9.2007, 17:11
Цитата(W4FhLF @  13.9.2007,  16:44 Найти цитируемый пост)
В какой stdout? stdout это языкозависимое и высокоуровневое понятие 
тот который возвращает GetStdHandle(STD_OUTPUT_HANDLE)

Цитата(W4FhLF @  13.9.2007,  16:44 Найти цитируемый пост)
 Вместо него работает autochk.exe.
не знал. как проверить?

Цитата(W4FhLF @  13.9.2007,  16:44 Найти цитируемый пост)
И как её можно загрузить, если csrss не загружен?
как любую длл. Может оказаться что она откажется загружаться, тогда загрузить без выполнения точки входа. Я это не к тому что она заработает, а к тому что 
Цитата(W4FhLF @  13.9.2007,  07:43 Найти цитируемый пост)
А откуда там взятся api DeleteFile? kernel32.dll там ещё нет и в помине
формально не верно

Добавлено через 3 минуты и 28 секунд
Цитата(bems @  13.9.2007,  17:11 Найти цитируемый пост)
Может оказаться что она откажется загружаться
кстати подумал. Если это так, а DeleteFile импортируется статически, то программа Addmin, вообще не начнет выполняться (дело даже не дойдет до попытки вызова DeleteFile)

Автор: W4FhLF 13.9.2007, 17:37
Цитата(bems @  13.9.2007,  17:11 Найти цитируемый пост)
тот который возвращает GetStdHandle(STD_OUTPUT_HANDLE)


Ну эта функция берёт хендл из PEB, которые заполняется на стадии инициализации процесса. 

Вот тебе самый просто пример вывода на экран в native: 
Код

UNICODE_STRING us;
RtlInitUnicodeString( &us, L"Hello, World!\n" );
NtDisplayString( &us );


Цитата(bems @  13.9.2007,  17:11 Найти цитируемый пост)
не знал. как проверить?


Надо быть внимательней простоsmile 

Цитата(bems @  13.9.2007,  17:11 Найти цитируемый пост)
как любую длл. Может оказаться что она откажется загружаться, тогда загрузить без выполнения точки входа. Я это не к тому что она заработает, а к тому что 


kernel32 попытается открыть порт csrss, у неё ничего не получится и программа свалится в функции NtSecureConnectPort. 

Цитата(bems @  13.9.2007,  17:11 Найти цитируемый пост)
формально не верно


Формально всё верно. Нет kernel32 - нет её интерфейсов. 
Твои придирки к словам мне непонятны. 

Автор: bems 13.9.2007, 17:59
Цитата(W4FhLF @  13.9.2007,  17:37 Найти цитируемый пост)
Твои придирки к словам мне непонятны. 
извини
Цитата(W4FhLF @  13.9.2007,  17:37 Найти цитируемый пост)
Надо быть внимательней просто
к чему? окуда инфа?

Цитата(W4FhLF @  13.9.2007,  17:37 Найти цитируемый пост)
Ну эта функция берёт хендл из PEB, которые заполняется на стадии инициализации процесса. 
этим ты ничего не сказал. Что попадает туда при запуске программы из BootExec?
Цитата(W4FhLF @  13.9.2007,  16:44 Найти цитируемый пост)
это языкозависимое и высокоуровневое понятие и к какому именно системному механизму его применить это вообще личное дело каждого
РЕВ принадлежит системе smile
Цитата(W4FhLF @  13.9.2007,  17:37 Найти цитируемый пост)
Вот тебе самый просто пример вывода на экран в native: 
не спорю, это работает. Вопрос в том, а будет ли работать вывод в хэндл StdOut?

Автор: RinOSpro 14.9.2007, 07:00
Цитата(ne0n @  13.9.2007,  17:08 Найти цитируемый пост)
Гениально!!!Тока каето секреты у тебя староватые  и любой антивирус завижит на такое действие


никто не завизжит орет только аутпост остальные молчат в том чиле авп, др. веб. аваст, и много других
по крайней мере юзер ни за что не додумается лазить по этому адресу мах его знания ограничаться msconfig

Цитата(ne0n @  13.9.2007,  17:08 Найти цитируемый пост)
 а вообще можно обойтись без всяких winexec, т.к. ты там думаешь просто так запятая


Ты сам то пробывал вообщето или ИМХО. 

Цитата(ne0n @  13.9.2007,  17:08 Найти цитируемый пост)
шутник!  


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

И еще эти скандиски и др. запускает сама ОС этож служебные утилиты.

Автор: W4FhLF 14.9.2007, 07:18
Цитата(bems @  13.9.2007,  17:59 Найти цитируемый пост)
этим ты ничего не сказал. Что попадает туда при запуске программы из BootExec?


Ничего, никакого хендла там нет.

Цитата(bems @  13.9.2007,  17:59 Найти цитируемый пост)
РЕВ принадлежит системе 


PEB свой у каждого процесса.



Автор: BaD_SeCt0R 14.9.2007, 07:43
И как тогда приложению удалить тот самый файл?? Или же, например, с реестром работать?

Автор: W4FhLF 14.9.2007, 08:13
BaD_SeCt0R, Native API

Автор: RinOSpro 14.9.2007, 10:18
Addmin у наверное уже пофиг о чем это мы здесь спорим. Так ты нашел для себя решение! если да то какое?

Автор: Addmin 14.9.2007, 10:33
Цитата

Addmin у наверное уже пофиг о чем это мы здесь спорим. Так ты нашел для себя решение! если да то какое?
 
Ну почему же "пофиг" smile Я наблюдаю за вами smile И нахожусь в раздумьи smile Конечно, самый 100 % вариант - это NAPI, но, как сказал 
W4FhLF, "слишком велики мои пробелы в знаниях"  smile (Да, ne0n, спасибо за ссылку). Так что либо winexec, либо сервис, либо драйвер... smile

Автор: RinOSpro 14.9.2007, 10:39
а на сколько раньше тебе надо?

Добавлено через 15 секунд
может хватит и  userinit-a

Автор: Addmin 14.9.2007, 14:22
Цитата

а на сколько раньше тебе надо?

Чем раньше - тем лучше smile

Автор: Romikgy 15.9.2007, 21:23
Цитата(Addmin @  13.9.2007,  14:43 Найти цитируемый пост)
нужна ссылка на книжку Олега Зайцева "Руткиты, кейлогерры и spyware: методы борьбы"? 

давай мож еще кому пригодится smile

Автор: BaD_SeCt0R 16.9.2007, 08:59
Народ, а просвятите пожалуйста, как пишуться и что используют мультизагрузчики ОС? Ведь тут об апи вообще не может быть речи, насколько я понимаю

Автор: W4FhLF 16.9.2007, 09:15
Прерывания и порты I/O биоса используют, с видеопамятью работают напрямую. 

Автор: BaD_SeCt0R 16.9.2007, 09:23
W4FhLF, и как можно с помощью прерываний запустить ОС? Скопировать что-то напрямую в память? Я просто самого принципа не очень понимаю...

Добавлено через 2 минуты и 26 секунд
И сможет ли программа (или что это?) существовать в памяти и работать полноценно после загрузки нужной операционки?

Автор: W4FhLF 16.9.2007, 10:26
http://wasm.ru/publist.php?list=24

После прочтения этих статей, если разберёшься с материалом, найдёшь ответы на свои вопросы и сможешь написать небольшую ОС. Это непросто, но лучшего изложения материала по этой теме на русском я не встречал.

Автор: Addmin 18.9.2007, 09:15
Rootkits, SpyWаrе/AdWаrе, Kеylоggеrs & BасkDооrs 
Олег Зайцев

http://natahaus.ifolder.ru/1201707
http://rapidshare.com/files/17989801/001778.rar.html
Книжка в формате DjVu с примерами на Delphi и С++ 


Руткиты: внедрение в ядро Windows
 Хоглунд Г. Батлер Дж. 
http://rapidshare.com/files/45471530/DjVu_Encoded.rar
http://natahaus.ifolder.ru/2820447

Автор: Firster 20.9.2007, 23:51
Вот ссылка, как писать драйвера на Делфи http://www.rsdn.ru/article/delphi/kmdelphi.xml

Автор: ne0n 21.9.2007, 10:13
Цитата(Firster @  20.9.2007,  23:51 Найти цитируемый пост)
Вот ссылка, как писать драйвера на Делфи http://www.rsdn.ru/article/delphi/kmdelphi.xm

Может тогда сразу взять Delphi DDK(ну если честно таковым эт сложно назвать), основная его задача осуществить перехват в ядре! 

Автор: Addmin 21.9.2007, 16:18
Цитата

Delphi DDK(ну если честно таковым эт сложно назвать)

А что это есть такое? smile

Автор: BaD_SeCt0R 21.9.2007, 16:58
ne0n, я пока тоже ни одного нормального "Delphi DDK" не видел, так, статейки какие-то. Может кинешь в меня ссылкой?

Автор: ne0n 21.9.2007, 21:07
Цитата(Addmin @  21.9.2007,  16:18 Найти цитируемый пост)
А что это есть такое? 

ага!


Цитата(BaD_SeCt0R @  21.9.2007,  16:58 Найти цитируемый пост)
ne0n, я пока тоже ни одного нормального "Delphi DDK" не видел, так, статейки какие-то. Может кинешь в меня ссылкой?


не ссылкой помочь не могу, все походу уже умерли(да и автор сего чуда забил на него, может конечно кто нибудь продолжит это дело), сейчас выложу на файлообменник smile 
воть ссыль на скачку:
http://dump.ru/files/m/m563053772/

Автор: BaD_SeCt0R 21.9.2007, 23:26
Спасибо, поковыряю.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)