• STATISTIQUES
  • Il y a eu un total de 1 membres et 12405 visiteurs sur le site dans les dernières 24h pour un total de 12 406 personnes!


    Membres: 2 433
    Discussions: 3 585
    Messages: 32 831
    Tutoriels: 78
    Téléchargements: 38
    Sites dans l'annuaire: 58


  • ANNUAIRE
  • [FR] Zmaster
    Articles sur l'informatique, le hacking, le P2P, les divx, les astuces windows XP, les GSM, Emule, la cryptograph...
    Hacking
    [EN] Listbrain Version 3
    Site proposant 66 challenges présentés dans une liste mélangée.
    Challenges
    [EN] Sabre Films
    Site de challenge présenté sous la forme d'une quête. Vous êtes un détective et devrez résoudre d...
    Challenges
    [EN] Big-Daddy
    Big-Daddy est site internet communautaire avec un effectif diversifié, y compris des artistes, des programmeur...
    Hacking
    [EN] social-engineer
    Site dédié au Social Engineering en général.
    Hacking
    [EN] osix
    Site de challenge qui utilise un système de level on chaque épreuve doit être réussie avant d'accédÃ...
    Challenges
    [EN] hax.tor
    50 level de challenges mélangés
    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
[NASM] Bot irc basique
10-05-2013, 23h51
Message : #1
Darmo Hors ligne
Newbie
*



Messages : 22
Sujets : 3
Points: 6
Inscription : Mar 2013
[NASM] Bot irc basique
Bonsoir!

Après une semaine à bouffer de l'asm, moi et Trivial avons enfin fini de coder notre bot irc en NASM.

Bon ok il est très basique, il ne fait que lire en brut les messages renvoyés par le serveur auquel on est connecté (irc.big-daddy.fr) et du channel.

Code :
BITS    32

EXTERN  puts
EXTERN  printf
EXTERN  send
EXTERN  recv
      
SECTION .data
        sock_error      db      "[-] Echec de creation de la socket", 0
        sock_ok         db      "[+] Creation de la socket", 0
        connect_error   db      "[-] Echec de la connection au serveur", 0
        connect_ok      db      "[+] Connection au serveur irc.big-daddy.fr", 0
        nick_cmd        db      "NICK BotDe7Lieu", 0xd, 0xa, 0
        user_cmd        db      "USER BotDe7Lieu 0 0 :BotDe7Lieu", 0xd, 0xa, 0
        input_print     db      "\ninput: %s", 0
        channel         db      "JOIN #Secu-appli", 0xd, 0xa, 0
SECTION .bss
        buffer          resb    256
SECTION .text
        GLOBAL  main
main:
        push    ebp
        mov     ebp, esp
make_socket:                    ; _
        push    0               ;  |
        push    0x1             ;  | struct sockaddr_in
        push    0x2             ; _|
        mov     ecx, esp        ; on passe le début de la struct en arg
        mov     ebx, 1          ; syscall socket
        mov     eax, 102        ; syscall sys_socketcall
        int     0x80
        mov     esi, eax        ; file descriptor du socket
        cmp     eax, 0
        jb      sock_fail       ; if (eax < 0) on jmp à sock fail
        push    sock_ok
        call    puts
connect:
        push    0
        push    dword 0xC589BF58 ; irc.big-daddy.fr
        push    dword 0x0B1A0002 ; port: 6667
        mov     ecx, esp         ; ecx = début de la structure
        push    0x10            
        push    ecx
        push    esi
        mov     ecx, esp
        mov     ebx, 3          ; 3 = sys_connect
        mov     eax, 102        ; sys_socketcall
        int     0x80
        test    eax, eax      
        jnz     connect_fail    ; si la connection a échoué
        push    connect_ok
        call    printf
send_:
        push    0               ; int flags
        push    17              ; size_t len
        push    nick_cmd        ; *buf
        push    esi             ; sockfd
        call    send
        push    0               ; int flags
        push    33              ; size_t len
        push    user_cmd        ; *buf
        push    esi             ; sockfd
        call    send
receive:
        push    0               ; int flags
        push    256             ; size_t len
        push    buffer          ; *buf
        push    esi             ; fd du socket
        call    recv
        push    buffer
        call    puts
        push    0
        push    256
        push    buffer
        push    esi
        call    recv
        push    buffer
        call    puts
join:
        push    0               ; flags
        push    18              ; length
        push    channel         ; nom du chan
        push    esi             ; fd du socket
        call    send
        jmp     receive
        leave
        ret
sock_fail:    
        push    sock_error
        call    puts
        leave
        ret
connect_fail:
        push    connect_error
        call    puts
        leave
        ret

Toutes critiques / remarques ou commentaires sont les bienvenus évidemment Wink
+1 (6) -1 (0) Répondre
11-05-2013, 00h36
Message : #2
ark Hors ligne
Psyckomodo!
*****



Messages : 1,033
Sujets : 48
Points: 317
Inscription : Sep 2011
RE: [NASM] Bot irc basique
Cool du code assembleur!
Tiens, ca vous dis je vous fait la version 64 bits demain ? Big Grin
+1 (3) -1 (0) Répondre
11-05-2013, 00h38
Message : #3
Trivial Hors ligne
Membre actif
*



Messages : 223
Sujets : 10
Points: 29
Inscription : Aug 2011
RE: [NASM] Bot irc basique
Salut Ark.
Oui, ça serai plutôt simpa Smile Je compte sur toi pour recevoir ça Smile

The game, Trivial.
Citation :manger informatique, dormir informatique, chier informatique sans jamais avoir l'impression que ça nous accable ou que c'est relou, c'est ça être passionné - j0rn
+1 (0) -1 (0) Répondre
11-05-2013, 00h57
Message : #4
fr0g Hors ligne
NTEuNDI2MzcsLTEuNzc4NDg4
*****



Messages : 348
Sujets : 22
Points: 56
Inscription : Aug 2011
RE: [NASM] Bot irc basique
Nice Wink
+1 (1) -1 (0) Répondre
11-05-2013, 01h05 (Modification du message : 11-05-2013, 01h07 par b0fh.)
Message : #5
b0fh Hors ligne
Membre actif
*



Messages : 210
Sujets : 17
Points: 309
Inscription : Jul 2012
RE: [NASM] Bot irc basique
Très impressionnant, sauf que votre bot ne répond pas aux messages PING, il ne pourra donc pas rester connecté bien longtemps (et sur certains serveurs, il ne se connectera pas du tout).

Mais quitte a faire ce genre de trucs, faites-le jusqu'au bout: appeler la libc en externe c'est de la triche, faites tous les syscalls a la main.

Et sinon, gcc -S, ça va bien aussi.
+1 (4) -1 (0) Répondre
11-05-2013, 01h15
Message : #6
Trivial Hors ligne
Membre actif
*



Messages : 223
Sujets : 10
Points: 29
Inscription : Aug 2011
RE: [NASM] Bot irc basique
(11-05-2013, 01h05)b0fh a écrit : Très impressionnant, sauf que votre bot ne répond pas aux messages PING, il ne pourra donc pas rester connecté bien longtemps (et sur certains serveurs, il ne se connectera pas du tout).

Exact, disons qu'on a arrête de coder le bot, dès qu'il s'est connecté au CHAN en question.
A vrai dire, on a 2 autres projet à réaliser (Un keylogger en C), ainsi qu'un Snake en C++.
Je vais faire ça dans la soirée Smile

(11-05-2013, 01h05)b0fh a écrit : Mais quitte a faire ce genre de trucs, faites-le jusqu'au bout: appeler la libc en externe c'est de la triche, faites tous les syscalls a la main.

Et sinon, gcc -S, ça va bien aussi.

Oui, tu as tous à fais raison. Disons que grace à ce projet, j'ai appris beaucoup de chose en Assembleur. Je suis déjà fier de ce projet, même si ce n'est pas grand chose.

Et pour ce qui est de gcc -S, crois moi que j'en ai mangé Big Grin

The game, Trivial Smile
Citation :manger informatique, dormir informatique, chier informatique sans jamais avoir l'impression que ça nous accable ou que c'est relou, c'est ça être passionné - j0rn
+1 (0) -1 (0) Répondre
11-05-2013, 12h31
Message : #7
sakiir Hors ligne
[sakiir@Ubuntu]:~$ ./ExploitMe ShellC0de
*



Messages : 411
Sujets : 51
Points: 34
Inscription : Sep 2012
RE: [NASM] Bot irc basique
Bien joué les gars ! désolé pour mon absence on refait un truc du genre vite Smile
+1 (1) -1 (0) Répondre
13-05-2013, 15h14
Message : #8
ark Hors ligne
Psyckomodo!
*****



Messages : 1,033
Sujets : 48
Points: 317
Inscription : Sep 2011
RE: [NASM] Bot irc basique
Yo, bon, j'ai toujours pas fini la versions 64 bit, je me heurte en effet a un petit problème que je ne comprends pas...
Il s'agit d'un problème de passage de paramètres a la fonction connect().

Voici ce que me print un strace du binaire:
Code :
connect(3, {sa_family=AF_INET, sin_port=htons(0), sin_addr=inet_addr("0.0.0.0")}, 16) = -1 ECONNREFUSED (Connection refused)

On peux voir que le port et l'ip sont tous les deux a 0, ca me gene un peu ^^

voila le code (ampute de certaines parties):
Code ASM :

BITS 64

        EXTERN  puts
        EXTERN  htons

        %DEFINE BUFF_SIZE       1024
        %DEFINE INT_SIZE        4
        %DEFINE AF_INET         2
        %DEFINE SOCK_STREAM     1

        %DEFINE SYS_SOCKET      41
        %DEFINE SYS_CONNECT     42
        %DEFINE SYS_CLOSE       3
        %DEFINE SYS_WRITE       1

        SECTION .rodata
                sock_error      db      "[-] Error while creating socket", 0
                sock_ok         db      "[+] The socket have been successfuly created", 0
                connect_error   db      "[-] Error: connexion to server failed", 0
                connect_ok      db      "[+] Connecting to irc.n-pn.fr", 0
                nick_cmd        db      "NICK asm64_bot", 0xd, 0xa, 0
                user_cmd        db      "USER BotDe7Lieu 0 0 :BotDe7Lieu", 0xd, 0xa, 0
                input_print     db      "\ninput: %s", 0
                channel         db      "JOIN #bot", 0xd, 0xa, 0
                server          db      "irc.n-pn.fr", 0
        SECTION .bss
                buffer          resb    1024
                sock_fd         resb    4

        SECTION .text

                GLOBAL  main
main:
                push rbp
                mov rbp, rsp
;; make_socket
                mov     rdi, AF_INET
                mov     rsi, SOCK_STREAM
                mov     rdx, 0
                mov     rax, SYS_SOCKET
                syscall                 ; Syscall socket()
                mov     [sock_fd], eax  ; Saving socket fd
                cmp     rax, 0
                jl      sock_fail
                mov     rdi, sock_ok
                call    puts
;; connect
                xor     rdi, rdi
                mov     edi, DWORD [sock_fd]
                xor     rax, rax
                push    server
                push    QWORD 0x0b1a0000
                push    AF_INET
                mov     rsi, rsp
                mov     rdx, 0x10               ; sizeof struct sockaddr ; Don't know how to have a generic value here...
                mov     rax, SYS_CONNECT
                syscall
                cmp     rax, 0
                jl      connect_fail
                mov     rdi, connect_ok
                call    puts

                call    close_socket
                mov     rax, 0
                leave
                ret

sock_fail:
                mov     rdi, sock_error
                call    puts
                mov     rax, 1
                leave
                ret

connect_fail:
                mov     rdi, connect_error
                call    puts
                call    close_socket
                mov     rax, 1
                leave
                ret

close_socket:                                   ; This just closes the socket
                push    rbp
                mov     rbp, rsp
                xor     rdi, rdi
                mov     edi, DWORD [sock_fd]
                mov     rax, SYS_CLOSE
                syscall
                leave
                ret
 


Voili voilou, donc si quelqu'un a une idee de pourquoi, je veux bien savoir! ^^
+1 (0) -1 (0) Répondre
13-05-2013, 18h50
Message : #9
gruik Hors ligne
gouteur de savon
*



Messages : 757
Sujets : 44
Points: 482
Inscription : Oct 2012
RE: [NASM] Bot irc basique
bon du coup t'as timeout sur irc donc je post ici Big Grin

comme dit tu fais un connect() qui prend en paramètre une IP (dword/32) et tu lui files le pointeur sur "irc.n-pn.fr", entre les deux il manque un gethostbyname() ou au moins l'IP hardcodée du serveur (ex: 0x0100007f == 127.0.0.1)

d'autre part tu fais un push QWORD 0x0b1a0000, c'est pas bon du tout, le port est un unsigned short (netinet/in.h) donc il faut mettre push word 0x0b1a à la place
et idem pour le push AF_INET qui suit, sin_family est défini sur 16bits donc push word AF_INET dans la structure, pour ce qui est de sa taille ca ne change pas entre 32/64, ca fait bien 16 octets, hardcodé ça marche très bien
+1 (1) -1 (0) Répondre
14-05-2013, 01h50
Message : #10
ark Hors ligne
Psyckomodo!
*****



Messages : 1,033
Sujets : 48
Points: 317
Inscription : Sep 2011
RE: [NASM] Bot irc basique
Okay, donc j'ai un peu avancer, on a le droit a un bot qui se co/deco instant! \o/ Magnifique. x) le seul probleme etant que j'ai hardcoded pas mal de trucs.

Voici le code pour l'instant, je compte virer mes trucs trop hardcoded et les remplacer par des trucs plus generiques. Et une fois que ca sera fait, je rajouterais la reponse au ping.

Code ASM :
BITS 64

        EXTERN  puts

        %DEFINE BUFF_SIZE       1024
        %DEFINE INT_SIZE        4
        %DEFINE AF_INET         2
        %DEFINE SOCK_STREAM     1

        %DEFINE SYS_SOCKET      41
        %DEFINE SYS_CONNECT     42
        %DEFINE SYS_CLOSE       3
        %DEFINE SYS_WRITE       1

        SECTION .rodata
                sock_error      db      "[-] Error while creating socket", 0
                sock_ok         db      "[+] The socket have been successfuly created", 0
                connect_error   db      "[-] Error: connexion to server failed", 0
                connect_ok      db      "[+] Connecting to irc.n-pn.fr", 0
                nick_cmd        db      "NICK asm64_bot", 0xd, 0xa, 0
                user_cmd        db      "USER BotDe7Lieu 0 0 :BotDe7Lieu", 0xd, 0xa, 0
                input_print     db      "\ninput: %s", 0
                channel         db      "JOIN #bot", 0xd, 0xa, 0
                server          db      "localhost", 0
        SECTION .bss
                buffer          resb    1024
                sock_fd         resb    4

        SECTION .text

                GLOBAL  main
main:
                push rbp
                mov rbp, rsp
;; make_socket
                mov     rdi, AF_INET
                mov     rsi, SOCK_STREAM
                mov     rdx, 0
                mov     rax, SYS_SOCKET
                syscall                 ; Syscall socket()
                mov     [sock_fd], eax  ; Saving socket fd
                cmp     rax, 0
                jl      sock_fail
                mov     rdi, sock_ok
                call    puts
;; connect
                xor     rax, rax
                push    rax                             ; padding
                push    DWORD 0xc589bf58         ; Hardcoded server's IP
                push    WORD 0x0b1a
                push    WORD AF_INET
                mov     rsi, rsp
                xor     rdi, rdi
                mov     edi, DWORD [sock_fd]
                mov     rdx, 0x10
                mov     rax, SYS_CONNECT
                syscall
                cmp     rax, 0
                jl      connect_fail
                mov     rdi, connect_ok
                call    puts

;; send data identification
                xor     rdi, rdi
                mov     edi, [sock_fd]
                mov     rsi, nick_cmd
                mov     rdx, 16
                mov     rax, 1
                syscall
                xor     rdi, rdi
                mov     edi, [sock_fd]
                mov     rsi, user_cmd
                mov     rdx, 33
                mov     rax, 1
                syscall

;; receive datas
                xor     rax, rax
                inc     rax                     ; set rax to 1 for the cmp
                jmp     recv_data_loop1
recv_data_start1:
                xor     rdi, rdi
                mov     edi, [sock_fd]
                mov     rsi, buffer
                mov     rdx, 1024
                mov     rax, 0
                syscall                         ; read what's on the socket 'till there's nothing left

                push    rax                     ; save rax's value  which is read's return value
                mov     rdi, 1
                mov     rsi, buffer
                mov     rdx, rax
                mov     rax, 1
                syscall                         ; print the buffer to stdout
                pop     rax

recv_data_loop1:
                cmp rax, 287                    ; Hardcore cheat of the death hame:
                jne recv_data_start1

;; join chan
                xor     rdi, rdi
                mov     edi, [sock_fd]
                mov     rsi, channel
                mov     rdx, 11
                mov     rax, 1
                syscall

;; close connexion and exit
                call    close_socket
                mov     rax, 0
                leave
                ret

sock_fail:
                mov     rdi, sock_error
                call    puts
                mov     rax, 1
                leave
                ret

connect_fail:
                mov     rdi, connect_error
                call    puts
                call    close_socket
                mov     rax, 1
                leave
                ret

close_socket:                                   ; This just closes the socket
                push    rbp
                mov     rbp, rsp
                xor     rdi, rdi
                mov     edi, DWORD [sock_fd]
                mov     rax, SYS_CLOSE
                syscall
                leave
                ret
 
+1 (3) -1 (0) Répondre
14-05-2013, 13h19
Message : #11
Trivial Hors ligne
Membre actif
*



Messages : 223
Sujets : 10
Points: 29
Inscription : Aug 2011
RE: [NASM] Bot irc basique
Vraiment pas mal Ark \o/.
Dès que tu as finis, la meilleure solution, est d'éditer le Post de Darmo, histoire de foutre ton code Smile.

Trivial.
Citation :manger informatique, dormir informatique, chier informatique sans jamais avoir l'impression que ça nous accable ou que c'est relou, c'est ça être passionné - j0rn
+1 (0) -1 (0) Répondre
14-05-2013, 14h01
Message : #12
gruik Hors ligne
gouteur de savon
*



Messages : 757
Sujets : 44
Points: 482
Inscription : Oct 2012
RE: [NASM] Bot irc basique
ben euh.. non, ça dépend ce que tu cherches, perso je trouve intéressant de voir l'historique des démarches/des pb rencontrés, voir d'où c'est parti et où ça arrive à la fin, sinon on perd la cohérence temporelle en lisant le 1er post qui finalement est le post final et ceux qui suivent n'ont plus aucun intérêt, on pourrait aussi bien les supprimer dans ce cas ?

sinon en terme de bonne idée un lien pastebin et/ou un lien pour télécharger directement, voir le code un peu mieux ou autre, pourquoi pas...
+1 (3) -1 (0) Répondre
14-05-2013, 16h55
Message : #13
supersnail Hors ligne
Éleveur d'ornithorynques
*******



Messages : 1,613
Sujets : 72
Points: 466
Inscription : Jan 2012
RE: [NASM] Bot irc basique
Sinon pour ce qui est des structures, ben la macro NASM "struc" is your friend Wink (et nomdelastruct_size pour avoir sa taille Wink)
Mon blog

Code :
push esp ; dec eax ; inc ebp ; and [edi+0x41],al ; dec ebp ; inc ebp

"VIM est merveilleux" © supersnail
+1 (1) -1 (0) Répondre


Sujets apparemment similaires…
Sujet Auteur Réponses Affichages Dernier message
  [NASM] Création d'un thread sous Linux uniquement avec les syscalls supersnail 2 1,235 04-03-2013, 23h36
Dernier message: Dobry
  [ASM] hello world 64bits (nasm) gruik 2 1,116 01-12-2012, 13h02
Dernier message: gruik

Atteindre :


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