Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   [Hello boot screen] (https://forum.antichat.xyz/showthread.php?t=94140)

0x0c0de 30.11.2008 00:04

[Hello boot screen]
 
[Hello boot screen!]

[System]
Windows XP (SP3,SP2)

[Intro]

Где-то видела статью - не статью, заметку-не заметку про то, что при старте винды на экран можно вывести инфу с помощью функции
VidDisplayStringXY из bootvid.dll. Мне стало интересно, каким образом можно вывести какое-либо изображение. Проникшись этим делом, я написала простенький дров, который как раз-таки выводит на экран при загрузке винды надпись хелло. Возможно, это дело будет кому-то интересно

[Let's go]

Путем недолгих поисков нашла функцию VidSolidColorFill

Код:

VOID
VidSolidColorFill(
  ULONG x1,
  ULONG y1,
  ULONG x2,
  ULONG y2,
  ULONG color
  );

Эта функция так же экспортируется bootvid.dll.
Она закрашивает прямоугольную область (x1,y1) - координата левого верхнего угла, (x2,y2) - координата правого нижнего угла. color - цвет. Вообще прямоугольники вещь великая. Нарисуем прямоугольниками HELLO.

Итак, теперь откомментированный код функции... Она показывает надпись hello и 5 раз меняет цвет фона и надписи. Задержка

функцией KeDelayExecutionThread...

Я подписала где начинается какая буква для читабельности. Две буквы L в одном цикле для сокращения размеров кода. Так же как три горизонтальные палочки у буквы E и две вертикальные у H.

Код:

// Функция, выводящая надпись HELLO во время загрузки винды. Драйвер должен быть заинсталлен как boot!
// bg_color (color) + c - изменение цвета  - так веселее)))
extern "C" VOID SayHello(ULONG x,ULONG y,ULONG color,ULONG bg_color){
int i,c;
 
LARGE_INTEGER s_time;
s_time.QuadPart = -10000000;

for(c=0;c<6;c++){
//фон

VidSolidColorFill(
  0,
  0,
  800,
  600,
  bg_color+c 
  );

// буква Н
for(i=0;i<2;i++){
VidSolidColorFill(
  x+i*40,
  y,
  x+20+i*40,
  y+100,
  color+c 
  );
 }
 
  VidSolidColorFill(
  x+20,
  y+40,
  x+40,
  y+60,
  color+c 
  );
 
 
  // буква Е
  VidSolidColorFill(
  x+80,
  y,
  x+100,
  y+100,
  color+c 
  );
 
  for(i=0;i<3;i++){
  VidSolidColorFill(
  x+100,
  y+i*40,
  x+120,
  y+20+i*40,
  color+c 
  );
  }
 
 
  // две L
 
  for(i=0;i<2;i++){
 
  VidSolidColorFill(
  x+160+i*80,
  y,
  x+180+i*80,
  y+100,
  color+c 
  );
 
  VidSolidColorFill(
  x+180+i*80,
  y+80,
  x+220+i*80,
  y+100,
  color+c 
  );
 
  }
 
  //O
  // две вертикальные палочки
  for(i=0;i<2;i++){
  VidSolidColorFill(
  x+320+i*40,
  y,
  x+340+i*40,
  y+100,
  color+c 
  );
  }
 
  //две горизонтальные палочки
  for(i=0;i<2;i++){
  VidSolidColorFill(
  x+340,
  y+i*80,
  x+360,
  y+20+i*80,
  color+c 
  );
  //Делаем задержку
  KeDelayExecutionThread(KernelMode,FALSE,&s_time);
 
  }
  }
 
}

Вышеприведенный код надо вставить в драйвер и вызвать

Код:

SayHello(60,40,9,7);
например так.

в качестве аргументов кодес принимает начальные координаты x и y, цвет надписи и фона.

Итак, что же получилось?

а)до

http://img141.imageshack.us/my.php?image=dopi1.jpg


б)после

http://img136.imageshack.us/my.php?image=hello1lv3.jpg

и

http://img136.imageshack.us/my.php?image=hello2of9.jpg

[Compilation]

Для самостоятельной компиляции драйвера вам конечно потребуется DDK и либа bootvid.lib, для тех кому ее лень искать - положила в архив с сорцами и бинарем по ссылке ниже. Повторяю - драйвер должен быть инсталлирован как BOOT, иначе толку не будет.

Примечание: рекомендуется подобные извращения тестить на эмуляторе, а не на живой машине, что собственно я и делала.

[Download]
http://rapidshare.com/files/168641900/bootgraph.rar.html

(c)november 0x0c0de 2008

0verbreaK 30.11.2008 00:21

Классная вещь.

Есть вопрос:
инсталировать как BOOT - как можно сделать?

0x0c0de 30.11.2008 00:25

Вот так ~

Код:

SC_HANDLE hSCM = OpenSCManager(0,0, SC_MANAGER_ALL_ACCESS);
SC_HANDLE hSRV = CreateService(hSCM, имя_сервиса, имя_сервиса,SERVICE_ALL_ACCESS,SERVICE_KERNEL_DRIVER,SERVICE_BOOT_START,SERVICE_ERROR_NORMAL,путь_к_драйверу, 0, 0,0, 0, 0);

-----------добавлено-------
и еще забыла сказать - дров положите в
\windows\system32\drivers\ и заинстальте

sn0w 01.12.2008 11:30

осталось ядерный pbrush зарелизить ;)

th13fnano 08.12.2008 20:38

Вижу юзал Windows XP game edition норм сборка, даже boot урезан :)


Время: 16:19