• STATISTIQUES
  • Il y a eu un total de 2 membres et 5966 visiteurs sur le site dans les dernières 24h pour un total de 5 968 personnes!


    1 membre s'est inscrit dans les dernières 24h!


    Membres: 2 608
    Discussions: 3 580
    Messages: 32 820
    Tutoriels: 78
    Téléchargements: 38
    Sites dans l'annuaire: 58


  • ANNUAIRE
  • [EN] Framework Metasploit
    Le Framework Metasploit est un logiciel gratuit, open source de tests de pénétration développ&ea...
    Vulnérabilités
    [FR] Forum-Webmaster
    Une communauté webmaster pour apporter / recevoir de l'aide en création de site internet. Webmaster...
    Webmaster
    [FR] InfoMirmo
    Apprentissage de l'informatique par l'intermédiaire de challenges de sécurité. Venez app...
    Hacking
    [EN] Hack this site
    Basic: 11, Realistic: 17, Application: 18, Programming: 12, Extbasic: 14, Javascript: 7, Stego: 17
    Challenges
    [EN] CS Tutoring Center
    Site de challenge spécialisé dans les challenges de programmation C++ et java cependant, d'autres langages pe...
    Challenges
    [EN] Packet Storm
    Packet Storm est un site qui combine nouvelles de la sécurité informatique, téléchargemen...
    Vulnérabilités
    [EN] This is legal
    Basic: 10, Realistic: 5, Programming: 1, Bonus: 11, SQL: 2, Encryption: 6, Application: 4, User Contributed: 3
    Challenges

  • DONATION
  • Si vous avez trouvé ce site internet utile, nous vous invitons à nous faire un don du montant de votre choix via Paypal. Ce don servira à financer notre hébergement.

    MERCI!




Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
[ASM] Un jeu de la vie dans le MBR
21-12-2013, 02h11 (Modification du message : 25-02-2015, 17h52 par Junky.)
Message : #1
gruik Hors ligne
gouteur de savon
*



Messages : 757
Sujets : 44
Points: 482
Inscription : Oct 2012
[ASM] Un jeu de la vie dans le MBR
comme son nom l'indique, c'est un jeu de la vie qui tient en moins de 446 octets dans le MBR, de l'assembleur 16bits en mode réel donc, pour les geeks curieux Wink

prérequis pour faire tourner : nasm & qemu
le code en pièce jointe contient + de commentaires

les critiques/suggestions/patch/codes rivaux sont évidement les bien venus

Code ASM :

; ----------------------------------------------------
; jeu de la vie
;
; nasm -f bin gameoflife.asm
; qemu-system-i386 -hda gameoflife
;
; appuyer sur une touche lance une nouvelle génération
;
; - gruik / 2013
; ----------------------------------------------------
bits 16
org 0

%define LARGEUR 320
%define HAUTEUR 200
%define COTE    190
%define VIDEO(x,y) ((y * LARGEUR) + x)

        jmp start

        ; ----------
        ; proc line
line:
        mov al, 31
        mov cx, (COTE+1)
l1:
        mov [es:di], al
        cmp ah, 'v'
        je l2
        inc di
        jmp l3
l2:
        add di, LARGEUR
l3:
        loop l1
        ret

        ; -------------
        ; proc display
display:
        mov si, 0
        mov di, VIDEO(((LARGEUR-COTE)/2),((HAUTEUR-COTE)/2))
        mov cx, COTE
l5:
        mov bx, cx
        mov cx, COTE
        rep movsb
        sub di, COTE
        add di, LARGEUR
        mov cx, bx
        loop l5
        ret

        ; ------------
        ; proc random
random:
        rdtsc
        xor al, ah
        xor ax, si
        xor ax, cx
        ret

        ; ---------------
        ; proc neibcount
neibcount:
        push cx
        xor ax, ax
        mov dx, [ds(LARGEUR*HAUTEUR)+0)]
        mov cx, 7
l10:
        cmp cl, 2
        jg l11
        sub di, LARGEUR
        cmp dh, COTE
        jne l12
        add di, (COTE*LARGEUR)
        jmp l12
l11:
        cmp cl, 5
        jb l12
        add di, LARGEUR
        cmp dh, 1
        jne l12
        sub di, (COTE*LARGEUR)
l12:
        xor bx, bx
        inc bx
        shl bl, cl
        mov bh, bl
        and bl, (1|8|32)
        test bl, bl
        je l13
        dec di
        cmp dl, COTE
        jne l14
        add di, COTE
        jmp l14
l13:
        mov bl, bh
        and bl, (4|16|128)
        test bl, bl
        je l14
        inc di
        cmp dl, 1
        jne l14
        sub di, COTE
l14:
        mov al, [es:di]
        and al, 32
        test al, al
        je l15
        inc ah
l15:
        mov di, [ds(LARGEUR*HAUTEUR)+2)]
        loop l10
        mov al, [es:di]
        cmp ah, 2
        je l18
        cmp ah, 3
        je l16
        jmp l17
l16:    ; 3 voisines vivantes
        mov al, 32
        jmp l18
l17:    ; 0, 1 ou +3 voisines vivantes
        xor al, al
        jmp l18
l18:    ; 2 voisines vivantes
        mov [dsi], al
        pop cx
        ret

        ; -----------
        ; proc tempo
tempo:
        xor ax, ax
        int 0x1a
        mov bx, dx
l9:
        xor ax, ax
        int 0x1a
        sub dx, bx
        cmp dx, 2
        jb l9
        ret

start:
        mov ax, 0xa000
        mov es, ax
        mov ax, 0x8000
        mov ds, ax
        mov ss, ax
        xor sp, sp

        mov ax, 0x0013
        int 0x10

        ; --------------------
        ; on dessine le cadre
        ;
        mov ah, 'h'     ; d'abord les lignes horizontales
        mov di, VIDEO((((LARGEUR-COTE)/2)-1),(((HAUTEUR-COTE)/2)-1))
        call line
        mov di, VIDEO((((LARGEUR-COTE)/2)-1),(((HAUTEUR-COTE)/2)+COTE))
        call line
        mov ah, 'v'     ; puis les lignes verticales
        mov di, VIDEO((((LARGEUR-COTE)/2)-1),(((HAUTEUR-COTE)/2)-1))
        call line
        mov di, VIDEO((((LARGEUR-COTE)/2)+COTE),(((HAUTEUR-COTE)/2)-1))
        call line

        ; ---
        ; on initialise le premier ecran
        ;
        xor si, si
        mov cx, (COTE*COTE)
l4:
        push cx
        call random
        pop cx
        and al, 1
        shl al, 5
        mov [dsi], al
        inc si
        loop l4
        call display

        ; =====================
        ; | boucle principale |
        ; =====================
l6:
        xor si, si
        mov di, VIDEO(((LARGEUR-COTE)/2),((HAUTEUR-COTE)/2))
        xor cx, cx
        mov cl, COTE
l8:
        mov [ds(LARGEUR*HAUTEUR)+0)], cl
        mov cl, COTE
l7:
        mov [ds(LARGEUR*HAUTEUR)+1)], cl
        mov [ds(LARGEUR*HAUTEUR)+2)], di
        call neibcount
        inc si
        inc di
        mov cl, [ds(LARGEUR*HAUTEUR)+1)]
        loop l7
        add di, LARGEUR-COTE
        mov cl, [ds(LARGEUR*HAUTEUR)+0)]
        loop l8
        call display
        call tempo
        mov ax, 0x0100
        int 0x16
        jz l6
        mov ah, 0
        int 0x16
        jmp start

        times 446-($-$$) db 0
        times 64 db 0   ; partitions table
        dw 0xaa55
 


Pièces jointes
.asm   pouet.asm (Taille : 6.01 Ko / Téléchargements : 10)
Avant donc que d'écrire, apprenez à penser.
Selon que notre idée est plus ou moins obscure, l'expression la suit, ou moins nette, ou plus pure.
Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément.
(Nicolas Boileau, L'Art poétique)
+1 (11) -1 (1) Répondre
21-12-2013, 14h23 (Modification du message : 21-12-2013, 14h24 par Kiwazaru.)
Message : #2
Kiwazaru Hors ligne
Padawan d'un super escargot
*



Messages : 284
Sujets : 26
Points: 139
Inscription : Mar 2012
RE: [ASM] Un jeu de la vie dans le MBR
HaHa ! Nice ça, mais ça veut dire qu'on peut mettre n'importe quoi dans la routine et la signature facultative sans que ça crée de problème au boot?
Toucher au Kernel, c'est un peut comme se shooter au LSD, on pense pouvoir tout faire mais ça finit souvent mal.
+1 (0) -1 (0) Répondre
21-12-2013, 15h00
Message : #3
gruik Hors ligne
gouteur de savon
*



Messages : 757
Sujets : 44
Points: 482
Inscription : Oct 2012
RE: [ASM] Un jeu de la vie dans le MBR
(21-12-2013, 14h23)Kiwazaru a écrit : ça veut dire qu'on peut mettre n'importe quoi dans la routine et la signature facultative sans que ça crée de problème au boot?

ben là ici le """bootloader""" chargera pas de kernel ou quoi, il tourne en boucle sur un jeu de la vie à la place, mais dans l'absolu ça doit être envisageable de lui faire booter quelque chose de manière simplifiée (sans trop de checks en tous genres), sur une disquette par exemple...
Avant donc que d'écrire, apprenez à penser.
Selon que notre idée est plus ou moins obscure, l'expression la suit, ou moins nette, ou plus pure.
Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément.
(Nicolas Boileau, L'Art poétique)
+1 (0) -1 (1) Répondre
22-12-2013, 22h35
Message : #4
sakiir Hors ligne
[sakiir@Ubuntu]:~$ ./ExploitMe ShellC0de
*



Messages : 411
Sujets : 51
Points: 34
Inscription : Sep 2012
RE: [ASM] Un jeu de la vie dans le MBR
Une Question que je me pose souvent sur ce genre de programme ring0 , comment tu fais pour tester ton code ? debug ? etc ??
Par exemple dans la création d'un bootloader , tu utilises une VM ?
Si non , je n'y comprend pas grand chose en lisant en quelque secondes :p
+1 (0) -1 (0) Répondre
22-12-2013, 22h50 (Modification du message : 22-12-2013, 22h51 par Kiwazaru.)
Message : #5
Kiwazaru Hors ligne
Padawan d'un super escargot
*



Messages : 284
Sujets : 26
Points: 139
Inscription : Mar 2012
RE: [ASM] Un jeu de la vie dans le MBR
gruik a écrit :prérequis pour faire tourner : nasm & qemu

Btw je ne pense pas qu'on puisse parler de "ring0" sachant que le noyau n'est pas encore chargé lors de l’exécution du programme.
Toucher au Kernel, c'est un peut comme se shooter au LSD, on pense pouvoir tout faire mais ça finit souvent mal.
+1 (0) -1 (0) Répondre
23-12-2013, 03h03
Message : #6
gruik Hors ligne
gouteur de savon
*



Messages : 757
Sujets : 44
Points: 482
Inscription : Oct 2012
RE: [ASM] Un jeu de la vie dans le MBR
(22-12-2013, 22h35)sakiir a écrit : Une Question que je me pose souvent sur ce genre de programme ring0 , comment tu fais pour tester ton code ? debug ? etc ??

comme dit Kiwa c'est marqué dessus, ca tourne dans du qemu, et pour debugger j'ai fait un post il y a pas longtemps dans la section N-PN OS qui explique comment faire du remote debugging entre qemu et gdb

(22-12-2013, 22h50)Kiwazaru a écrit : je ne pense pas qu'on puisse parler de "ring0" sachant que le noyau n'est pas encore chargé

yep y'a de ça, la notion de "ring" n'apparait qu'avec le passage en mode protégé (ou en long mode pour du 64bits) qui permet l'accès au flag IOPL, sachant que l'appellation "ring 0" pour désigner l'espace noyau c'est plus windozeux qu'autre chose, sous linux on différenciera simplement kernelland et userland
Avant donc que d'écrire, apprenez à penser.
Selon que notre idée est plus ou moins obscure, l'expression la suit, ou moins nette, ou plus pure.
Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément.
(Nicolas Boileau, L'Art poétique)
+1 (1) -1 (1) Répondre
23-12-2013, 11h20
Message : #7
thxer Hors ligne
:(){ :|:& };:
*



Messages : 382
Sujets : 60
Points: 162
Inscription : Feb 2013
RE: [ASM] Un jeu de la vie dans le MBR
Très instructif Merci.
Thxer.com
Twitter Thxer_

Code BASH :
echo "JkZ Palx" | sed 'y/lPZaJxk/MG3@tEH/'




+1 (0) -1 (0) Répondre
23-12-2013, 11h57
Message : #8
sakiir Hors ligne
[sakiir@Ubuntu]:~$ ./ExploitMe ShellC0de
*



Messages : 411
Sujets : 51
Points: 34
Inscription : Sep 2012
RE: [ASM] Un jeu de la vie dans le MBR
Oui en effet je me corrige , il ne peut pas s'agir de "ring" dans le "boot" Smile
merci pour vos réponses Smile
+1 (0) -1 (0) Répondre
23-12-2013, 12h02 (Modification du message : 23-12-2013, 12h03 par EpicOut.)
Message : #9
EpicOut Hors ligne
Membre actif
*



Messages : 121
Sujets : 10
Points: 22
Inscription : Feb 2012
RE: [ASM] Un jeu de la vie dans le MBR
il fait du ring -1 si tu préfères sakiir, en tout cas tu as du avoir de la patience gruik, j'admire.
Plein de mouches peuvent rentrer en boucle close.
[Image: vQs9wRu.png]
+1 (0) -1 (0) Répondre
23-12-2013, 19h25 (Modification du message : 23-12-2013, 19h34 par Junky.)
Message : #10
Junky Hors ligne
Snorky Master
*



Messages : 228
Sujets : 35
Points: 203
Inscription : Mar 2013
RE: [ASM] Un jeu de la vie dans le MBR
Bonjour,
(23-12-2013, 12h02)EpicOut a écrit : il fait du ring -1 si tu préfères sakiir, en tout cas tu as du avoir de la patience gruik, j'admire.

Je vais peu être m'écarter du sujet (désolé gruik) mais cette notion de ring -1 ne me plaît pas tout a fait. "Le ring -1 n'est utilisé qu'en virtualisation." Concrètement il n'existe pas.
La virtualisation est un monde bien a lui ou il faut comprendre certaines choses.

Ton système fonctionne "via" différent ring. le 0, 1, 2, 3. Le 0 est le kernel comme le dit plus haut gruik. Les 1 et 2 sont pour les devices drivers, et le 3 pour les applications.
Lors de l'éxécution d'un programme, les instructions descendent de ring en ring (selon leurs besoins) puis éxécutés. Le ring 0 étnt le kernelland, il détient le plus de privilèges.

Lorsque tu virtualises un système, il exige les mêmes règles (normal). Sauf que a ce moment la plusieurs problématiques se posent:

- Lorsque tu va créer ton programme (Virtualbox, vmware...) qui va lancer ton OS (virtuel) son kernel va être éxécuter dans le ring 3 et non le 0 comme il a été conçu, ce qui engendrera des plantages lors de l'exution de code necessitant le ring0.

- Mais aussi si l'OS est directement lancer dans le ring 0, il aura AUTANT de droit que le système hote. Donc pas bien non plus.

Plusieurs solutions existent déjà
La solution vmware, est "d'intercepter" le flut de donnés destinés aux ring0 et de les traduire a la volé. Ce qui peu entrainer des pertes de performances.
La solution xen quand a elle est de la "paravirtualisation". Elle modifie le systeme a virtualiser, afin de lui permettre de fonctionner sans l'execution de code en ring0. Il y a moins de perte de performance, mais le souci majeur, est qu'il faut modifier le système d'exploitation

Donc finalement le -1 est le 0, et le 0 sont les bidouilles que font les hyperviseurs. Il n'est pas "réel". Mais il faut bien savoir une chose, il n'existe que 4 NIVEAUX DE RING, pas plus pas moins... Smile

Je ne rentre pas dans les détails puisque ce n'est pas le sujet, mais comme vous parliez de ring j'ai pensé qu'un petit rappel ne fait pas de mal. Surtout pour ceux qui ne savent pas comment un système se comporte.

Junky
Pour la sécurité, sous linux, le principal soucis est l'interface chaise/clavier

+1 (4) -1 (0) Répondre
23-12-2013, 21h28
Message : #11
sakiir Hors ligne
[sakiir@Ubuntu]:~$ ./ExploitMe ShellC0de
*



Messages : 411
Sujets : 51
Points: 34
Inscription : Sep 2012
RE: [ASM] Un jeu de la vie dans le MBR
AhAh junky , je crois que Epic0ut faisais une petite Van si j'ai bien compris pck je n'ai jamais entendu parlé de "ring -1" mais ouai c'est une belle image le "ring -1" c'est ce qu'on pourrais trouver avant le chargement de l'OS quoi :Smile
+1 (0) -1 (0) Répondre
23-12-2013, 21h34
Message : #12
EpicOut Hors ligne
Membre actif
*



Messages : 121
Sujets : 10
Points: 22
Inscription : Feb 2012
RE: [ASM] Un jeu de la vie dans le MBR
euh ouais c'était une vanne le ring -1 n'existe pas.
Plein de mouches peuvent rentrer en boucle close.
[Image: vQs9wRu.png]
+1 (0) -1 (0) Répondre


Sujets apparemment similaires…
Sujet Auteur Réponses Affichages Dernier message
  [C] [Win32] Injection de DLL dans un process avant son initialisation supersnail 4 327 26-03-2013, 23h27
Dernier message: fr0g

Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)
N-PN
Accueil | Challenges | Tutoriels | Téléchargements | Forum | Retourner en haut