-------[  RtC Mag, At the end of the universe  ]

--------------[  Projet K-os, une trilogie qui s'arrte ?  ]
---------[ in RtC mag 2 & 4 ]
----[  by Androgyne <androgyne-rtc@fr.st>  ]


-------[  Introduction


    Le projet K-os est n en mme temps que la RtC. Au dpart, il consistait  crer une srie de virus mais aprs 3 virus, la srie s'arrte... Explications : Les virus du Projet K-os sont des virus DOS, or maintenant, les virus DOS ne servent plus  rien sinon  apprendre.
    Je tenais donc  clore cette srie (provisoirement ?) sur cet article qui reprend les 3 virus du Projet K-os et les explique largement...


-------[  Ce dont vous avez besoin


    Pour pouvoir compiler un virus, vous aurez besoin de TASM/TLINK (fourni ?). Ensuite, vous pouvez utiliser un batch pour automatiser les oprations. En voil un exemple, il s'utilise en tapant "comp16 nomdufichier" sans mettre l'extension .asm :

--- COMP16.BAT ----------------------------------------------------------------

echo off
tasm %1.asm > %1.lst
tlink /t %1 >> %1.lst
del %1.obj
del %1.map
notepad %1.lst

--- COMP16.BAT ----------------------------------------------------------------

    Sinon, pour pouvoir comprendre les virus, vous aurez besoin, en plus d'un cerveau, de la liste des fonctions de l'interruption 21h (cf fichier int21h). Et enfin, toutes les sources des virus sont disponibles dans /src.


-------[  Les tests


    Vous allez pouvoir tester ces virus sans _aucun_ danger, il suffit de savoir ce qu'on fait... En fait, les diffrentes version de K-os ne recherchent leurs victimes que dans le rpertoire courant, on peut donc crer un programme de test qui servira de tmoin. Voil un code simple qui pourra vous aider.

--- TEST.ASM ------------------------------------------------------------------

.model tiny
.code

        ORG 100h

Start:
        mov ah,09h
        mov dx,offset chaine
        int 21h

        mov ax,4C00h
        int 21h

chaine db 'OK! Virus is operationnal!$'

end start

--- TEST.ASM ------------------------------------------------------------------

    Vous pouvez galement "automatiser" l'infection en crant un batch. Celui qui suit cre un rpertoire /test, y recopie 5 fois le programme test.com, appelle le virus dessus et fait 5 autres copies de test.com. Si tout se passe bien, les 5 premiers devrait avoir grossi. Et si vous cliquez sur l'un d'eux, les 5 derniers grossiront galement...

--- TEST.BAT ------------------------------------------------------------------

md test
cd test
copy ..\test.com 01.com
copy ..\test.com 02.com
copy ..\test.com 03.com
copy ..\test.com 04.com
copy ..\test.com 05.com
..\k-os
copy ..\test.com 06.com
copy ..\test.com 07.com
copy ..\test.com 08.com
copy ..\test.com 09.com
copy ..\test.com 10.com

--- TEST.BAT ------------------------------------------------------------------

    Voil pour la partie test, maintenant, on passe aux virus...


-------[  Trivial K-os


    Trivial K-os est le virus le plus simple que l'on puisse faire, c'est un infecteur de com. C'est le type de virus que tout auteur de virus crit quand il commence. Je vais tenter de vous en expliquer brivement le principe en vous donnant l'algorithme. La source du virus se trouve avec le mag.

    1. changer l'adresse de la DTA
    2. rparer l'hte en replaant les 3 octets du dbut.
    3. rechercher un fichier, si aucun, allez  9.
    4. ouvrir le fichier
    5. vrifier s'il est dj infect, si dj infect, allez  7.
    6. infecter le fichier
    7. fermer le fichier
    8. rechercher d'autres fichier; si trouv, allez  4.
    9. excuter l'hte

    Trivial K-os est un virus  action directe, c'est  dire qu'il recherche directement ses victimes (dans le rpertoire courant ici)  l'aide des fonctions Find First (4Eh) et Find Next (4Fh) de l'int 21h. Pour infecter les fichiers, il utilise une technique classique : il sauvegarde les premiers octets de la victime, se colle  la fin et place un jmp au dbut de la victime pointant sur le dbut du virus.
    La source de ce virus est commente ligne  ligne, toutes les explications y sont donnes. Mais si vous ne comprenez pas tout, crivez moi, je vous expliquerai.


-------[  Polymorphic K-os


    Polymorphic K-os est un virus polymorphe. Le temps est venu de vous expliquer ce que sont les virus polymorphes et ce qu'est un moteur de polymorphisme.


 {Necessit et principe du polymorphisme}

    Le polymorphisme est une technique anti antivirus. Un petit retour en arrire s'impose : en 1992, tous les antivirus fonctionnaient selon le principe du scanner (aujourd'hui, beaucoup utilisent encore cette technique), c'est  dire qu'ils recherchaient dans les codes une chane caractristique du virus. Jusqu' ce qu'un Bulgare du nom de Dark Avenger invente le premier moteur de polymorphisme. Les dveloppeurs d'antivirus ont cru un instant faire faillite car ils n'arrivaient pas  trouver une chane caractristique du virus vu qu'il changeait de forme  chaque rplication... Comment ? C'est tout l'intrt du polymorphisme.


 {Le chiffrement}

    Car en fait, un virus polymorphe est un virus crypt. L'algorithme de chiffrement est souvent trs simple (XOR) pour deux raisons : a prend moins de place et la routine de chiffrement est plus simple. Ensuite, c'est simple, avant de recopier le virus dans le nouvel hte, on le chiffre quelque part en mmoire, on copie la routine de dchiffrement adquate (c'est  dire avec la bonne cl) puis le virus chiffr et voil, le tour est jou. Seulement, on ne rsoud pas le problme du scanner... En effet, il suffit d'avoir un morceau de chaine de la routine de dcryptage et on peut contrer le virus  l'aide d'un simple scan. C'est alors qu'est arriv LA solution.
    Le chiffrement n'est pas la partie essentielle du polymorphisme, on peut trs bien concevoir une routine de chiffrement triviale qui mettra en dfaut bon nombre d'antivirus. Mais cette partie ne doit pas tre nglige.


 {Le gnrateur de code}

    En fait, l'ide essentielle du polymorphisme est de gnrer une routine de dchiffrement diffrente  chaque fois. Comment ? Une routine de dchiffrement est constitue gnralement de quelques lignes de codes, le but est de rajouter alatoirement entre ces lignes de codes du code qui ne fait rien, c'est  dire du code qui n'a aucune incidence sur le fonctionnement de la routine. Exemple :

    xor ax,dx

fera exactement la mme chose que :

    nop
    mov cx,cx
    xor ax,dx
    or ax,0

    Voil en gros le principe.

    Maintenant, techniquement, on construit un gnrateur de code alatoire, c'est  dire une routine capable de gnrer du code fonctionnel mais qui n'a aucune incidence sur le gnrateur. On peut gnrer toute sorte d'instruction, du "nop" au "mov" en passant par des "or" et des "and"... Les meilleurs moteurs sont mme capables de gnrer des "jmp" ou des appels interruption !
    Le gnrateur de code est le noyau du moteur, plus on gnre d'instructions diffrentes, meilleur est le moteur, et plus il est important en taille. DAME (Dark Angel Multiple Encryptor) par exemple fait environ 1500 lignes de codes et 2Ko une fois compil... La prouesse technique est sans nul doute spectaculaire mais je doute qu'un tel moteur soit grable dans un virus de quelques centaines d'octets.


 {Androgyne's polymorphism engine}

    Mon moteur ne gnre qu'un petit nombre d'instructions mais je pense que cela est suffisant pour comprendre le fonctionnement d'un moteur de polymorphisme. Voil donc la liste des instructions que mon moteur gnre (si une instruction contient deux registre, ce sont les mmes, ce qui implique que le code n'a aucune incidence sur ce registre) :
    nop
    push reg / pop reg
    mov reg,reg
    xchg reg,reg
    or reg,reg
    and reg,reg
    or reg,0000h
    and reg,0FFFFh
    cmp reg,*

    Le code du moteur est fourni avec le mag, il est trs peu comment mais je ne pense pas qu'il soit incomprhensible. Si il y a des passges peu clair, dites moi lesquels, et je rajouterai les commentaires adquats. Cependant, je pense que si vous avez compris le principe du polymorphisme, il n'y aura pas de problme de comprhension.


 {Bugs}

    Rien n'est parfait, mon moteur contient un bug difficile  trouver de sorte que, inclus dans un virus, a ne marche pas. En revanche, le gnrateur de code fonctionne correctement. Toute personne prte  dbugger est la bienvenue...


-------[  Genetical K-os


{Necessit et principe du polymorphisme lent}

    Le polymorphisme est une arme puissante. Mais nos amis les dveloppeurs d'antivirus ont trouv des parades : des mulateurs de code, des analyseurs heuristiques... Mais le pire n'est pas l. En fait, au dbut du polymorphisme, on pensait que plus gnrait de routines de dchiffrement, mieux c'tait. Erreur ! Car les dveloppeurs d'antivirus rpliquait le virus des milliers de fois pour voir toutes les possibilits et ainsi adapter leurs armes au moteur. En rponse, les vxers ont introduit une technique simple : le gnrateur de nombre alatoire est en fait le cerveau du moteur, c'est lui qui prend les dcisions, tout dpend de lui. Le problme venait du fait qu'on changeait la valeur initiale du moteur  chaque rplication, ce qui faisait que l'on changeait de routine  chaque fois. Alors est arriv le polymorphisme lent. Au lieu de changer cette valeur initiale  chaque fois, les vxers ont fait des routines pour la changer une fois toutes les semaines ou tous les mois. Ainsi, les dveloppeurs d'antivirus avaient beau infecter des milliers de leurres, ils obtenaient toujours la mme routine de dchiffrement.
    Il y a plusieurs manires de faire du polymorphisme lent : la premire est d'initialiser le gnrateur de nombres alatoires avec une valeur dpendant de la date. Mais on peut aussi l'initialiser avec une valeur dpendant de l'environnement (pays, version de l'OS, ...). a revient au mme. Mark Ludwig, dans _Du virus  l'antivirus_ propose une autre technique de polymorphisme lent : le polymorphisme gntique.


{Une technique parmi d'autres : les virus gntiques}

    Pourquoi gntique ? Parce qu'on va copier le systme de gne que l'on trouve dans la nature, chez les virus biologiques par exemple, hehe. On va crer un tableau de nombres, le gne, que l'on va remplir de nombres tirs au hasard, et qui va nous servir de base de dcision. Au lieu de tirer un nombre au hasard pour prendre une dcision, il nous suffit de prendre les nombres du tableau un par un. Ainsi, tant que le gne ne change pas, le virus ne change pas. Il suffit donc de modifier le gne, de le faire muter, pour que le virus change de forme. Genetical K-os est bas sur ce principe. En fait, la seule partie  modifier est la partie concernant le gnrateur de nombres alatoires, tout le reste est identique.


-------[  Les codes


    Je vous ai mis les codes de Trivial K-os (trivial.asm), du moteur de polymorphisme (andro.engine.asm) et du gnrateur de nombres alatoires modifi en ajoutant le gne (andro.genetic.asm). Si il y a la moindre chose que vous ne compreniez pas, dites le moi, je tcherai d'claircir mon propos.


-------[  EOF